From 9eed0338d94da220aa7f9f7b0d3078aa510adbbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= Date: Sun, 16 Dec 2018 01:01:44 +0100 Subject: [PATCH] Fix error on key press Fixes #9471 --- gajim/chat_control_base.py | 40 +++++++++++--------------------------- gajim/gtk/util.py | 8 ++++++++ 2 files changed, 19 insertions(+), 29 deletions(-) diff --git a/gajim/chat_control_base.py b/gajim/chat_control_base.py index 6b1e33b39..164c1a580 100644 --- a/gajim/chat_control_base.py +++ b/gajim/chat_control_base.py @@ -54,6 +54,8 @@ from gajim.message_textview import MessageTextView from gajim.gtk.dialogs import NonModalConfirmationDialog from gajim.gtk.util import convert_rgb_to_hex +from gajim.gtk.util import get_primary_accel_mod + from gajim.gtk.emoji_chooser import emoji_chooser from gajim.command_system.implementation.middleware import ChatCommandProcessor @@ -78,24 +80,6 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): A base class containing a banner, ConversationTextview, MessageTextView """ - keymap = Gdk.Keymap.get_for_display(Gdk.Display.get_default()) - try: - keycode_c = keymap.get_entries_for_keyval(Gdk.KEY_c)[1][0].keycode - except TypeError: - keycode_c = 54 - except IndexError: - # FIXME - # On some keyboard layouts there is no keyval for KEY_c - keycode_c = None - - try: - keycode_ins = keymap.get_entries_for_keyval(Gdk.KEY_Insert)[1][0].keycode - except TypeError: - keycode_ins = 118 - except IndexError: - # There is no KEY_Insert (MacOS) - keycode_ins = None - def make_href(self, match): url_color = app.css_config.get_value('.gajim-url', StyleAttr.COLOR) color = convert_rgb_to_hex(url_color) @@ -584,20 +568,18 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): if event.button == 3: # right click self.parent_win.popup_menu(event) - def _conv_textview_key_press_event(self, widget, event): - # translate any layout to latin_layout - _valid, entries = self.keymap.get_entries_for_keyval(event.keyval) - keycode = entries[0].keycode - if (event.get_state() & Gdk.ModifierType.CONTROL_MASK and keycode in ( - self.keycode_c, self.keycode_ins)): - return False + def _conv_textview_key_press_event(self, _widget, event): + if (event.get_state() & get_primary_accel_mod() and + event.keyval in (Gdk.KEY_c, Gdk.KEY_Insert)): + return Gdk.EVENT_PROPAGATE - if event.get_state() & Gdk.ModifierType.SHIFT_MASK and \ - event.keyval in (Gdk.KEY_Page_Down, Gdk.KEY_Page_Up): + if (event.get_state() & Gdk.ModifierType.SHIFT_MASK and + event.keyval in (Gdk.KEY_Page_Down, Gdk.KEY_Page_Up)): self._on_scroll(None, event.keyval) - return False + return Gdk.EVENT_PROPAGATE + self.parent_win.notebook.event(event) - return True + return Gdk.EVENT_STOP def _on_message_textview_key_press_event(self, widget, event): if event.keyval == Gdk.KEY_space: diff --git a/gajim/gtk/util.py b/gajim/gtk/util.py index c1af66e32..b2df0ca53 100644 --- a/gajim/gtk/util.py +++ b/gajim/gtk/util.py @@ -247,3 +247,11 @@ def convert_rgb_to_hex(rgb_string: str) -> str: green = int(rgb.green * 255) blue = int(rgb.blue * 255) return '#%02x%02x%02x' % (red, green, blue) + + +def get_primary_accel_mod(): + """ + Returns the primary Gdk.ModifierType modifier. + cmd on osx, ctrl everywhere else. + """ + return Gtk.accelerator_parse("")[1]