home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / deskbar-applet / handlers / gdmactions.py < prev    next >
Encoding:
Python Source  |  2006-08-29  |  5.2 KB  |  186 lines

  1. import dbus, dbus.glib
  2. from gettext import gettext as _
  3. import deskbar, deskbar.Indexer, deskbar.Handler, deskbar.Utils
  4. from deskbar.defs import VERSION
  5. import gdmclient
  6. import gtk, gnome, gnome.ui
  7.  
  8. HANDLERS = {
  9.     "GdmHandler" : {
  10.         "name": _("Computer Actions"),
  11.         "description": _("Logoff, shutdown, restart, suspend and related actions."),
  12.         "version": VERSION,
  13.     }
  14. }
  15.  
  16. class GpmMatch(deskbar.Match.Match):
  17.     def __init__(self, backend, name=None, **args):
  18.         deskbar.Match.Match.__init__(self, backend, name=name, **args)
  19.         bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
  20.         obj = bus.get_object('org.gnome.PowerManager', '/org/gnome/PowerManager')
  21.         self._gpm = dbus.Interface (obj, "org.gnome.PowerManager")
  22.  
  23.     def get_category(self):
  24.         return "actions"
  25.  
  26.  
  27. class SuspendMatch(GpmMatch):
  28.     def __init__(self, backend, name=None, **args):
  29.         GpmMatch.__init__(self, backend, name)
  30.         self._icon = deskbar.Utils.load_icon("gpm-suspend-to-ram.png")
  31.  
  32.     def action(self, text=None):
  33.         self._gpm.Suspend()
  34.  
  35.     def get_category(self):
  36.         return "actions"
  37.  
  38.     def get_verb(self):
  39.         return _("Suspend the machine")
  40.  
  41. class HibernateMatch(GpmMatch):
  42.     def __init__(self, backend, name=None, **args):
  43.         GpmMatch.__init__(self, backend, name)
  44.         self._icon = deskbar.Utils.load_icon("gpm-suspend-to-disk.png")
  45.  
  46.     def action(self, text=None):
  47.         self._gpm.Hibernate()
  48.  
  49.     def get_verb(self):
  50.         return _("Hibernate the machine")
  51.  
  52. class ShutdownMatch(GpmMatch):
  53.     def __init__(self, backend, name=None, **args):
  54.         GpmMatch.__init__(self, backend, name)
  55.         self._icon = deskbar.Utils.load_icon(gtk.STOCK_QUIT) 
  56.  
  57.     def action(self, text=None):
  58.         self._gpm.Shutdown()
  59.  
  60.     def get_verb(self):
  61.         return _("Shutdown the machine")
  62.  
  63. class LockScreenMatch(deskbar.Match.Match):
  64.     def __init__(self, backend, name=None, **args):
  65.         deskbar.Match.Match.__init__(self, backend, name=name, **args)
  66.         self._icon = deskbar.Utils.load_icon(gtk.STOCK_FULLSCREEN)
  67.         
  68.         bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
  69.         obj = bus.get_object('org.gnome.ScreenSaver', '/org/gnome/ScreenSaver')
  70.         # FIXME : This timeouts ?
  71.         self._scrsvr = dbus.Interface (obj, "org.gnome.ScreenSaver")
  72.  
  73.     def action(self, text=None):
  74.         self._scrsvr.Lock()
  75.  
  76.     def get_category(self):
  77.         return "actions"
  78.  
  79.     def get_verb(self):
  80.         return _("Lock the screen")
  81.  
  82. class GdmMatch(deskbar.Match.Match):
  83.     def __init__(self, backend, name, **args):
  84.         deskbar.Match.Match.__init__(self, backend, name=name, **args)
  85.         self.logout_reentrance = 0
  86.         
  87.     def get_category(self):
  88.         return "actions"
  89.  
  90.     def request_logout(self):
  91.         if self.logout_reentrance == 0:
  92.             self.logout_reentrance += 1
  93.  
  94.             client = gnome.ui.master_client()
  95.             if client:
  96.                 client.request_save(gnome.ui.SAVE_GLOBAL,
  97.                     True, # Shutdown?
  98.                     gnome.ui.INTERACT_ANY,
  99.                     True, # Fast?
  100.                     True) # Global?
  101.  
  102.                 self.logout_reentrance -= 1
  103.             
  104. class GdmShutdownMatch(GdmMatch):
  105.     def __init__(self, backend, **args):
  106.         GdmMatch.__init__(self, backend, _("Shut Down"), **args)
  107.         
  108.     def action(self, text=None):
  109.         gdmclient.set_logout_action(gdmclient.LOGOUT_ACTION_SHUTDOWN)
  110.         self.request_logout()
  111.         
  112.     def get_verb(self):
  113.         return _("Turn off the computer")
  114.  
  115. class GdmLogoutMatch(GdmMatch):
  116.     def __init__(self, backend, **args):
  117.         GdmMatch.__init__(self, backend, _("Log Out"), **args)
  118.         
  119.     def action(self, text=None):
  120.         gdmclient.set_logout_action(gdmclient.LOGOUT_ACTION_NONE)
  121.         self.request_logout()
  122.         
  123.     def get_verb(self):
  124.         return _("Log out")
  125.         
  126. class GdmRebootMatch(GdmMatch):
  127.     def __init__(self, backend, **args):
  128.         GdmMatch.__init__(self, backend, _("Restart"), **args)
  129.         
  130.     def action(self, text=None):
  131.         gdmclient.set_logout_action(gdmclient.LOGOUT_ACTION_REBOOT)
  132.         self.request_logout()
  133.         
  134.     def get_verb(self):
  135.         return _("Restart the computer")
  136.         
  137. class GdmSwitchUserMatch(GdmMatch):
  138.     def __init__(self, backend, **args):
  139.         GdmMatch.__init__(self, backend, _("Switch User"), **args)
  140.         
  141.     def action(self, text=None):
  142.         gdmclient.new_login()
  143.         
  144.     def get_verb(self):
  145.         return _("Switch User")
  146.                 
  147. class GdmHandler(deskbar.Handler.Handler):
  148.     def __init__(self):
  149.         deskbar.Handler.Handler.__init__(self, "gpm-suspend-to-ram.png")    
  150.         self.indexer = deskbar.Indexer.Indexer()
  151.         
  152.     def initialize(self):
  153.         for klass in (GdmShutdownMatch,GdmSwitchUserMatch,GdmRebootMatch,GdmLogoutMatch):
  154.             match = klass(self)
  155.             self.indexer.add(match.get_verb(), match)
  156.         
  157.         self.init_gpm_matches()
  158.         self.init_screensaver_matches()
  159.  
  160.     def init_screensaver_matches(self):
  161.         try:
  162.             bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
  163.             obj = bus.get_object('org.gnome.ScreenSaver', '/org/gnome/ScreenSaver')
  164.             scrsvr = dbus.Interface (obj, "org.gnome.ScreenSaver")
  165.             self.indexer.add(_("Lock"), LockScreenMatch(self))
  166.             return True
  167.         except dbus.dbus_bindings.DBusException:
  168.             return False
  169.  
  170.     def init_gpm_matches(self):
  171.         try:
  172.             bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
  173.             obj = bus.get_object('org.gnome.PowerManager', '/org/gnome/PowerManager')
  174.             gpm = dbus.Interface (obj, "org.gnome.PowerManager")
  175.             if gpm.canSuspend():
  176.                 self.indexer.add(_("Suspend"), SuspendMatch(self))
  177.             if gpm.canHibernate():
  178.                 self.indexer.add(_("Hibernate"), HibernateMatch(self))
  179.             if gpm.canShutdown():
  180.                 self.indexer.add(_("Shutdown"), ShutdownMatch(self))
  181.         except dbus.dbus_bindings.DBusException:
  182.             return False
  183.             
  184.     def query(self, query):
  185.         return self.indexer.look_up(query)
  186.