From 5abfb6f2269c8d30bb3e9e061a213f25548b22d0 Mon Sep 17 00:00:00 2001 From: Alfredo Monclus Date: Sun, 2 Jun 2024 18:03:05 -0300 Subject: [PATCH] screen: theme doesn't need a restart anymore --- ks_includes/KlippyGtk.py | 1 + panels/base_panel.py | 12 +++++++++++- screen.py | 14 ++++++++++++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/ks_includes/KlippyGtk.py b/ks_includes/KlippyGtk.py index 55cdeaa9..eb9fd730 100644 --- a/ks_includes/KlippyGtk.py +++ b/ks_includes/KlippyGtk.py @@ -161,6 +161,7 @@ class KlippyGtk: if label is not None: b.set_label(label.replace("\n", " ")) if image_name is not None: + b.set_name(image_name) if scale is None: scale = self.button_image_scale if label is None: diff --git a/panels/base_panel.py b/panels/base_panel.py index 393b887d..b767b9bf 100644 --- a/panels/base_panel.py +++ b/panels/base_panel.py @@ -12,7 +12,7 @@ from ks_includes.screen_panel import ScreenPanel class BasePanel(ScreenPanel): - def __init__(self, screen, title): + def __init__(self, screen, title=None): super().__init__(screen, title) self.current_panel = None self.time_min = -1 @@ -111,6 +111,16 @@ class BasePanel(ScreenPanel): self.update_time() + def reload_icons(self): + button: Gtk.Button + for button in self.action_bar.get_children(): + img = button.get_image() + name = button.get_name() + pixbuf = img.get_pixbuf() + width = pixbuf.get_width() + height = pixbuf.get_height() + button.set_image(self._gtk.Image(name, width, height)) + def show_heaters(self, show=True): try: for child in self.control['temp_box'].get_children(): diff --git a/screen.py b/screen.py index 457a3c17..617dde77 100755 --- a/screen.py +++ b/screen.py @@ -139,9 +139,9 @@ class KlipperScreen(Gtk.Window): self.gtk = KlippyGtk(self) self.base_css = "" self.load_base_styles() - self.change_theme(self.theme) self.set_icon_from_file(os.path.join(klipperscreendir, "styles", "icon.svg")) - self.base_panel = BasePanel(self, title="Base Panel") + self.base_panel = BasePanel(self) + self.change_theme(self.theme) self.add(self.base_panel.main_grid) self.show_all() min_ver = (3, 8) @@ -329,6 +329,10 @@ class KlipperScreen(Gtk.Window): logging.exception(f"Error attaching panel:\n{e}\n\n{traceback.format_exc()}") def attach_panel(self, panel): + if panel in self.panels_reinit: + # this happens when the first panel needs a reinit + self.reload_panels() + return self.base_panel.add_content(self.panels[panel]) logging.debug(f"Current panel hierarchy: {' > '.join(self._cur_panels)}") while len(self.panels[panel].menu) > 1: @@ -501,6 +505,7 @@ class KlipperScreen(Gtk.Window): screen = Gdk.Screen.get_default() if self.style_provider: Gtk.StyleContext.remove_provider_for_screen(screen, self.style_provider) + self.style_provider = Gtk.CssProvider() self.style_provider.load_from_data(css_data.encode()) Gtk.StyleContext.add_provider_for_screen( screen, @@ -516,6 +521,11 @@ class KlipperScreen(Gtk.Window): self.style_options.update(theme_options) self.gtk.color_list = self.style_options['graph_colors'] self.update_style_provider(theme_css) + self.reload_icon_theme() + + def reload_icon_theme(self): + self.panels_reinit = list(self.panels) + self.base_panel.reload_icons() def _go_to_submenu(self, widget, name): logging.info(f"#### Go to submenu {name}")