Daniel Brötzmann pushed to branch master at gajim / gajim


Commits:
72985c6d by wurstsalat at 2025-09-07T12:16:15+02:00
imprv: Message selection: Allow copying messages using Ctrl+C

Part of #12194

- - - - -


3 changed files:

- gajim/gtk/chat_stack.py
- gajim/gtk/control.py
- gajim/gtk/conversation/message_selection.py


Changes:

=====================================
gajim/gtk/chat_stack.py
=====================================
@@ -129,6 +129,10 @@ def __init__(self):
         self._connect(drop_target, "leave", self._on_drag_leave)
         overlay.add_controller(drop_target)
 
+        controller = Gtk.EventControllerKey()
+        self._connect(controller, "key-pressed", self._on_key_pressed)
+        self.add_controller(controller)
+
         self.add_named(overlay, "controls")
 
         self.register_events(
@@ -807,6 +811,19 @@ def _on_file_drop(
         self._drop_area.set_visible(False)
         return True
 
+    def _on_key_pressed(
+        self,
+        _event_controller_key: Gtk.EventControllerKey,
+        keyval: int,
+        _keycode: int,
+        state: Gdk.ModifierType,
+    ) -> bool:
+        if state & Gdk.ModifierType.CONTROL_MASK:
+            if keyval == Gdk.KEY_c:
+                self._chat_control.copy_selected_messages()
+                return Gdk.EVENT_STOP
+        return Gdk.EVENT_PROPAGATE
+
     def _show_chat_function_page(
         self,
         function_mode: FunctionMode,


=====================================
gajim/gtk/control.py
=====================================
@@ -208,6 +208,11 @@ def scroll_to_message(self, pk: int, timestamp: 
dt.datetime) -> None:
     def mark_as_read(self) -> None:
         self._jump_to_end_button.reset_unread_count()
 
+    def copy_selected_messages(self) -> None:
+        # Message selection mode is active
+        self._scrolled_view.copy_selected_messages()
+        self._message_selection.set_visible(False)
+
     def process_escape(self) -> bool:
         message_selection_active = self._message_selection.get_visible()
         if message_selection_active:
@@ -493,7 +498,7 @@ def _reset_message_selection(self, *args: Any) -> None:
         self._message_selection.set_visible(False)
 
     def _on_copy_selection(self, _widget: MessageSelection) -> None:
-        self._scrolled_view.copy_selected_messages()
+        self.copy_selected_messages()
 
     def _on_jump_to_message(
         self, _action: Gio.SimpleAction, param: GLib.Variant


=====================================
gajim/gtk/conversation/message_selection.py
=====================================
@@ -18,10 +18,14 @@ class MessageSelection(Gtk.Grid):
     }
 
     def __init__(self) -> None:
-        Gtk.Grid.__init__(self, row_spacing=18, column_spacing=6)
-        self.set_visible(False)
-        self.set_halign(Gtk.Align.CENTER)
-        self.set_valign(Gtk.Align.END)
+        Gtk.Grid.__init__(
+            self,
+            row_spacing=18,
+            column_spacing=6,
+            visible=False,
+            halign=Gtk.Align.CENTER,
+            valign=Gtk.Align.END,
+        )
 
         self.add_css_class("toolbar")
         self.add_css_class("osd")
@@ -41,11 +45,7 @@ def __init__(self) -> None:
         self.attach(copy_button, 1, 1, 1, 1)
 
     def _on_copy_clicked(self, _button: Gtk.Button) -> None:
-        self.set_visible(False)
-        self.set_visible(False)
         self.emit("copy")
 
     def _on_cancel_clicked(self, _button: Gtk.Button) -> None:
-        self.set_visible(False)
-        self.set_visible(False)
         self.emit("cancel")



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/72985c6d19b402955e748214800e8970d04687be

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/72985c6d19b402955e748214800e8970d04687be
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to