Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Hörist <philipp@hoerist.com>2023-11-07 16:04:50 +0300
committerPhilipp Hörist <philipp@hoerist.com>2023-11-07 16:04:50 +0300
commitf3baca3c34c79b74f6535ead13fc1666b398b2b0 (patch)
tree237168966c462d7d580ae379f49f713fb887db2b
parente59dd99d32d40123cf8f07e549a44546d975da80 (diff)
imprv: MessageInput: Regain focus on common key presses
-rw-r--r--gajim/gtk/main.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/gajim/gtk/main.py b/gajim/gtk/main.py
index ea35929d3..4dfe3e089 100644
--- a/gajim/gtk/main.py
+++ b/gajim/gtk/main.py
@@ -122,6 +122,7 @@ class MainWindow(Gtk.ApplicationWindow, EventHelper):
self.connect('notify::is-active', self._on_window_active)
self.connect('delete-event', self._on_window_delete)
self.connect('window-state-event', self._on_window_state_changed)
+ self.connect_after('key-press-event', self._on_key_press_event)
self._ui.connect_signals(self)
@@ -250,6 +251,42 @@ class MainWindow(Gtk.ApplicationWindow, EventHelper):
def update_account_unread_count(self, account: str, count: int) -> None:
self._account_side_bar.update_unread_count(account, count)
+ def _on_key_press_event(
+ self,
+ _window: MainWindow,
+ event: Gdk.EventKey
+ ) -> bool:
+
+ modifier = event.get_state() & Gtk.accelerator_get_default_mod_mask()
+
+ if not modifier:
+ if event.keyval in (
+ Gdk.KEY_Control_L,
+ Gdk.KEY_Control_R,
+ Gdk.KEY_Alt_L,
+ Gdk.KEY_Alt_R,
+ ):
+ return False
+
+ if modifier == Gdk.ModifierType.CONTROL_MASK:
+ if event.keyval == Gdk.KEY_C:
+ return False
+
+ focused_widget = self.get_focus()
+ if (isinstance(focused_widget, Gtk.TextView)
+ and focused_widget.props.editable):
+ return False
+
+ if isinstance(focused_widget, Gtk.Entry):
+ return False
+
+ message_input = self.get_chat_stack().get_message_input()
+ if not message_input.get_mapped() or not message_input.is_sensitive():
+ return False
+
+ message_input.grab_focus()
+ return self.propagate_key_event(event)
+
def _on_client_state_changed(self,
client: Client,
_signal_name: str,