summaryrefslogtreecommitdiffstats
path: root/shutdown.py
blob: 624408b0101203136a8b5e6826cddb5622e8e836 (plain)
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()