def do_other_key(self, keyval): """Handle all otherwise unhandled key presses.""" c = IBus.keyval_to_unicode(keyval) if not c or c == '\n' or c == '\r': return False if not self.lookuptable.get_number_of_candidates() and \ self.current_input: # FIXME: This is really ugly if len(self.current_input) == 1 and \ not self.cangjie.is_input_key(self.current_input): self.get_candidates(by_shortcode=True) else: try: self.get_candidates() except cangjie.errors.CangjieNoCharsError: self.play_error_bell() return True if self.lookuptable.get_number_of_candidates(): self.do_select_candidate(1) return self.do_fullwidth_char(IBus.keyval_to_unicode(keyval))
def do_other_key(self, keyval): """Handle all otherwise unhandled key presses.""" c = IBus.keyval_to_unicode(keyval) if not c or c == '\n' or c == '\r': return False if not self.lookuptable.get_number_of_candidates() and \ self.current_input: # FIXME: This is really ugly if len(self.current_input) == 1 and \ not self.cangjie.is_input_key(self.current_input): self.get_candidates(by_shortcode=True) else: try: self.get_candidates() except cangjie.errors.CangjieNoCharsError: self.play_error_bell() return True if self.lookuptable.get_number_of_candidates(): self.do_select_candidate(1) return self.do_fullwidth_char(IBus.keyval_to_unicode(keyval))
def do_number(self, keyval): """Handle numeric input.""" if self.lookuptable.get_number_of_candidates(): return self.do_select_candidate(int( IBus.keyval_to_unicode(keyval))) return self.do_fullwidth_char(IBus.keyval_to_unicode(keyval))
def __init__(self, keyval, keycode, state): self.val = keyval self.code = keycode self.state = state self.name = IBus.keyval_name(self.val) self.unicode = IBus.keyval_to_unicode(self.val) self.shift = self.state & IBus.ModifierType.SHIFT_MASK != 0 self.lock = self.state & IBus.ModifierType.LOCK_MASK != 0 self.control = self.state & IBus.ModifierType.CONTROL_MASK != 0 self.mod1 = self.state & IBus.ModifierType.MOD1_MASK != 0 self.mod2 = self.state & IBus.ModifierType.MOD2_MASK != 0 self.mod3 = self.state & IBus.ModifierType.MOD3_MASK != 0 self.mod4 = self.state & IBus.ModifierType.MOD4_MASK != 0 self.mod5 = self.state & IBus.ModifierType.MOD5_MASK != 0 self.button1 = self.state & IBus.ModifierType.BUTTON1_MASK != 0 self.button2 = self.state & IBus.ModifierType.BUTTON2_MASK != 0 self.button3 = self.state & IBus.ModifierType.BUTTON3_MASK != 0 self.button4 = self.state & IBus.ModifierType.BUTTON4_MASK != 0 self.button5 = self.state & IBus.ModifierType.BUTTON5_MASK != 0 self.super = self.state & IBus.ModifierType.SUPER_MASK != 0 self.hyper = self.state & IBus.ModifierType.HYPER_MASK != 0 self.meta = self.state & IBus.ModifierType.META_MASK != 0 self.release = self.state & IBus.ModifierType.RELEASE_MASK != 0 # MODIFIER_MASK: Modifier mask for the all the masks above self.modifier = self.state & IBus.ModifierType.MODIFIER_MASK != 0
def __init__(self, keyval, keycode, state): self.val = keyval self.code = keycode self.state = state self.name = IBus.keyval_name(self.val) self.unicode = IBus.keyval_to_unicode(self.val) self.shift = self.state & IBus.ModifierType.SHIFT_MASK != 0 self.lock = self.state & IBus.ModifierType.LOCK_MASK != 0 self.control = self.state & IBus.ModifierType.CONTROL_MASK != 0 self.super = self.state & IBus.ModifierType.SUPER_MASK != 0 self.hyper = self.state & IBus.ModifierType.HYPER_MASK != 0 self.meta = self.state & IBus.ModifierType.META_MASK != 0 # mod1: Usually Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd) self.mod1 = self.state & IBus.ModifierType.MOD1_MASK != 0 # mod2: Usually Num_Lock (0x4d) self.mod2 = self.state & IBus.ModifierType.MOD2_MASK != 0 self.mod3 = self.state & IBus.ModifierType.MOD3_MASK != 0 # mod4: Usually Super_L (0xce), Hyper_L (0xcf) self.mod4 = self.state & IBus.ModifierType.MOD4_MASK != 0 # mod5: ISO_Level3_Shift (0x5c), Mode_switch (0xcb) self.mod5 = self.state & IBus.ModifierType.MOD5_MASK != 0 self.button1 = self.state & IBus.ModifierType.BUTTON1_MASK != 0 self.button2 = self.state & IBus.ModifierType.BUTTON2_MASK != 0 self.button3 = self.state & IBus.ModifierType.BUTTON3_MASK != 0 self.button4 = self.state & IBus.ModifierType.BUTTON4_MASK != 0 self.button5 = self.state & IBus.ModifierType.BUTTON5_MASK != 0 self.release = self.state & IBus.ModifierType.RELEASE_MASK != 0 # MODIFIER_MASK: Modifier mask for the all the masks above self.modifier = self.state & IBus.ModifierType.MODIFIER_MASK != 0
def set_keys_and_shortcuts_to_ui(self,widget,data=None): for item in self.key_dict.keys(): widget = self.guibuilder.get_object(item) hardware_keycode = int(self.config.get('cfg',item)) map = Gdk.Keymap.get_default() var1, var2, var3 = map.get_entries_for_keycode(hardware_keycode+8) text = IBus.keyval_to_unicode(var3[0]) widget.set_text(text)
def forward_key_event(self, val, code, state): if (val == IBus.KEY_Left and self.mock_committed_text_cursor_pos > 0): self.mock_committed_text_cursor_pos -= 1 return unicode = IBus.keyval_to_unicode(val) if unicode: self.mock_committed_text = ( self.mock_committed_text[:self.mock_committed_text_cursor_pos] + unicode + self.mock_committed_text[self.mock_committed_text_cursor_pos:]) self.mock_committed_text_cursor_pos += len(unicode)
def do_process_key_event(self, keyval, keycode, state): """Handle `process-key-event` events. This event is fired when the user presses a key. """ # Ignore key release events if (state & IBus.ModifierType.RELEASE_MASK): return False # Work around integer overflow bug on 32 bits systems: # https://bugzilla.gnome.org/show_bug.cgi?id=693121 # The bug is fixed in pygobject 3.7.91, but many distributions will # ship the previous version for some time. (e.g Fedora 18) if (state & 1073741824): return False if state & (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK): # Ignore Alt+<key> and Ctrl+<key> return False if keyval == IBus.Escape: return self.do_cancel_input() if keyval == IBus.space: return self.do_space() if keyval == IBus.Page_Down: return self.do_page_down() if keyval == IBus.Page_Up: return self.do_page_up() if keyval == IBus.BackSpace: return self.do_backspace() if is_inputnumber(keyval): return self.do_number(keyval) c = IBus.keyval_to_unicode(keyval) if c and c == "*": return self.do_star() if c and self.cangjie.is_input_key(c): return self.do_inputchar(c) return self.do_other_key(keyval)
def do_process_key_event(self, keyval, keycode, state): """Handle `process-key-event` events. This event is fired when the user presses a key. """ # Ignore key release events if (state & IBus.ModifierType.RELEASE_MASK): return False # Work around integer overflow bug on 32 bits systems: # https://bugzilla.gnome.org/show_bug.cgi?id=693121 # The bug is fixed in pygobject 3.7.91, but many distributions will # ship the previous version for some time. (e.g Fedora 18) if (state & 1073741824): return False if state & (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK): # Ignore Alt+<key> and Ctrl+<key> return False if keyval == IBus.Escape: return self.do_cancel_input() if keyval == IBus.space: return self.do_space() if keyval == IBus.Page_Down: return self.do_page_down() if keyval == IBus.Page_Up: return self.do_page_up() if keyval == IBus.BackSpace: return self.do_backspace() if is_inputnumber(keyval): return self.do_number(keyval) c = IBus.keyval_to_unicode(keyval) if c and c == "*": return self.do_star() if c and self.cangjie.is_input_key(c): return self.do_inputchar(c) return self.do_other_key(keyval)
def do_process_key_event(self, keyval, keycode, state): """Handle `process-key-event` events. This event is fired when the user presses a key.""" # Ignore key release events if (state & IBus.ModifierType.RELEASE_MASK): return False if state & (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK): # Ignore Alt+<key> and Ctrl+<key> return False if keyval == IBus.Escape: return self.do_cancel_input() if keyval == IBus.space: return self.do_space() if keyval == IBus.Page_Down: return self.do_page_down() if keyval == IBus.Page_Up: return self.do_page_up() if keyval == IBus.BackSpace: return self.do_backspace() if is_inputnumber(keyval): return self.do_number(keyval) c = IBus.keyval_to_unicode(keyval) # TODO: should wildcard support be optional? if c and self.cangjie.isCangJieInputKey(c) or c == "*": return self.do_inputchar(c) return self.do_other_key(keyval)
def do_number(self, keyval): """Handle numeric input.""" if self.lookuptable.get_number_of_candidates(): return self.do_select_candidate(int(IBus.keyval_to_unicode(keyval))) return self.do_fullwidth_char(IBus.keyval_to_unicode(keyval))