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/key.py b/src/core/widgets/key.py index e634889..a8fa957 100644 --- a/src/core/widgets/key.py +++ b/src/core/widgets/key.py @@ -10,30 +10,46 @@ 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._secondary_symbol = secondary[0] if secondary else "" + 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._set_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 _set_if_keycombo(self, secondary: str): + if len(secondary) > 1 and '|' in secondary: + 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 +60,18 @@ 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 + + typwriter.isShiftOn = self.isShiftOn + typwriter.type(key if not self._alt_symbol else self._alt_symbol) + typwriter.isShiftOn = False + return True def _do_release(self, widget = None, eve = None): @@ -99,4 +119,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())