From 00e78b1228d1941b11a3a5edb0b5a2d61924c68c Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 21 May 2026 20:42:00 +0900 Subject: [PATCH] fix: set filter panel to insensitive on lan load --- dzgui/controllers/emitter.py | 4 ++++ dzgui/model/servers.py | 8 +++++++- dzgui/views/components/right_panel.py | 8 +++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/dzgui/controllers/emitter.py b/dzgui/controllers/emitter.py index a089351..d22d585 100644 --- a/dzgui/controllers/emitter.py +++ b/dzgui/controllers/emitter.py @@ -12,6 +12,7 @@ if TYPE_CHECKING: # TODO: if servers fail to load, may leave dangling widgets waiting for a signal + class Emitter(GObject.GObject): def __init__(self) -> None: super().__init__() @@ -150,3 +151,6 @@ class Emitter(GObject.GObject): def keyword_set(self, keyword: str) -> None: pass + @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=()) + def lan_page_initialized(self) -> None: + pass diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index 7876f60..232b5cd 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -73,6 +73,7 @@ class ServerModelManager: self._dump_history() case ServerTab.LAN: # NOTE: LAN tab is only loaded on demand + self.emitter.emit("lan_page_initialized") pass case _: pass @@ -123,7 +124,7 @@ class ServerModelManager: parsed = Servers.parse_json(servers) self._push_data(parsed) - @call_on_thread(dialog.scanning) + @call_on_thread(dialog.scanning, show_cancel=True) def dump_lan(self, port: int, early_abort: bool) -> None: self.first_iteration = True @@ -137,6 +138,11 @@ class ServerModelManager: for future in as_completed(futures): try: if self.controller.get_exit_event().is_set(): + event.set() + return + if self.controller.get_cancel_event().is_set(): + event.set() + self.controller.clear_cancel_event() return res = future.result(timeout=LAN_TIMEOUT) if res is None: diff --git a/dzgui/views/components/right_panel.py b/dzgui/views/components/right_panel.py index efea8e6..2055190 100644 --- a/dzgui/views/components/right_panel.py +++ b/dzgui/views/components/right_panel.py @@ -52,6 +52,7 @@ class RightPanel(Gtk.Box): emitter = controller.get_emitter() emitter.connect("servers_loaded", self._on_servers_loaded) emitter.connect("server_page_changed", self._on_server_page_changed) + emitter.connect("lan_page_initialized", self._on_lan_page_init) self.button_vbox = ButtonBox(controller) self.filters_vbox = FilterPanel(controller) @@ -152,10 +153,15 @@ class RightPanel(Gtk.Box): return self.filters_vbox.set_sensitive(False) + def _on_lan_page_init(self, emitter: "Emitter") -> None: + self.filters_vbox.set_sensitive(False) + self.refresh_button.set_sensitive(False) + def _on_servers_loaded(self, emitter: "Emitter", context: "ServerTab") -> None: # TODO: similar logic on notebook page change state = self.controller.has_server_model() - self.filters_vbox.set_sensitive(state) + for el in self.filters_vbox, self.refresh_button: + el.set_sensitive(state) def _on_version_clicked(self, widget: Gtk.EventBox, event: Gdk.EventButton) -> None: def revert() -> Literal[False]: