source: lliurex-session-manager/trunk/fuentes/install-files/usr/bin/lliurex-session-manager @ 2548

Last change on this file since 2548 was 2548, checked in by jrpelegrina, 3 years ago

WIP in i18n

  • Property svn:executable set to *
File size: 8.8 KB
Line 
1#!/usr/bin/env python
2
3import gi
4gi.require_version('Gtk', '3.0')
5
6from gi.repository import Gtk, GObject,GLib
7import dbus
8
9import threading
10import time
11
12import signal
13signal.signal(signal.SIGINT,signal.SIG_DFL)
14
15import gettext
16gettext.textdomain('lliurex-session-manager')
17_ = gettext.gettext
18
19
20
21RSRC_PATH="/usr/share/lliurex-session-manager/rsrc/"
22GLADE_FILE=RSRC_PATH+"lliurex-session-manager.ui"
23SUSPEND_RSRC=RSRC_PATH+"system-suspend.svg"
24HIBERNATE_RSRC=RSRC_PATH+"system-suspend-hibernate.svg"
25LOGOUT_RSRC=RSRC_PATH+"system-log-out.svg"
26REBOOT_RSRC=RSRC_PATH+"system-reboot.svg"
27SHUTDOWN_RSRC=RSRC_PATH+"system-shutdown.svg"
28
29
30class LliurexSessionManager:
31       
32        def __init__(self):
33               
34                self.max_seconds=15.0
35                self.current_second=0
36                self.progress_txt=_("%s will %s in %s seconds...")
37                self.can_suspend=True
38                self.can_hibernate=True
39                self.can_switch=True
40               
41                #DBUS INIT
42                self.dbus_connections_init()
43                #GTK INIT
44                self.start_gui()
45               
46               
47        #def init
48       
49        def dbus_connections_init(self):
50               
51                self.session_bus=dbus.SessionBus()
52                self.system_bus=dbus.SystemBus()
53                self.sessman = self.session_bus.get_object("org.gnome.SessionManager","/org/gnome/SessionManager")
54                self.lockman = self.session_bus.get_object("org.mate.ScreenSaver","/org/mate/ScreenSaver")
55                try:
56                        display_obj = self.system_bus.get_object("org.freedesktop.DisplayManager","/org/freedesktop/DisplayManager/Seat0")
57                        self.displayman = dbus.Interface(display_obj,"org.freedesktop.DisplayManager.Seat")
58                except:
59                        self.can_switch=False   
60                login_obj=self.system_bus.get_object("org.freedesktop.login1","/org/freedesktop/login1")
61                self.sysman=dbus.Interface(login_obj,"org.freedesktop.login1.Manager")
62                if self.sysman.CanSuspend()!="yes":
63                        self.can_suspend=False
64                if self.sysman.CanHibernate()!="yes":
65                        self.can_hibernate=False
66               
67               
68        #def dbus_connections_init
69       
70        def start_gui(self):
71               
72                builder=Gtk.Builder()
73                builder.set_translation_domain('lliurex-session-manager')
74                builder.add_from_file(GLADE_FILE)
75               
76                self.main_window=builder.get_object("window2")
77                self.main_box=builder.get_object("main_box")
78                self.session_box=builder.get_object("session_box")
79                self.action_box=builder.get_object("action_box")
80                self.progressbar=builder.get_object("progressbar")
81                self.progressbar.set_show_text(True)
82               
83                self.stack=Gtk.Stack()
84                self.stack.set_transition_duration(500)
85                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
86                self.stack.add_titled(self.session_box,"options","Session Options")
87                self.stack.add_titled(self.action_box,"action", "Execute option")
88                self.main_box.pack_start(self.stack,True,True,0)
89               
90               
91                self.lock_button=builder.get_object("lock_button")
92                self.logout_button=builder.get_object("logout_button")
93                self.switch_button=builder.get_object("switch_button")
94               
95                self.suspend_button=builder.get_object("suspend_button")
96                self.hibernate_button=builder.get_object("hibernate_button")
97                self.reboot_button=builder.get_object("reboot_button")
98                self.shutdown_button=builder.get_object("shutdown_button")
99                self.cancel_button=builder.get_object("cancel_button")
100                self.back_button=builder.get_object("back_button")
101               
102                self.current_action_image=builder.get_object("current_action_image")
103                self.current_action_label=builder.get_object("current_action_label")
104                self.execute_now_button=builder.get_object("execute_now_button")
105               
106               
107               
108               
109                self.lock_button.connect("clicked",self.lock_clicked)
110                self.logout_button.connect("clicked",self.logout_clicked)
111                self.switch_button.connect("clicked",self.switch_clicked)
112               
113                self.suspend_button.connect("clicked",self.suspend_clicked)
114                self.hibernate_button.connect("clicked",self.hibernate_clicked)
115                self.reboot_button.connect("clicked",self.reboot_clicked)
116                self.shutdown_button.connect("clicked",self.shutdown_clicked)
117               
118                self.cancel_button.connect("clicked",self.exit)
119                self.back_button.connect("clicked",self.back_clicked)
120               
121                self.main_window.connect("destroy",self.exit)
122               
123               
124                self.main_window.show_all()
125               
126                self.back_button.hide()
127                self.hibernate_button.set_visible(self.can_hibernate)
128                self.suspend_button.set_visible(self.can_suspend)
129                self.switch_button.set_visible(self.can_switch)
130               
131               
132                GObject.threads_init()
133                Gtk.main()
134               
135               
136        #def start_gui
137
138       
139        def shutdown(self):
140               
141                print "Shutting down..."
142               
143                t=threading.Thread(target=self.sessman.RequestShutdown)
144                t.daemon=True
145                t.start()
146               
147        #def
148       
149        def reboot(self):
150               
151                print "Rebooting..."
152               
153                t=threading.Thread(target=self.sessman.RequestReboot)
154                t.daemon=True
155                t.start()
156               
157        #def
158       
159       
160        def suspend(self):
161               
162                print "Suspending..."
163               
164                t=threading.Thread(target=self.sysman.Suspend,args=(dbus.Boolean(True),))
165                t.daemon=True
166                t.start()
167               
168        #def suspend
169       
170        def hibernate(self):
171               
172                print "Hibernating..."
173               
174                t=threading.Thread(target=self.sysman.Hibernate,args=(dbus.Boolean(True),))
175                t.daemon=True
176                t.start()
177               
178        #def hibernating
179       
180       
181        def switch_user(self):
182               
183                print "Going back to lightdm..."
184                t=threading.Thread(target=self.displayman.SwitchToGreeter)
185                t.daemon=True
186                t.start()
187               
188        #def switch_user
189       
190        def lock(self):
191               
192                print "Locking screen..."
193                t=threading.Thread(target=self.lockman.Lock)
194                t.daemon=True
195                t.start()
196       
197        #def lock
198       
199       
200        def logout(self):
201               
202                print "Logging out..."
203               
204                t=threading.Thread(target=self.sessman.Logout,args=(dbus.UInt32(1),))
205                t.daemon=True
206                t.start()
207               
208        #def logout
209       
210
211        def execute_now(self,widget,callback):
212
213                callback()
214                self.exit(None)
215               
216        #def execute_now
217
218        def back_clicked(self,widget):
219               
220                self.current_second=0
221                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
222                self.stack.set_visible_child_name("options")
223                self.back_button.hide()
224                self.cancel_button.show()
225                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
226       
227        #def back_clicked
228               
229               
230        def lock_clicked(self,widget):
231               
232                self.lock()
233                self.exit(None)
234               
235        #def lock_clicked
236       
237        def logout_clicked(self,widget):
238               
239                self.stack.set_visible_child_name("action")
240                self.current_action_image.set_from_file(LOGOUT_RSRC)
241                self.current_action_label.set_text(_("Log out now"))
242                self.execute_now_button.connect("clicked",self.execute_now,self.logout)
243                GLib.timeout_add(10,self.wait_to_execute,_("The session"),_("close"),self.logout)
244                self.cancel_button.set_visible(False)
245                self.back_button.set_visible(True)
246               
247        #def logout_clicked
248       
249       
250        def switch_clicked(self,widget):
251               
252                self.switch_user()
253                self.exit(None)
254               
255               
256        #def switch_clicked
257       
258        def suspend_clicked(self,widget):
259               
260                self.stack.set_visible_child_name("action")
261                self.current_action_image.set_from_file(SUSPEND_RSRC)
262                self.current_action_label.set_text(_("Suspend now"))
263                self.execute_now_button.connect("clicked",self.execute_now,self.suspend)
264                GLib.timeout_add(10,self.wait_to_execute,_("The system"),_("suspend"),self.suspend)
265                self.cancel_button.set_visible(False)
266                self.back_button.set_visible(True)
267               
268        #def suspend_clicked
269       
270        def hibernate_clicked(self,widget):
271               
272                self.stack.set_visible_child_name("action")
273                self.current_action_image.set_from_file(HIBERNATE_RSRC)
274                self.current_action_label.set_text(_("Hibernate now"))
275                self.execute_now_button.connect("clicked",self.execute_now,self.hibernate)
276                GLib.timeout_add(10,self.wait_to_execute,_("The system"),_("hibernate"),self.hibernate)
277                self.cancel_button.set_visible(False)
278                self.back_button.set_visible(True)
279               
280        #def hibernate_clicked
281       
282       
283        def reboot_clicked(self,widget):
284               
285                self.stack.set_visible_child_name("action")
286                self.current_action_image.set_from_file(REBOOT_RSRC)
287                self.current_action_label.set_text(_("Reboot now"))
288                self.execute_now_button.connect("clicked",self.execute_now,self.reboot)
289                GLib.timeout_add(10,self.wait_to_execute,_("The system"),_("reboot"),self.reboot)
290                self.cancel_button.set_visible(False)
291                self.back_button.set_visible(True)
292               
293        #def reboot_clicked
294       
295        def shutdown_clicked(self,widget):
296               
297                self.stack.set_visible_child_name("action")
298                self.current_action_image.set_from_file(SHUTDOWN_RSRC)
299                self.current_action_label.set_text(_("Shutdown now"))
300                self.execute_now_button.connect("clicked",self.execute_now,self.shutdown)
301                GLib.timeout_add(10,self.wait_to_execute,_("The system"),_("shutdown"),self.shutdown)
302                self.cancel_button.set_visible(False)
303                self.back_button.set_visible(True)
304               
305        #def shutdown_clicked
306       
307        def wait_to_execute(self,what,how,callback):
308               
309                if self.stack.get_visible_child_name()=="options":
310                        return False
311               
312                csecond=int(self.max_seconds+1-self.current_second)
313                self.progressbar.set_text(self.progress_txt%(what,how,csecond))
314                self.progressbar.set_fraction(self.current_second/self.max_seconds)
315                self.current_second+=0.01
316               
317                if self.current_second>=self.max_seconds:
318                        print "Executing callback..."
319                        self.progressbar.set_text(self.progress_txt%(what,how,0))
320                        callback()
321                        self.exit(None)
322                        return False
323               
324                return True
325               
326        #def wait_to_execute
327       
328        def exit(self,widget):
329               
330                if widget==None:
331                        time.sleep(1)
332                Gtk.main_quit()
333               
334        #def exit
335       
336#class LSM
337
338
339if __name__=="__main__":
340       
341        lsm=LliurexSessionManager()
342
343
Note: See TracBrowser for help on using the repository browser.