From 7cedd566e0be7d45eb66f44cec282739f03b9ff1 Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Sat, 17 Jan 2009 21:42:38 +0000 Subject: [PATCH] Added lock and switch user buttons, cleaned up the button loading code --- openboxlogout/openboxlogout.py | 58 +++++++++++--------- openboxlogout/pofiles/en.po | 6 ++ openboxlogout/pofiles/en_GB.po | 6 ++ openboxlogout/themes/oxygen/safesuspend.png | Bin 0 -> 11555 bytes 4 files changed, 43 insertions(+), 27 deletions(-) create mode 100644 openboxlogout/themes/oxygen/safesuspend.png diff --git a/openboxlogout/openboxlogout.py b/openboxlogout/openboxlogout.py index 16ab145..e7fdd09 100644 --- a/openboxlogout/openboxlogout.py +++ b/openboxlogout/openboxlogout.py @@ -87,13 +87,9 @@ class OpenboxLogout(): # Add the main panel to the window self.window.add(self.mainpanel) - if self.button_list: - list = map(lambda button: string.strip(button), self.button_list.split(",")) - for button in list: - self.add_button(button, self.buttonpanel) - else: - for button in self.validbuttons: - self.add_button(button, self.buttonpanel) + list = map(lambda button: string.strip(button), self.button_list.split(",")) + for button in list: + self.add_button(button, self.buttonpanel) if self.rendered_effects == True: @@ -171,7 +167,7 @@ class OpenboxLogout(): self.button_list = self.parser.get("looks", "buttonlist") # Set statics - self.validbuttons = ['cancel', 'logout', 'restart', 'shutdown', 'suspend', 'hibernate', 'safesuspend'] + self.validbuttons = ['cancel', 'logout', 'restart', 'shutdown', 'suspend', 'hibernate', 'safesuspend', 'lock', 'switch'] self.img_path = "%s/themes" % self.determine_path() @@ -191,19 +187,21 @@ class OpenboxLogout(): self.logger.warning("Color %s is not a valid color, defaulting to black" % self.parser.get("looks", "bgcolor")) self.bgcolor = gtk.gdk.Color("black") - if self.button_list: - - if self.button_list == "default": - self.button_list = string.join(self.validbuttons,",") - list = map(lambda button: string.strip(button), self.button_list.split(",")) - self.logger.debug("Button list: %s" % list) + if not self.button_list: + self.button_list = self.validbuttons + if self.button_list == "default": + self.button_list = string.join(self.validbuttons,",") + list = map(lambda button: string.strip(button), self.button_list.split(",")) + self.logger.debug("Button list: %s" % list) - for button in list: - if not button in self.validbuttons: - self.logger.warning("Button %s is not a valid button name, resetting to defaults" % button) - self.button_list = None - break - + for button in list: + if not button in self.validbuttons: + self.logger.warning("Button %s is not a valid button name, resetting to defaults" % button) + self.button_list = None + break + else: + # Test is button is useable + pass def on_expose(self, widget, event): @@ -274,28 +272,34 @@ class OpenboxLogout(): widget.pack_start(box, False, False) def click_button(self, widget, data=None): - if (data=='cancel'): + if (data == 'cancel'): self.quit() - elif (data=='logout'): + elif (data == 'logout'): os.system('openbox --exit') - elif (data=='restart'): + elif (data == 'restart'): self.dbus_powermanagement.Restart() #os.system('gdm-control --reboot && openbox --exit') - elif (data=='shutdown'): + elif (data == 'shutdown'): self.dbus_powermanagement.Shutdown() #os.system('gdm-control --shutdown && openbox --exit') - elif (data=='suspend'): + elif (data == 'suspend'): self.dbus_powermanagement.Suspend(0) #os.system('dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Suspend int32:0') self.quit() - elif (data=='hibernate'): + elif (data == 'hibernate'): self.dbus_powermanagement.Hiberate() #os.system('dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Hibernate') self.quit() - elif (data=='safesuspend'): + elif (data == 'safesuspend'): self.dbus_powermanagement.SuspendHybrid(0) #os.system('dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.SuspendHybrid int32:0') self.quit() + elif (data == 'lock'): + os.system('gnome-screensaver-command -l') + self.quit() + elif (data == 'switch'): + os.system('gdm-control --switch-user') + self.quit() def on_keypress(self, widget=None, event=None, data=None): if event.keyval == gtk.keysyms.Escape: diff --git a/openboxlogout/pofiles/en.po b/openboxlogout/pofiles/en.po index 746018e..24a60f3 100644 --- a/openboxlogout/pofiles/en.po +++ b/openboxlogout/pofiles/en.po @@ -21,3 +21,9 @@ msgstr "Hibernate" msgid "safesuspend" msgstr "Safe Suspend" + +msgid "lock" +msgstr "Lock Screen" + +msgid "switch" +msgstr "Switch User diff --git a/openboxlogout/pofiles/en_GB.po b/openboxlogout/pofiles/en_GB.po index 746018e..24a60f3 100644 --- a/openboxlogout/pofiles/en_GB.po +++ b/openboxlogout/pofiles/en_GB.po @@ -21,3 +21,9 @@ msgstr "Hibernate" msgid "safesuspend" msgstr "Safe Suspend" + +msgid "lock" +msgstr "Lock Screen" + +msgid "switch" +msgstr "Switch User diff --git a/openboxlogout/themes/oxygen/safesuspend.png b/openboxlogout/themes/oxygen/safesuspend.png new file mode 100644 index 0000000000000000000000000000000000000000..27d8596a2e447e3bfcb4f524fe7fa1ea1e3b879a GIT binary patch literal 11555 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 VKJ-p<#1{Yn002ovPDHLkV1nXI;r;*s literal 0 HcmV?d00001