rules: graceful degredation when no keymap available
This commit is contained in:
parent
8e7435ee44
commit
d500642352
|
@ -125,8 +125,8 @@ def modifier_code(keycode):
|
||||||
return m
|
return m
|
||||||
|
|
||||||
|
|
||||||
gdisplay = Gdk.Display.get_default()
|
gdisplay = Gdk.Display.get_default() # can be None if Solaar is run without a full window system
|
||||||
gkeymap = Gdk.Keymap.get_for_display(gdisplay)
|
gkeymap = Gdk.Keymap.get_for_display(gdisplay) if gdisplay else None
|
||||||
|
|
||||||
key_down = None
|
key_down = None
|
||||||
key_up = None
|
key_up = None
|
||||||
|
@ -415,12 +415,11 @@ def x11_focus_prog():
|
||||||
def x11_pointer_prog():
|
def x11_pointer_prog():
|
||||||
pid = wm_class = None
|
pid = wm_class = None
|
||||||
window = xdisplay.screen().root.query_pointer().child
|
window = xdisplay.screen().root.query_pointer().child
|
||||||
for window in reversed(window.query_tree().children):
|
for child in reversed(window.query_tree().children):
|
||||||
pid = window.get_full_property(NET_WM_PID, 0)
|
pid = child.get_full_property(NET_WM_PID, 0)
|
||||||
wm_class = window.get_wm_class()
|
wm_class = child.get_wm_class()
|
||||||
if wm_class:
|
if wm_class:
|
||||||
break
|
break
|
||||||
window = window.query_tree().parent
|
|
||||||
name = psutil.Process(pid.value[0]).name() if pid else ''
|
name = psutil.Process(pid.value[0]).name() if pid else ''
|
||||||
return (wm_class[0], wm_class[1], name) if wm_class else (name, )
|
return (wm_class[0], wm_class[1], name) if wm_class else (name, )
|
||||||
|
|
||||||
|
@ -566,8 +565,12 @@ class Modifiers(Condition):
|
||||||
return 'Modifiers: ' + str(self.desired)
|
return 'Modifiers: ' + str(self.desired)
|
||||||
|
|
||||||
def evaluate(self, feature, notification, device, status, last_result):
|
def evaluate(self, feature, notification, device, status, last_result):
|
||||||
current = gkeymap.get_modifier_state() # get the current keyboard modifier
|
if gkeymap:
|
||||||
return self.desired == (current & MODIFIER_MASK)
|
current = gkeymap.get_modifier_state() # get the current keyboard modifier
|
||||||
|
return self.desired == (current & MODIFIER_MASK)
|
||||||
|
else:
|
||||||
|
_log.warn('no keymap so cannot determine modifier keys')
|
||||||
|
return False
|
||||||
|
|
||||||
def data(self):
|
def data(self):
|
||||||
return {'Modifiers': [str(m) for m in self.modifiers]}
|
return {'Modifiers': [str(m) for m in self.modifiers]}
|
||||||
|
@ -779,11 +782,14 @@ class KeyPress(Action):
|
||||||
simulate_key(keycode, Xlib.X.KeyRelease)
|
simulate_key(keycode, Xlib.X.KeyRelease)
|
||||||
|
|
||||||
def evaluate(self, feature, notification, device, status, last_result):
|
def evaluate(self, feature, notification, device, status, last_result):
|
||||||
current = gkeymap.get_modifier_state()
|
if gkeymap:
|
||||||
if _log.isEnabledFor(_INFO):
|
current = gkeymap.get_modifier_state()
|
||||||
_log.info('KeyPress action: %s, modifiers %s %s', self.key_names, current, [hex(k) for k in self.key_symbols])
|
if _log.isEnabledFor(_INFO):
|
||||||
self.keyDown(self.key_symbols, current)
|
_log.info('KeyPress action: %s, modifiers %s %s', self.key_names, current, [hex(k) for k in self.key_symbols])
|
||||||
self.keyUp(reversed(self.key_symbols), current)
|
self.keyDown(self.key_symbols, current)
|
||||||
|
self.keyUp(reversed(self.key_symbols), current)
|
||||||
|
else:
|
||||||
|
_log.warn('no keymap so cannot determine which keycode to send')
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def data(self):
|
def data(self):
|
||||||
|
|
Loading…
Reference in New Issue