Created
May 21, 2017 16:17
-
-
Save dece/c39e52ec5e1afc292dd8da2a80686fe2 to your computer and use it in GitHub Desktop.
ObExit - Adaptation of the original cb-exit script found in the Crunchbang distribution to work with SystemD
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
""" Adaptation of the original cb-exit script found in the Crunchbang | |
distribution to work with SystemD. | |
I replaced "cb" with "ob" to match the Openbox tool names (obconf, obmenu) | |
because that script fits well with the Openbox WM. | |
""" | |
import os | |
import gtk | |
import pygtk | |
pygtk.require('2.0') | |
class Button(gtk.Button): | |
def __init__(self, parent, label, action): | |
super(Button, self).__init__(label) | |
self.set_border_width(4) | |
self.connect("clicked", action) | |
parent.pack_start(self) | |
self.show() | |
class ExitWindow(object): | |
def __init__(self): | |
self.window = gtk.Window() | |
self.window.set_title("Exit?") | |
self.window.set_border_width(5) | |
self.window.set_size_request(600, 80) | |
self.window.set_resizable(True) | |
self.window.set_keep_above(True) | |
self.window.stick | |
self.window.set_position(1) | |
self.window.connect("delete_event", gtk.main_quit) | |
windowicon = self.window.render_icon(gtk.STOCK_QUIT, gtk.ICON_SIZE_MENU) | |
self.window.set_icon(windowicon) | |
# Create HBox for buttons | |
self.button_box = gtk.HBox() | |
self.button_box.show() | |
self.logout = Button(self.button_box, "_Log out", self.logout_action) | |
self.suspend = Button(self.button_box, "_Suspend", self.suspend_action) | |
self.hibernate = Button(self.button_box, "_Hibernate", self.hibernate_action) | |
self.reboot = Button(self.button_box, "_Reboot", self.reboot_action) | |
self.shutdown = Button(self.button_box, "_Power off", self.shutdown_action) | |
self.cancel = Button(self.button_box, "_Cancel", self.cancel_action) | |
# Create HBox for status label | |
self.label_box = gtk.HBox() | |
self.label_box.show() | |
self.status = gtk.Label() | |
self.status.show() | |
self.label_box.pack_start(self.status) | |
# Create VBox and pack the above HBox's | |
self.main_layout = gtk.VBox() | |
self.main_layout.pack_start(self.button_box) | |
self.main_layout.pack_start(self.label_box) | |
self.main_layout.show() | |
self.window.add(self.main_layout) | |
self.window.show() | |
def disable_buttons(self): | |
self.logout.set_sensitive(False) | |
self.suspend.set_sensitive(False) | |
self.hibernate.set_sensitive(False) | |
self.reboot.set_sensitive(False) | |
self.shutdown.set_sensitive(False) | |
self.cancel.set_sensitive(False) | |
def logout_action(self, button): | |
self.disable_buttons() | |
self.status.set_label("Exiting Openbox, please standby...") | |
os.system("openbox --exit") | |
def suspend_action(self, button): | |
self.disable_buttons() | |
self.status.set_label("Suspending, please standby...") | |
os.system("cb-lock") | |
os.system("systemctl suspend") | |
gtk.main_quit() | |
def hibernate_action(self, button): | |
self.disable_buttons() | |
self.status.set_label("Hibernating, please standby...") | |
os.system("cb-lock") | |
os.system("systemctl hibernate") | |
gtk.main_quit() | |
def reboot_action(self, button): | |
self.disable_buttons() | |
self.status.set_label("Rebooting, please standby...") | |
os.system("systemctl reboot") | |
def shutdown_action(self, button): | |
self.disable_buttons() | |
self.status.set_label("Shutting down, please standby...") | |
os.system("systemctl poweroff") | |
def cancel_action(self, button): | |
self.disable_buttons() | |
gtk.main_quit() | |
def main(): | |
exit_window = ExitWindow() | |
gtk.main() | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment