def update_labels(self): """ Updates keyboard labels based on active X keymap """ labels = {} # Get current layout group dpy = X.Display(hash(GdkX11.x11_get_default_xdisplay())) # Still no idea why... group = X.get_xkb_state(dpy).group # Get state of shift/alt/ctrl key mt = Gdk.ModifierType(self.keymap.get_modifier_state()) for a in self.background.areas: # Iterate over all translatable keys... if hasattr(Keys, a.name) and getattr(Keys, a.name) in KEY_TO_GDK: # Try to convert GKD key to keycode gdkkey = KEY_TO_GDK[getattr(Keys, a.name)] found, entries = self.keymap.get_entries_for_keyval(gdkkey) if gdkkey == Gdk.KEY_equal: # Special case, GDK reports nonsense here entries = [ [ e for e in entries if e.level == 0 ][-1] ] if not found: continue for k in sorted(entries, key=lambda a : a.level): # Try to convert keycode to label code = Gdk.keyval_to_unicode( self.keymap.translate_keyboard_state(k.keycode, mt, group) .keyval) if code != 0: labels[a.name] = unichr(code) break self.background.set_labels(labels)
def update_labels(self): """ Updates keyboard labels based on active X keymap """ labels = {} # Get current layout group dpy = X.Display(hash( GdkX11.x11_get_default_xdisplay())) # Still no idea why... group = X.get_xkb_state(dpy).group # Get state of shift/alt/ctrl key mt = Gdk.ModifierType(self.keymap.get_modifier_state()) for a in self.background.areas: # Iterate over all translatable keys... if hasattr(Keys, a.name) and getattr(Keys, a.name) in KEY_TO_GDK: # Try to convert GKD key to keycode gdkkey = KEY_TO_GDK[getattr(Keys, a.name)] found, entries = self.keymap.get_entries_for_keyval(gdkkey) if gdkkey == Gdk.KEY_equal: # Special case, GDK reports nonsense here entries = [[e for e in entries if e.level == 0][-1]] if not found: continue for k in sorted(entries, key=lambda a: a.level): # Try to convert keycode to label translation = self.keymap.translate_keyboard_state( k.keycode, mt, group) if hasattr(translation, "keyval"): code = Gdk.keyval_to_unicode(translation.keyval) else: code = Gdk.keyval_to_unicode(translation[1]) if code != 0: labels[a.name] = unichr(code) break self.background.set_labels(labels)
def on_event(self, daemon, what, data): """ Called when button press, button release or stick / pad update is send by daemon. """ group = X.get_xkb_state(self.dpy).group if self.group != group: self.group = group self.timer('labels', 0.1, self.update_labels) self.mapper.handle_event(daemon, what, data)
def update_labels(self): """ Updates keyboard labels based on active X keymap """ labels = {} # Get current layout group self.group = X.get_xkb_state(self.dpy).group # Get state of shift/alt/ctrl key mt = Gdk.ModifierType(self.keymap.get_modifier_state()) for button in self.background.buttons: if getattr(Keys, button.name, None) in KEY_TO_KEYCODE: keycode = KEY_TO_KEYCODE[getattr(Keys, button.name)] translation = self.keymap.translate_keyboard_state(keycode, mt, self.group) if hasattr(translation, "keyval"): code = Gdk.keyval_to_unicode(translation.keyval) else: code = Gdk.keyval_to_unicode(translation[1]) if code >= 33: # Printable chars, w/out space labels[button] = unichr(code).strip() else: labels[button] = SPECIAL_KEYS.get(code) self.background.set_labels(labels)
def update_labels(self): """ Updates keyboard labels based on active X keymap """ labels = {} # Get current layout group self.group = X.get_xkb_state(self.dpy).group # Get state of shift/alt/ctrl key mt = Gdk.ModifierType(self.keymap.get_modifier_state()) for button in self.background.buttons: if getattr(Keys, button.name, None) in KEY_TO_KEYCODE: keycode = KEY_TO_KEYCODE[getattr(Keys, button.name)] translation = self.keymap.translate_keyboard_state( keycode, mt, self.group) if hasattr(translation, "keyval"): code = Gdk.keyval_to_unicode(translation.keyval) else: code = Gdk.keyval_to_unicode(translation[1]) if code >= 33: # Printable chars, w/out space labels[button] = unichr(code).strip() else: labels[button] = SPECIAL_KEYS.get(code) self.background.set_labels(labels)