diff --git a/src/core/widgets/defined_keys.py b/src/core/widgets/defined_keys.py index 4a4218d..e1333ca 100644 --- a/src/core/widgets/defined_keys.py +++ b/src/core/widgets/defined_keys.py @@ -46,8 +46,8 @@ class Backspace_Key(Key): super(Backspace_Key, self).__init__("Backspace", "Backspace", iscontrol=True) def _setup_signals(self): - self.connect("button-press-event", self._do_press_special_key_repeater) - self.connect("button-release-event", self._do_release) + self.connect("button-press-event", self._do_press_special_key) + self.connect("button-release-event", self._do_release_special_key) class Emoji_Key(Key): def __init__(self, emoji_popover): @@ -97,8 +97,8 @@ class Enter_Key(Key): super()._setup_styling() def _setup_signals(self): - self.connect("button-press-event", self._do_press_special_key_repeater) - self.connect("button-release-event", self._do_release) + self.connect("button-press-event", self._do_press_special_key) + self.connect("button-release-event", self._do_release_special_key) ############################# Bottom_Key_Row Keys ############################# @@ -115,8 +115,8 @@ class Space_Key(Key): super(Space_Key, self).__init__("Space", "Space", iscontrol=True) def _setup_signals(self): - self.connect("button-press-event", self._do_press_special_key_repeater) - self.connect("button-release-event", self._do_release) + self.connect("button-press-event", self._do_press_special_key) + self.connect("button-release-event", self._do_release_special_key) class AT_Key(Key): def __init__(self): @@ -134,16 +134,16 @@ class Tab_Key(Key): super(Tab_Key, self).__init__("Tab", "Tab", iscontrol=True) def _setup_signals(self): - self.connect("button-press-event", self._do_press_special_key_repeater) - self.connect("button-release-event", self._do_release) + self.connect("button-press-event", self._do_press_special_key) + self.connect("button-release-event", self._do_release_special_key) class Del_Key(Key): def __init__(self): super(Del_Key, self).__init__("Del", "Del", iscontrol=True) def _setup_signals(self): - self.connect("button-press-event", self._do_press_special_key_repeater) - self.connect("button-release-event", self._do_release) + self.connect("button-press-event", self._do_press_special_key) + self.connect("button-release-event", self._do_release_special_key) class Ctrl_Key(Key): def __init__(self): @@ -178,29 +178,29 @@ class Up_Key(Key): super(Up_Key, self).__init__("Up", "Up", iscontrol=True) def _setup_signals(self): - self.connect("button-press-event", self._do_press_special_key_repeater) - self.connect("button-release-event", self._do_release) + self.connect("button-press-event", self._do_press_special_key) + self.connect("button-release-event", self._do_release_special_key) class Down_Key(Key): def __init__(self): super(Down_Key, self).__init__("Down", "Down", iscontrol=True) def _setup_signals(self): - self.connect("button-press-event", self._do_press_special_key_repeater) - self.connect("button-release-event", self._do_release) + self.connect("button-press-event", self._do_press_special_key) + self.connect("button-release-event", self._do_release_special_key) class Left_Key(Key): def __init__(self): super(Left_Key, self).__init__("Left", "Left", iscontrol=True) def _setup_signals(self): - self.connect("button-press-event", self._do_press_special_key_repeater) - self.connect("button-release-event", self._do_release) + self.connect("button-press-event", self._do_press_special_key) + self.connect("button-release-event", self._do_release_special_key) class Right_Key(Key): def __init__(self): super(Right_Key, self).__init__("Right", "Right", iscontrol=True) def _setup_signals(self): - self.connect("button-press-event", self._do_press_special_key_repeater) - self.connect("button-release-event", self._do_release) + self.connect("button-press-event", self._do_press_special_key) + self.connect("button-release-event", self._do_release_special_key) diff --git a/src/core/widgets/key.py b/src/core/widgets/key.py index 4020407..9458299 100644 --- a/src/core/widgets/key.py +++ b/src/core/widgets/key.py @@ -52,15 +52,33 @@ class Key(Gtk.Button or Gtk.ToggleButton): self._alt_symbol = parts[-1] + def _do_press(self, widget = None, eve = None): - if self.timer_id: + if not self.timer_id: + self.did_loop_type = False + self.timer_id = GLib.timeout_add(500, self._do_wait_loop_type) + + + def _do_release(self, widget = None, eve = None): + if self.did_loop_type: GLib.source_remove(self.timer_id) - self.timer_id = None + self.timer_id = None + self.did_loop_type = False + return self._do_type() - self.timer_id = GLib.timeout_add(200, self._do_type) + GLib.source_remove(self.timer_id) + self.timer_id = None + + def _do_wait_loop_type(self): + if not self.timer_id: return False + self.did_loop_type = True + self.timer_id = GLib.timeout_add(200, self._do_type) + return False + + def _do_type(self): + if not self.timer_id: return False - def _do_type(self, widget = None, eve = None): key = self.get_label().strip() if self._is_emoji: typwriter.set_clipboard_data(key, "utf-16") @@ -74,36 +92,47 @@ class Key(Gtk.Button or Gtk.ToggleButton): typwriter.isShiftOn = self.isShiftOn typwriter.type(self._alt_symbol) typwriter.isShiftOn = False - else: - typwriter.type(key) + return True + + typwriter.type(key) return True - def _do_release(self, widget = None, eve = None): - if not self.timer_id: return + + def _do_press_special_key(self, widget = None, eve = None): + if not self.timer_id: + self.did_loop_type = False + self.timer_id = GLib.timeout_add(500, self._do_wait_loop_special_type) + + def _do_release_special_key(self, widget = None, eve = None): + if self.did_loop_type: + GLib.source_remove(self.timer_id) + self.timer_id = None + self.did_loop_type = False + return + + self._do_type_special_key() GLib.source_remove(self.timer_id) self.timer_id = None - def _do_press_special_key(self, widget = None): - self._do_type_special_key(widget) - - def _do_press_special_key_repeater(self, widget = None, eve = None): - if self.timer_id: - GLib.source_remove(self.timer_id) - self.timer_id = None - - self._do_type_special_key() + def _do_wait_loop_special_type(self): + if not self.timer_id: return False + self.did_loop_type = True self.timer_id = GLib.timeout_add(200, self._do_type_special_key) + return False + + def _do_type_special_key(self): + if not self.timer_id: return False - def _do_type_special_key(self, widget = None): key = self.get_label() if key in ["Ctrl", "Shift", "Alt"]: - ctx = widget.get_style_context() + ctx = self.get_style_context() ctx.remove_class("toggled_bttn") if ctx.has_class("toggled_bttn") else ctx.add_class("toggled_bttn") typwriter.press_special_keys(key) return True + def toggle_symbol_keys(self, widget = None, eve = None): if not self.iscontrol: self._is_symbol = not self._is_symbol