fix: defer destroy call

This commit is contained in:
aclist 2026-02-25 22:44:49 +09:00
parent 79eab93629
commit a763b3b9dc
3 changed files with 14 additions and 6 deletions

View File

@ -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

View File

@ -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)

View File

@ -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