From 19ae07d0d443ff8b777f46bcbe97119483356bfd Mon Sep 17 00:00:00 2001 From: tpearson Date: Sat, 13 Mar 2010 05:43:39 +0000 Subject: Added KDE3 version of KDE Guidance utilities git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kde-guidance@1102646 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- powermanager/gpmhelper.py | 147 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 powermanager/gpmhelper.py (limited to 'powermanager/gpmhelper.py') diff --git a/powermanager/gpmhelper.py b/powermanager/gpmhelper.py new file mode 100644 index 0000000..65094f7 --- /dev/null +++ b/powermanager/gpmhelper.py @@ -0,0 +1,147 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +""" +Copyright 2008 Sebastian Kügler, Canonical Ltd, Luka Renko + +Authors: + Andreas Wenning + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +""" + +""" +A frontend to HAL's power features for KDE - Helper application +This application listens for HAL signals and issues dcop-calls to the +kde-power-manager that originally started it. To avoid the need for +kde-power-manager to shut it's helper down, this application +will automatically shut down if it's kde-power-manager isn't running. +""" + +import dbus, sys, time +from dbus.mainloop.glib import DBusGMainLoop +import gobject +from dcopext import DCOPClient, DCOPObj, DCOPApp + +class GPMHelper(): + def mother_alive(self): + """Check that our mother is still alive""" + found = False + for name in self.dcop.registeredApplications(): + name = str(name) + if name == self.motherName: + found = True + if not found: + """No mother; commit suicide""" + print "guidance-power-manager not alive; exiting" + loop.quit() + + """Called when signal is received""" + def signal_recv(self, *args): + if args[0] == "ButtonPressed": + if args[1] == "brightness-up": + if time.time()-0.02 <= self.last_brightness_up <= time.time(): + """Most likely an extra brightness-up call, discarding""" + print "Extra brightness-up call discarded" + return + try: + ok, foo = self.mother.brightnessUp() + if not ok: + print "brightnessUp-call failed" + return self.mother_alive() + self.last_brightness_up = time.time() + except: + print "brightnessUp-call failed" + return self.mother_alive() + elif args[1] == "brightness-down": + if time.time()-0.02 <= self.last_brightness_down <= time.time(): + """Most likely an extra brightness-down call, discarding""" + print "Extra brightness-down call discarded" + return + try: + ok, foo = self.mother.brightnessDown() + if not ok: + print "brightnessDown-call failed" + return self.mother_alive() + self.last_brightness_down = time.time() + except: + print "brightnessDown-call failed" + return self.mother_alive() + elif args[1] == "sleep": + if time.time()-1 <= self.last_sleep <= time.time(): + """Most likely an extra sleep-call, discarding""" + print "Extra sleep-call discarded" + return + try: + ok, foo = self.mother.suspend() + if not ok: + print "suspend-call failed" + return self.mother_alive() + self.last_sleep = time.time() + except: + print "suspend-call failed" + return self.mother_alive() + elif args[1] == "hibernate": + if time.time()-1 <= self.last_hibernate <= time.time(): + """Most likely an extra hibernate-call, discarding""" + print "Extra hibernate-call discarded" + return + try: + ok, foo = self.mother.hibernate() + if not ok: + print "hibernate-call failed" + return self.mother_alive() + self.last_hibernate = time.time() + except: + print "hibernate failed" + return self.mother_alive() + + def __init__(self): + """Connect to HAL""" + self.dbus_loop = DBusGMainLoop(set_as_default=True) + self.bus = dbus.SystemBus(mainloop=self.dbus_loop) + hal_manager_obj = self.bus.get_object("org.freedesktop.Hal",u'/org/freedesktop/Hal/Manager') + self.hal_manager = dbus.Interface(hal_manager_obj, "org.freedesktop.Hal.Manager") + + """Find button-devices and to connect to""" + button_devices = self.hal_manager.FindDeviceByCapability("button") + for device in button_devices: + self.bus.add_signal_receiver(self.signal_recv, + "Condition", + "org.freedesktop.Hal.Device", + "org.freedesktop.Hal", + device) + """Let's find our mother""" + self.dcop = DCOPClient() + self.dcop.attach() + found = False + for name in self.dcop.registeredApplications(): + name = str(name) + if name.startswith('guidance-'): + self.motherName = name + try: + self.mother = DCOPObj(name, self.dcop, 'power-manager') + found = True + except: + """Do nothing, catched by found=False""" + break + if not found: + """No mother; commit suicide""" + print "No guidance-power-manager is running" + sys.exit() + + """Some laptops issue double sleep/hibernate-calls, we need to discard one in that case""" + self.last_sleep = 0 + self.last_hibernate = 0 + + """And multiple brightness calls is also possible""" + self.last_brightness_up = 0 + self.last_brightness_down = 0 + +if __name__ == "__main__": + gpmh = GPMHelper() + loop = gobject.MainLoop() + loop.run() -- cgit v1.2.1