1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
#!/usr/bin/env python
#----------------------------------------------------
# Version: 0.1.1
# Author: Florian "Bluewind" Pritz <flo@xssn.at>
#
# Licensed under WTFPL v2
# (see COPYING for full license text)
#
#----------------------------------------------------
# Display a small shutdown Dialog
#----------------------------------------------------
# NOTE:
# Please change the image paths to mach your icons.
# Otherwise the script will crash.
import gtk
import os
def create_bbox(title=None, spacing=0, layout=gtk.BUTTONBOX_SPREAD):
bbox = gtk.VButtonBox()
bbox.set_spacing(spacing)
buttons = (('Cancel', 'gtk-cancel'),
('Suspend', 'gnome-session-suspend'),
('Reboot', 'gnome-session-reboot'),
('Halt', 'gnome-session-halt')
)
for text, stock_id in buttons:
image = gtk.Image()
image.set_from_stock(stock_id, gtk.ICON_SIZE_LARGE_TOOLBAR)
b = gtk.Button(text)
b.set_image(image)
b.set_data("user_data", text)
b.connect("clicked", click, b)
b.set_size_request(100, -1)
b.set_alignment(0,1)
bbox.add(b)
return bbox
def click(self, button):
ret = button.get_data("user_data")
self.hide()
self.destroy()
gtk.main_quit()
if ret == "Reboot":
os.system("sudo shutdown -r now")
if ret == "Suspend":
os.system("sudo pm-suspend")
if ret == "Halt":
os.system("sudo shutdown -h now")
class ButtonBox(gtk.Window):
def __init__(self, parent=None):
# Create the toplevel window
gtk.Window.__init__(self)
try:
self.set_screen(parent.get_screen())
except AttributeError:
self.connect('destroy', lambda *w: gtk.main_quit())
self.set_title("Shutdown")
#self.set_decorated(False)
self.set_position(gtk.WIN_POS_CENTER)
hbox = gtk.HBox()
hbox.set_border_width(10)
self.add(hbox)
hbox.pack_start(create_bbox(None, 8, gtk.BUTTONBOX_START),
padding=0)
self.show_all()
def register_iconsets(icon_info):
iconfactory = gtk.IconFactory()
stock_ids = gtk.stock_list_ids()
for stock_id, file in icon_info:
# only load image files when our stock_id is not present
if stock_id not in stock_ids:
pixbuf = gtk.gdk.pixbuf_new_from_file(file)
iconset = gtk.IconSet(pixbuf)
iconfactory.add(stock_id, iconset)
iconfactory.add_default()
register_iconsets([('gnome-session-suspend', '/usr/share/icons/hydroxygen/128x128/apps/gnome-session-suspend.png'),
('gnome-session-halt', '/usr/share/icons/hydroxygen/128x128/apps/gnome-session-halt.png'),
('gnome-session-reboot', '/usr/share/icons/hydroxygen/128x128/apps/gnome-session-reboot.png')
])
ButtonBox()
gtk.main()
|