diff --git a/src/__builtins__.py b/src/__builtins__.py index 7957903..5c658df 100644 --- a/src/__builtins__.py +++ b/src/__builtins__.py @@ -34,9 +34,9 @@ class MissingConfigError(Exception): class Pyautogui_Controller(ControlMixin): def __init__(self): - self.isCtrlOn = False - self.isShiftOn = False - self.isAltOn = False + self.isCtrlOn = False + self.isShiftOn = False + self.isAltOn = False @@ -57,7 +57,7 @@ keys_json = { }, "row4": { "pKeys": ['z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '?'], - "sKeys": ['', '', '\\<', '>', '[', ']', '(', ')', '{', '}'] + "sKeys": ['', '', '<|shift+,', '>', '[', ']', '(', ')', '{', '}'] }, } } diff --git a/src/core/columns/keys_column.py b/src/core/columns/keys_column.py index 5f7f482..71f20f5 100644 --- a/src/core/columns/keys_column.py +++ b/src/core/columns/keys_column.py @@ -54,9 +54,9 @@ class Keys_Column(Gtk.Box): row_box = self.add_row() if len(pKeys) == len(sKeys): for i in range(10): - pkey = pKeys[i] + pKey = pKeys[i] sKey = sKeys[i] - row_box.add(Key(pkey, sKey)) + row_box.add(Key(pKey, sKey)) else: raise KeyboardRowMatchError("A row in keys_json has missmatched pKeys to sKeys lengths.") diff --git a/src/core/widgets/defined_keys.py b/src/core/widgets/defined_keys.py index 2f9a9fa..4a4218d 100644 --- a/src/core/widgets/defined_keys.py +++ b/src/core/widgets/defined_keys.py @@ -17,20 +17,20 @@ class Esc_Key(Key): def __init__(self): super(Esc_Key, self).__init__("Esc", "Esc", iscontrol = True) - def setup_signals(self): + def _setup_signals(self): self.connect("released", self._do_press_special_key) class CAPS_Key(Key): def __init__(self): super(CAPS_Key, self).__init__("Caps", "Caps", iscontrol = True) - self.setup_styling() - self.show_all() + self._setup_styling() - def setup_styling(self): + def _setup_styling(self): self.set_vexpand(True) + super()._setup_styling() - def setup_signals(self): + def _setup_signals(self): self.connect("released", self._clicked) def _clicked(self, widget = None): @@ -45,7 +45,7 @@ class Backspace_Key(Key): def __init__(self): super(Backspace_Key, self).__init__("Backspace", "Backspace", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("button-press-event", self._do_press_special_key_repeater) self.connect("button-release-event", self._do_release) @@ -56,7 +56,7 @@ class Emoji_Key(Key): self._ctx = self.get_style_context() self._emoji_popover = emoji_popover - def setup_signals(self): + def _setup_signals(self): self.connect("released", self._clicked) def _clicked(self, widget = None): @@ -71,7 +71,7 @@ class Symbols_Key(Key): super(Symbols_Key, self).__init__("Symbols", "Symbols", iscontrol = True) self.setup_custom_signals() - def setup_signals(self): + def _setup_signals(self): self.connect("released", self._clicked) def setup_custom_signals(self): @@ -90,12 +90,13 @@ class Symbols_Key(Key): class Enter_Key(Key): def __init__(self): super(Enter_Key, self).__init__("Enter", "Enter", iscontrol=True) - self.setup_styling() + self._setup_styling() - def setup_styling(self): + def _setup_styling(self): self.set_vexpand(True) + super()._setup_styling() - def setup_signals(self): + def _setup_signals(self): self.connect("button-press-event", self._do_press_special_key_repeater) self.connect("button-release-event", self._do_release) @@ -106,14 +107,14 @@ class Esc_Key(Key): def __init__(self): super(Esc_Key, self).__init__("Esc", "Esc", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("released", self._do_press_special_key) class Space_Key(Key): def __init__(self): super(Space_Key, self).__init__("Space", "Space", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("button-press-event", self._do_press_special_key_repeater) self.connect("button-release-event", self._do_release) @@ -132,7 +133,7 @@ class Tab_Key(Key): def __init__(self): super(Tab_Key, self).__init__("Tab", "Tab", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("button-press-event", self._do_press_special_key_repeater) self.connect("button-release-event", self._do_release) @@ -140,7 +141,7 @@ class Del_Key(Key): def __init__(self): super(Del_Key, self).__init__("Del", "Del", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("button-press-event", self._do_press_special_key_repeater) self.connect("button-release-event", self._do_release) @@ -148,35 +149,35 @@ class Ctrl_Key(Key): def __init__(self): super(Ctrl_Key, self).__init__("Ctrl", "Ctrl", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("released", self._do_press_special_key) class Shift_Key(Key): def __init__(self): super(Shift_Key, self).__init__("Shift", "Shift", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("released", self._do_press_special_key) class Alt_Key(Key): def __init__(self): super(Alt_Key, self).__init__("Alt", "Alt", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("released", self._do_press_special_key) class PrtSc_Key(Key): def __init__(self): super(PrtSc_Key, self).__init__("PrtSc", "PrtSc", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("released", self._do_press_special_key) class Up_Key(Key): def __init__(self): super(Up_Key, self).__init__("Up", "Up", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("button-press-event", self._do_press_special_key_repeater) self.connect("button-release-event", self._do_release) @@ -184,7 +185,7 @@ class Down_Key(Key): def __init__(self): super(Down_Key, self).__init__("Down", "Down", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("button-press-event", self._do_press_special_key_repeater) self.connect("button-release-event", self._do_release) @@ -192,7 +193,7 @@ class Left_Key(Key): def __init__(self): super(Left_Key, self).__init__("Left", "Left", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("button-press-event", self._do_press_special_key_repeater) self.connect("button-release-event", self._do_release) @@ -200,6 +201,6 @@ class Right_Key(Key): def __init__(self): super(Right_Key, self).__init__("Right", "Right", iscontrol=True) - def setup_signals(self): + def _setup_signals(self): self.connect("button-press-event", self._do_press_special_key_repeater) self.connect("button-release-event", self._do_release) diff --git a/src/core/widgets/key.py b/src/core/widgets/key.py index e634889..4020407 100644 --- a/src/core/widgets/key.py +++ b/src/core/widgets/key.py @@ -10,30 +10,48 @@ from gi.repository import GLib class Key(Gtk.Button or Gtk.ToggleButton): - def __init__(self, primary = "NULL", secondary = "NULL", iscontrol=False): + def __init__(self, primary = "NULL", secondary = "NULL", iscontrol = False): super(Key, self).__init__() self.timer_id = None self.iscontrol = iscontrol self._primary_symbol = primary self._secondary_symbol = secondary + self._alt_symbol = '' self._is_upper = False self._is_symbol = False self._is_emoji = False + self.isShiftOn = False + self._setup_styling() + self._setup_signals() + self._subscribe_to_events() + self._setup_if_keycombo(secondary) + + + def _setup_styling(self): self.set_label(self._primary_symbol) - self.setup_custom_signals() - self.setup_signals() - def setup_custom_signals(self): - event_system.subscribe("toggle_caps", self.toggle_caps) - event_system.subscribe("toggle_symbol_keys", self.toggle_symbol_keys) - - def setup_signals(self): + def _setup_signals(self): self.connect("button-press-event", self._do_press) self.connect("button-release-event", self._do_release) self.connect("toggle-emoji-keys", self.toggle_emoji_keys) + def _subscribe_to_events(self): + event_system.subscribe("toggle_caps", self.toggle_caps) + event_system.subscribe("toggle_symbol_keys", self.toggle_symbol_keys) + + def _setup_if_keycombo(self, secondary: str): + if not self.iscontrol and (len(secondary) > 1 and '|' in secondary): + self._secondary_symbol = secondary[0] + + parts = secondary.split("|")[1].split("+") + for part in parts: + if "shift" == part.lower(): + self.isShiftOn = True + + self._alt_symbol = parts[-1] + def _do_press(self, widget = None, eve = None): if self.timer_id: GLib.source_remove(self.timer_id) @@ -44,14 +62,21 @@ class Key(Gtk.Button or Gtk.ToggleButton): def _do_type(self, widget = None, eve = None): key = self.get_label().strip() - if not self._is_emoji: - typwriter.type(key) - else: + if self._is_emoji: typwriter.set_clipboard_data(key, "utf-16") typwriter.isCtrlOn = True typwriter.type('v') typwriter.isCtrlOn = False + return True + + if self._alt_symbol and self._is_symbol: + typwriter.isShiftOn = self.isShiftOn + typwriter.type(self._alt_symbol) + typwriter.isShiftOn = False + else: + typwriter.type(key) + return True def _do_release(self, widget = None, eve = None): @@ -99,4 +124,4 @@ class Key(Gtk.Button or Gtk.ToggleButton): if not self.iscontrol: self._is_upper = not self._is_upper if not self._is_symbol: - self.set_label(self._primary_symbol.upper()) if self._is_upper else self.set_label(self._primary_symbol.lower()) \ No newline at end of file + self.set_label(self._primary_symbol.upper()) if self._is_upper else self.set_label(self._primary_symbol.lower())