fix: update statusbars/crumbs correctly

This commit is contained in:
aclist committed 2025-12-30 21:27:30 +09:00
1 parent 029bc1edbd
commit 167935b963
3 files changed
+53 -43

No files matched your search

+15 -6
View File
@@ -21,6 +21,7 @@ from dzgui.const.enum import (
NotebookPage, NotebookPage,
ButtonType, ButtonType,
ContextMenu, ContextMenu,
RowType
) )
from dzgui.const.constants import ( from dzgui.const.constants import (
@@ -54,11 +55,11 @@ logger = logging.getLogger(__name__)
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.views.components.buttonbox import ContextualButton from dzgui.views.components.buttonbox import ContextualButton
from dzgui.views.base import AppNavigation from dzgui.views.base import AppNavigation
from dzgui.const.enum import ContextMenu, RowType
from dzgui.views.base import OuterWindow from dzgui.views.base import OuterWindow
class Controller: class Controller:
def __init__(self) -> None: def __init__(self) -> None:
self.crumbs_cache = ""
self.mediator: AppNavigation self.mediator: AppNavigation
self.prefs: UserPrefs self.prefs: UserPrefs
self.cooldown = 0 self.cooldown = 0
@@ -72,8 +73,8 @@ class Controller:
if tip == store: if tip == store:
self.set_crumbs("Help") self.set_crumbs("Help")
def set_crumbs(self, crumbs: str) -> None: def set_crumbs(self, text: str) -> None:
self.mediator.grid.set_breadcrumbs(crumbs) self.mediator.grid.set_breadcrumbs(text)
def get_crumbs(self) -> str: def get_crumbs(self) -> str:
return self.mediator.grid.get_breadcrumbs() return self.mediator.grid.get_breadcrumbs()
@@ -293,15 +294,16 @@ class Controller:
return return
case ButtonType.OPTIONS: case ButtonType.OPTIONS:
self.mediator.grid.notebook.settings.populate_settings() self.mediator.grid.notebook.settings.populate_settings()
self.mediator.grid.statusbar.refresh(None)
case ButtonType.MODS: case ButtonType.MODS:
self.load_mods() self.load_mods()
case ButtonType.HELP: case ButtonType.HELP:
self.mediator.grid.statusbar.refresh(RowType.CHANGELOG)
pass pass
case ButtonType.SERVERS: case ButtonType.SERVERS:
self.mediator.notebook.set_page_by_enum(button.opens) self.mediator.notebook.set_page_by_enum(button.opens)
# TODO: shorten this # TODO: use cache
treeview = self.mediator.notebook.servers.get_active_treeview() self.update_server_status()
treeview.grab_focus()
return return
self.mediator.notebook.set_page_by_enum(button.opens) self.mediator.notebook.set_page_by_enum(button.opens)
@@ -588,3 +590,10 @@ class Controller:
# self.suppress_signal(tab, col, "_on_col_width_changed", True) # self.suppress_signal(tab, col, "_on_col_width_changed", True)
# col.set_fixed_width(width) # col.set_fixed_width(width)
# self.suppress_signal(tab, col, "_on_col_width_changed", False) # self.suppress_signal(tab, col, "_on_col_width_changed", False)
def set_crumbs_cache(self,text: str) -> None:
self.crumbs_cache = text
def get_crumbs_cache(self) -> None:
return self.crumbs_cache
self.crumbs_cache = text
+29 -37
View File
@@ -289,7 +289,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
super().__init__(show_tabs=False, show_border=False) super().__init__(show_tabs=False, show_border=False)
AppNav.notebook = self AppNav.notebook = self
self.prior_page: int self.prior_page: NotebookPage
from dzgui.views.pages.help import Help from dzgui.views.pages.help import Help
self.help = Help(MainController) self.help = Help(MainController)
@@ -394,26 +394,20 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
page._set_adjustment(VAdjustment.BOTTOM) page._set_adjustment(VAdjustment.BOTTOM)
def return_prior(self) -> None: def return_prior(self) -> None:
page = self.get_nth_page(self.prior_page) """
# FIXME: check enum for NotebookPage.OPTIONS Gtk.Notebook focuses the first input field when changing pages;
# TODO: can be dropped? this workaround unhighlights the selected region and makes entry
if hasattr(page, "steam_entry"): fields unfocusable prior to the page 'switch-page' signal,
""" then makes them focusable again
Gtk.Notebook focuses the first input field when changing pages;
this workaround unhighlights the selected region and makes entry
fields unfocusable prior to the page 'switch-page' signal,
then makes them focusable again
Used when switching to keybindings dialog Used when switching back from NotebookPage.KEYS
""" """
entries = page.steam_entry, page.bm_entry if self.prior_page is NotebookPage.OPTIONS:
for entry in entries: self.settings.block_text_entry()
entry.set_position(-1) self.set_page_by_enum(self.prior_page)
entry.set_can_focus(False) self.settings.unblock_text_entry()
self.set_current_page(self.prior_page) return
for entry in entries: self.set_page_by_enum(self.prior_page)
entry.set_can_focus(True)
self.set_current_page(self.prior_page)
def get_page_by_enum(self) -> NotebookPage | None: def get_page_by_enum(self) -> NotebookPage | None:
for k, v in self.indexes.items(): for k, v in self.indexes.items():
@@ -426,7 +420,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
if cur_page == NotebookPage.KEYS: if cur_page == NotebookPage.KEYS:
self.return_prior() self.return_prior()
else: else:
self.prior_page = self.get_current_page() #self.prior_page = cur_page #self.get_current_page()
self.set_page_by_enum(NotebookPage.KEYS) self.set_page_by_enum(NotebookPage.KEYS)
def focus_current(self) -> None: def focus_current(self) -> None:
@@ -440,7 +434,6 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
return return
w = widget.get_children()[0] w = widget.get_children()[0]
# NOTE: if item contains treeview, focus first cell
try: try:
w.focus_first_row() w.focus_first_row()
w.grab_focus() w.grab_focus()
@@ -455,25 +448,24 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
return widget return widget
def set_page_by_enum(self, enum: NotebookPage) -> None: def set_page_by_enum(self, enum: NotebookPage) -> None:
self.prior_page = self.get_current_page() self.prior_page = self.get_page_by_enum()
self.set_current_page(self.indexes[enum]) self.set_current_page(self.indexes[enum])
self.focus_current() self.focus_current()
# TODO: should be an internal property of those pages # TODO: should be an internal property of those pages
if enum is NotebookPage.SERVERS: match enum:
AppNav.grid.show_connect_panel() case NotebookPage.KEYS:
else: MainController.set_statusbar("")
AppNav.grid.hide_connect_panel() AppNav.grid.hide_connect_panel()
case NotebookPage.SERVERS:
blank = [ # TODO: consolidate in mc.py
NotebookPage.OPTIONS, AppNav.grid.show_connect_panel()
NotebookPage.THANKS, self.servers.get_active_treeview().grab_focus()
NotebookPage.CHANGELOG, MainController.update_server_status()
NotebookPage.LOG crumbs = self.servers.get_cached_label()
] MainController.set_crumbs(crumbs)
if enum in blank: case _:
# TODO: delegate to controller AppNav.grid.hide_connect_panel()
AppNav.grid.statusbar.refresh(None)
def _on_page_changed( def _on_page_changed(
self, notebook: "Notebook", page: Gtk.Widget, page_num: int self, notebook: "Notebook", page: Gtk.Widget, page_num: int
+9
View File
@@ -190,6 +190,15 @@ class Options(Gtk.Box):
self.scrollable.add(grid) self.scrollable.add(grid)
self.add(self.scrollable) self.add(self.scrollable)
def block_text_entry(self) -> None:
for entry in self.steam_entry, self.bm_entry:
entry.set_position(-1)
entry.set_can_focus(False)
def unblock_text_entry(self) -> None:
for entry in self.steam_entry, self.bm_entry:
entry.set_can_focus(True)
def _on_developers_clicked(self, button: Gtk.Button) -> None: def _on_developers_clicked(self, button: Gtk.Button) -> None:
self.controller.show_developers_page() self.controller.show_developers_page()