From 0b1b2f0e19131c58c62e2a7b08c870f2d8b9ccbd Mon Sep 17 00:00:00 2001 From: alfrix Date: Tue, 22 Nov 2022 09:55:45 -0300 Subject: [PATCH] dialog removal refactor --- ks_includes/KlippyGtk.py | 12 ++++++++---- panels/job_status.py | 11 ++++------- panels/network.py | 6 +----- panels/print.py | 6 ++---- panels/system.py | 16 ++++++++-------- screen.py | 23 ++++++++++++----------- 6 files changed, 35 insertions(+), 39 deletions(-) diff --git a/ks_includes/KlippyGtk.py b/ks_includes/KlippyGtk.py index a762e2d3..e3b9db93 100644 --- a/ks_includes/KlippyGtk.py +++ b/ks_includes/KlippyGtk.py @@ -204,7 +204,6 @@ class KlippyGtk: button.set_size_request((screen.width - 30) / 3, screen.height / 5) dialog.connect("response", self.screen.reset_screensaver_timeout) - dialog.connect("response", self.remove_dialog, dialog) dialog.connect("response", callback, *args) dialog.get_style_context().add_class("dialog") @@ -225,11 +224,16 @@ class KlippyGtk: Gdk.Cursor.new_for_display(Gdk.Display.get_default(), Gdk.CursorType.BLANK_CURSOR)) self.screen.dialogs.append(dialog) + logging.info(f"Showing dialog {dialog}") return dialog - def remove_dialog(self, widget, response_id, dialog): - logging.info("Removing Dialog") - self.screen.dialogs.remove(dialog) + def remove_dialog(self, dialog, *args): + dialog.destroy() + if dialog in self.screen.dialogs: + logging.info("Removing Dialog") + self.screen.dialogs.remove(dialog) + return + logging.debug(f"Cannot remove dialog {dialog}") @staticmethod def HomogeneousGrid(width=None, height=None): diff --git a/panels/job_status.py b/panels/job_status.py index cd0e3454..b3f0c580 100644 --- a/panels/job_status.py +++ b/panels/job_status.py @@ -427,14 +427,14 @@ class JobStatusPanel(ScreenPanel): ] self._gtk.Dialog(self._screen, buttons, grid, self.save_confirm, device) - def save_confirm(self, widget, response_id, device): + def save_confirm(self, dialog, response_id, device): + self._gtk.remove_dialog(dialog) if response_id == Gtk.ResponseType.APPLY: if device == "probe": self._screen._ws.klippy.gcode_script("Z_OFFSET_APPLY_PROBE") if device == "endstop": self._screen._ws.klippy.gcode_script("Z_OFFSET_APPLY_ENDSTOP") self._screen._ws.klippy.gcode_script("SAVE_CONFIG") - widget.destroy() def restart(self, widget): if self.filename != "none": @@ -467,17 +467,14 @@ class JobStatusPanel(ScreenPanel): self._gtk.Dialog(self._screen, buttons, label, self.cancel_confirm) - def cancel_confirm(self, widget, response_id): - widget.destroy() - + def cancel_confirm(self, dialog, response_id): + self._gtk.remove_dialog(dialog) if response_id == Gtk.ResponseType.APPLY: self.menu_item_clicked(None, "exclude", {"panel": "exclude", "name": _("Exclude Object")}) return - if response_id == Gtk.ResponseType.CANCEL: self.enable_button("pause", "cancel") return - logging.debug("Canceling print") self.set_state("cancelling") self.disable_button("pause", "resume", "cancel") diff --git a/panels/network.py b/panels/network.py index 8338a917..3a1f4938 100644 --- a/panels/network.py +++ b/panels/network.py @@ -251,10 +251,6 @@ class NetworkPanel(ScreenPanel): del self.labels[i] self.show_add = False - @staticmethod - def close_dialog(widget, response_id): - widget.destroy() - def connected_callback(self, ssid, prev_ssid): logging.info("Now connected to a new network") if ssid is not None: @@ -293,7 +289,7 @@ class NetworkPanel(ScreenPanel): self.labels['connecting_info'].set_halign(Gtk.Align.START) self.labels['connecting_info'].set_valign(Gtk.Align.START) scroll.add(self.labels['connecting_info']) - self._gtk.Dialog(self._screen, buttons, scroll, self.close_dialog) + self._gtk.Dialog(self._screen, buttons, scroll, self._gtk.remove_dialog) self._screen.show_all() if ssid in list(self.networks): diff --git a/panels/print.py b/panels/print.py index afa79824..ee4280b2 100644 --- a/panels/print.py +++ b/panels/print.py @@ -324,12 +324,10 @@ class PrintPanel(ScreenPanel): self._gtk.Dialog(self._screen, buttons, grid, self.confirm_print_response, filename) - def confirm_print_response(self, widget, response_id, filename): - widget.destroy() - + def confirm_print_response(self, dialog, response_id, filename): + self._gtk.remove_dialog(dialog) if response_id == Gtk.ResponseType.CANCEL: return - logging.info(f"Starting print: {filename}") self._screen._ws.klippy.print_start(filename) diff --git a/panels/system.py b/panels/system.py index f3e46c62..c92b2cff 100644 --- a/panels/system.py +++ b/panels/system.py @@ -98,8 +98,8 @@ class SystemPanel(ScreenPanel): def activate(self): self.get_updates() - def finish_updating(self, widget, response_id): - widget.destroy() + def finish_updating(self, dialog, response_id): + self._gtk.remove_dialog(dialog) self._screen.set_updating(False) self.get_updates() @@ -237,20 +237,20 @@ class SystemPanel(ScreenPanel): ] self._gtk.Dialog(self._screen, buttons, scroll, self.update_confirm, program) - def update_confirm(self, widget, response_id, program): + def update_confirm(self, dialog, response_id, program): + self._gtk.remove_dialog(dialog) if response_id == Gtk.ResponseType.OK: logging.debug(f"Updating {program}") self.update_program(self, program) - widget.destroy() - def reset_confirm(self, widget, response_id, program): + def reset_confirm(self, dialog, response_id, program): + self._gtk.remove_dialog(dialog) if response_id == Gtk.ResponseType.OK: logging.debug(f"Recovering hard {program}") self.reset_repo(self, program, True) if response_id == Gtk.ResponseType.APPLY: logging.debug(f"Recovering soft {program}") self.reset_repo(self, program, False) - widget.destroy() def reset_repo(self, widget, program, hard): if self._screen.is_updating(): @@ -402,7 +402,8 @@ class SystemPanel(ScreenPanel): ] self._gtk.Dialog(self._screen, buttons, scroll, self.reboot_poweroff_confirm, method) - def reboot_poweroff_confirm(self, widget, response_id, method): + def reboot_poweroff_confirm(self, dialog, response_id, method): + self._gtk.remove_dialog(dialog) if response_id == Gtk.ResponseType.OK: if method == "reboot": os.system("systemctl reboot") @@ -413,4 +414,3 @@ class SystemPanel(ScreenPanel): self._screen._ws.send_method("machine.reboot") else: self._screen._ws.send_method("machine.shutdown") - widget.destroy() diff --git a/screen.py b/screen.py index b57a5255..ddd203e7 100644 --- a/screen.py +++ b/screen.py @@ -368,8 +368,8 @@ class KlipperScreen(Gtk.Window): ] self.gtk.Dialog(self, buttons, grid, self.error_modal_response) - def error_modal_response(self, widget, response_id): - widget.destroy() + def error_modal_response(self, dialog, response_id): + self.gtk.remove_dialog(dialog) self.reload_panels() def restart_warning(self, value): @@ -391,11 +391,11 @@ class KlipperScreen(Gtk.Window): self.gtk.Dialog(self, buttons, label, self.restart_ks) - def restart_ks(self, widget, response_id): + def restart_ks(self, dialog, response_id): + self.gtk.remove_dialog(dialog) if response_id == Gtk.ResponseType.OK: logging.debug("Restarting") self._ws.send_method("machine.services.restart", {"service": "KlipperScreen"}) - widget.destroy() def init_style(self): css_data = pathlib.Path(os.path.join(klipperscreendir, "styles", "base.css")).read_text() @@ -482,7 +482,7 @@ class KlipperScreen(Gtk.Window): if panel not in ["printer_select", "splash_screen"]: del self.panels[panel] for dialog in self.dialogs: - dialog.destroy() + self.gtk.remove_dialog(dialog) self.close_screensaver() def _remove_current_panel(self, pop=True): @@ -534,6 +534,7 @@ class KlipperScreen(Gtk.Window): self.close_screensaver() self.remove_keyboard() for dialog in self.dialogs: + logging.debug("Hiding dialog") dialog.hide() close = Gtk.Button() @@ -563,6 +564,7 @@ class KlipperScreen(Gtk.Window): else: self.screensaver_timeout = GLib.timeout_add_seconds(self.blanking_time, self.show_screensaver) for dialog in self.dialogs: + logging.info(f"Restoring Dialog {dialog}") dialog.show() self.show_all() return False @@ -770,14 +772,13 @@ class KlipperScreen(Gtk.Window): label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) if self.confirm is not None: - self.confirm.destroy() + self.gtk.remove_dialog(self.confirm) self.confirm = self.gtk.Dialog(self, buttons, label, self._confirm_send_action_response, method, params) - def _confirm_send_action_response(self, widget, response_id, method, params): + def _confirm_send_action_response(self, dialog, response_id, method, params): + self.gtk.remove_dialog(dialog) if response_id == Gtk.ResponseType.OK: - self._send_action(widget, method, params) - - widget.destroy() + self._send_action(None, method, params) def _send_action(self, widget, method, params): logging.info(f"{method}: {params}") @@ -901,7 +902,7 @@ class KlipperScreen(Gtk.Window): self.show_panel('job_status', "job_status", _("Printing"), 2) self.base_panel_show_all() for dialog in self.dialogs: - dialog.destroy() + self.gtk.remove_dialog(dialog) def show_keyboard(self, widget=None, event=None, entry=None): if self.keyboard is not None: