From a763b3b9dc108d3fc1e2199b9bdf30827d3031f8 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 25 Feb 2026 22:44:49 +0900 Subject: [PATCH] fix: defer destroy call --- dzgui/managers/thread_man.py | 11 ++++++++--- dzgui/model/servers.py | 5 ++++- dzgui/views/components/buttons.py | 4 ++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/dzgui/managers/thread_man.py b/dzgui/managers/thread_man.py index 18a520c..bfe62f1 100644 --- a/dzgui/managers/thread_man.py +++ b/dzgui/managers/thread_man.py @@ -11,7 +11,7 @@ from dzgui.views.dialogs.generic import WaitDialog import gi gi.require_version("Gtk", "3.0") -from gi.repository import Gtk, Gdk, GLib, GObject # noqa E402 +from gi.repository import Gtk, GLib # noqa E402 logger = logging.getLogger(__name__) @@ -88,9 +88,14 @@ class ThreadingManager: def get_cleanup_func(self) -> StoredFunc: return self.cleanup_func - def _destroy_on_idle(self) -> None: - self.wait_dialog.destroy() + def _d(self) -> None: + self.wait_dialog.hide() + return False + + def _destroy_on_idle(self) -> GLib.SOURCE_REMOVE: func = self.get_cleanup_func() if func is not None: func.call() self.set_cleanup_func(None) + self.wait_dialog.destroy() + return GLib.SOURCE_REMOVE diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index c947718..1c8dbb2 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -85,6 +85,7 @@ class ServerModelManager: @call_on_thread(dialog.fetching) def _dump_api(self) -> None: + # TODO: pass api key a priori in .load() call config_man = self.controller.get_config_man() key = config_man.lookup(Preferences.STEAM) job = Servers.query_api @@ -276,6 +277,7 @@ class ServerModelManager: self.first_iteration = False def _cleanup_on_success(self) -> None: + self.tv.set_model(None) self.tv.set_model(self.to_insert) # TODO: make sure control model len is N + 1 @@ -286,7 +288,7 @@ class ServerModelManager: # cf. servers_loaded signal # TODO: servers_loaded vs servers_reloaded - self.emitter.emit("servers_loaded", self.enum) + # self.emitter.emit("servers_loaded", self.enum) if self.first_iteration: self._update_maps() @@ -339,6 +341,7 @@ class ServerModelManager: @call_on_thread(dialog.filtering) def refilter(self, mode: FilterMode, label: str) -> None: + # FIXME: causes two wait dialogs when map selection change signal emits after loading servers self.first_iteration = False proxy_man = self._get_proxy_man() proxy_man.filter(mode, label) diff --git a/dzgui/views/components/buttons.py b/dzgui/views/components/buttons.py index 32ee330..bc596b7 100644 --- a/dzgui/views/components/buttons.py +++ b/dzgui/views/components/buttons.py @@ -17,7 +17,7 @@ gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GLib # noqa E402 if TYPE_CHECKING: - from GLib import SOURCE_REMOVE + from gi.repository import GLib from dzgui.controllers.mc import Controller @@ -107,7 +107,7 @@ class RefreshButton(IconTextButton): GLib.timeout_add_seconds(1, self.decrement) self.controller.refresh_tree() - def decrement(self) -> "SOURCE_REMOVE" | Literal[True]: + def decrement(self) -> "GLib.SOURCE_REMOVE" | Literal[True]: self.time -= 1 if self.time == 0: self.time = 30