#!/usr/bin/python #n9-button-monitor v0.1 #Copyright 2012 Elliot Wolk #based on: ##### # Ye Olde Camerra Hack - Another fine Harmattan Hack Powered by Python(tm)! # 2012-01-12; Thomas Perl <thp.io/about> ##### # 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 3 of the License, or # (at your option) any later version. # from QmSystem import * from PySide.QtGui import * from PySide.QtDeclarative import * import sys import os import subprocess import re ############### ############### ############### def getActions(): return ([ None , Action(volup, cond=appOnTop("camera-ui"), action=cmd("camera-click")) , Action(volup, cond=screenLocked, action=cmd("klomp-cmd pause")) , Action(voldn, cond=screenLocked, action=cmd("klomp-cmd next")) ]) def readProc(cmdarr): out, err = subprocess.Popen(cmdarr, stdout=subprocess.PIPE).communicate() return out def screenLocked(): return "locked\n" == readProc(['lock', '-g']) def screenUnlocked(): return not screenLocked() def appOnTop(app): return lambda: isAppOnTop(app) def isAppOnTop(app): winId = readProc(["xprop", "-root", "_NET_ACTIVE_WINDOW"]) [40:] winCmd = readProc(["xprop", "-id", winId, "WM_COMMAND"]) [24:-4] return app in winCmd def cmd(cmd): return lambda: runcmd(cmd) def runcmd(cmd): print 'running cmd: "' + cmd + '"' subprocess.Popen(['bash', '-c', cmd]) ############### ############### ############### evtPressed = 'pressed' evtRepeated = 'repeated' evtReleased = 'released' stateOn = 2 stateOff = 0 power = 20 volup = 2 voldn = 3 class Action(): def __init__(self, key, event=evtPressed, action=None, cond=None, stop=True): self.key = key self.event = event self.action = action self.cond = cond self.stop = stop keysPressed = set() actions = getActions() def keyEvent(key, state): event = None if state == stateOn: if key not in keysPressed: event = evtPressed else: event = evtRepeated elif state == stateOff: event = evtReleased if state == stateOn: keysPressed.add(key) elif state == stateOff: keysPressed.discard(key) for action in actions: if action != None and action.key == key and action.event == event: if action.cond == None or action.cond(): action.action() if action.stop: return def main(): app = QApplication(sys.argv) keys = QmKeys() keys.keyEvent.connect(keyEvent) app.exec_() if __name__ == "__main__": sys.exit(main())