From af4d79f190b5e01c3ea0d779906561b40b144195 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 18 Apr 2026 20:08:32 +0900 Subject: [PATCH] feat: update saved tab label --- dzgui/controllers/emitter.py | 5 +++++ dzgui/model/proxy_model.py | 4 +++- dzgui/model/servers.py | 6 ++++++ dzgui/views/pages/servers.py | 16 ++++++++++------ 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/dzgui/controllers/emitter.py b/dzgui/controllers/emitter.py index c84fd70..4a46311 100644 --- a/dzgui/controllers/emitter.py +++ b/dzgui/controllers/emitter.py @@ -22,6 +22,11 @@ class Emitter(GObject.GObject): """User invoked Ctrl-f keybinding from ServerTreeView""" pass + @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=()) + def saved_servers_changed(self) -> None: + """Record was added/removed from Saved Servers model""" + pass + @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=()) def request_maps_focus(self) -> None: """User invoked Ctrl-m keybinding from ServerTreeView""" diff --git a/dzgui/model/proxy_model.py b/dzgui/model/proxy_model.py index d5c9ac7..e39e830 100644 --- a/dzgui/model/proxy_model.py +++ b/dzgui/model/proxy_model.py @@ -41,7 +41,9 @@ class ProxyModelManager: self.success = True def has_control_model(self) -> bool: - pass + if self.control_model is None: + return False + return True def append_row(self, row: list) -> None: self.proxy_model.append(row) diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index 5b13b86..3e7be14 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -264,11 +264,13 @@ class ServerModelManager: # NOTE: abort early if Saved Servers tab was not loaded yet config_man.remove_saved_server(fqip) if proxy_man.has_control_model() is False: + self.thread_man.set_cleanup_func(StoredFunc(self._cleanup_when_no_model)) return proxy_man.remove_row_from_control(record) else: config_man.add_saved_server(fqip) if proxy_man.has_control_model() is False: + self.thread_man.set_cleanup_func(StoredFunc(self._cleanup_when_no_model)) return proxy_man.append_row_to_control(record) @@ -276,6 +278,9 @@ class ServerModelManager: self._sort_unique_maps(control_model) self.thread_man.set_cleanup_func(StoredFunc(self._cleanup_single_ip)) + def _cleanup_when_no_model(self) -> None: + self.emitter.emit("saved_servers_changed") + def _dump_history(self) -> None: history = self.controller.get_prefs().paths.history try: @@ -325,6 +330,7 @@ class ServerModelManager: self.emitter.emit("servers_loaded_init") self.first_iteration = False + self.emitter.emit("saved_servers_changed") def _update_maps(self) -> None: filter_man = self.tv.get_filter_man() diff --git a/dzgui/views/pages/servers.py b/dzgui/views/pages/servers.py index 61eecbd..b8f1599 100644 --- a/dzgui/views/pages/servers.py +++ b/dzgui/views/pages/servers.py @@ -56,6 +56,15 @@ class ServerNotebook(Gtk.ScrolledWindow): self.connect("unmap", self._on_unmap) self.emitter.connect("servers_loaded", self._on_servers_loaded) + self.emitter.connect("saved_servers_changed", self._on_saved_servers_changed) + + def _on_saved_servers_changed(self, emitter: "Emitter") -> None: + saved = 1 + if self.notebook.get_current_page() == saved: + return + page = self.notebook.get_nth_page(saved) + label = self.notebook.get_tab_label(page) + label.set_text(f"{server_labels.saved}*") def _on_servers_loaded(self, emitter: "Emitter", tab: "ServerTab") -> None: # NOTE: workaround for GTK bug where fullscreen causes headers to vanish when model is None @@ -101,13 +110,8 @@ class ServerNotebook(Gtk.ScrolledWindow): if self.controller.loaded is False: return - # TODO: wipe statusbar when changing pages - label = self.notebook.get_tab_label_text(child) - if label is None: - return - - # TODO: strings, tab activity notifier + # TODO: strings text = label.strip("*") self.notebook.set_tab_label_text(child, text)