From 9fa93f5938d3aa03692bef25f7465e26e8ed2bae Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sun, 1 Mar 2026 00:43:27 +0900 Subject: [PATCH] feat: toggle radio from inside Gtk.Entry --- dzgui/views/base.py | 1 + dzgui/views/components/connect_panel.py | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/dzgui/views/base.py b/dzgui/views/base.py index c5194f7..530d0bf 100644 --- a/dzgui/views/base.py +++ b/dzgui/views/base.py @@ -232,6 +232,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook): # type: ignore def _on_keypress(self, widget: Gtk.Widget, event: Gdk.EventKey) -> None: match event.keyval: case Gdk.KEY_Right | Gdk.KEY_l: + # FIXME: propagation bool if event.state is Gdk.ModifierType.CONTROL_MASK: return MainController.get_emitter().emit("request_button_box_focus") diff --git a/dzgui/views/components/connect_panel.py b/dzgui/views/components/connect_panel.py index a5c06b3..801eafd 100644 --- a/dzgui/views/components/connect_panel.py +++ b/dzgui/views/components/connect_panel.py @@ -42,6 +42,7 @@ class LanPanel(Gtk.Frame): self.entry = PortEntry(controller) self.scan = Gtk.Button(label=lan_panel.scan_button) self.scan.connect("clicked", self._on_scan_clicked) + # TODO: strings self.early_abort = Gtk.CheckButton(label="Stop scanning on first hit") self.early_abort.set_active(True) @@ -51,6 +52,7 @@ class LanPanel(Gtk.Frame): self.entry.connect("activate", self._on_entry_activated) self.entry.connect("string_validated", self._on_port_validated) + self.entry.connect("key-release-event", self._on_lan_keypress) self.emitter.connect("request_custom_port_focus", self._on_custom_port_binding) self.emitter.connect( "request_default_port_focus", lambda _: self.default_radio.set_active(True) @@ -76,6 +78,14 @@ class LanPanel(Gtk.Frame): self.entry.set_sensitive(False) + def _on_lan_keypress(self, widget: Gtk.Entry, event: Gdk.EventKey) -> None: + if event.state & Gdk.ModifierType.CONTROL_MASK: + if event.keyval == Gdk.KEY_d: + self.default_radio.set_active(True) + self.controller.grab_active_treeview() + return True + return False + def _on_custom_port_binding(self, emitter: "Emitter") -> None: self.custom_radio.set_active(True) self.entry.grab_focus()