diff --git a/screen.py b/screen.py
index 88b146b5..8748eb04 100644
--- a/screen.py
+++ b/screen.py
@@ -312,11 +312,11 @@ class KlipperScreen(Gtk.Window):
self.panels[panel_name].initialize(panel_name, **kwargs)
else:
self.panels[panel_name].initialize(panel_name)
- except Exception:
+ except Exception as e:
if panel_name in self.panels:
del self.panels[panel_name]
logging.exception(f"Unable to load panel {panel_type}")
- self.show_error_modal(f"Unable to load panel {panel_type}")
+ self.show_error_modal(f"Unable to load panel {panel_type}", e)
return
if hasattr(self.panels[panel_name], "process_update"):
@@ -402,27 +402,35 @@ class KlipperScreen(Gtk.Window):
self.popup_message = None
self.show_all()
- def show_error_modal(self, err):
+ def show_error_modal(self, err, e=""):
+ logging.exception(f"Showing error modal: {err}")
- logging.exception("Showing error modal: %s", err)
+ title = Gtk.Label()
+ title.set_markup(f"{err}\n\n")
+ title.set_line_wrap(True)
+ title.set_halign(Gtk.Align.START)
+ message = Gtk.Label()
+ message.set_markup(
+ "Provide /tmp/KlipperScreen.log when asking for help.\n\n"
+ + f"KlipperScreen: {self.version}\n"
+ + f"{e}\n"
+ )
+ message.set_line_wrap(True)
+
+ vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
+ vbox.set_halign(Gtk.Align.CENTER)
+ vbox.set_valign(Gtk.Align.CENTER)
+ vbox.add(title)
+ vbox.add(message)
+
+ scroll = self.gtk.ScrolledWindow()
+ scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
+ scroll.add(vbox)
buttons = [
{"name": _("Go Back"), "response": Gtk.ResponseType.CANCEL}
]
-
- label = Gtk.Label()
- label.set_markup(
- f"{err} \n\n" +
- _("Check /tmp/KlipperScreen.log for more information.\nPlease submit an issue on GitHub for help.")
- )
- label.set_hexpand(True)
- label.set_halign(Gtk.Align.CENTER)
- label.set_vexpand(True)
- label.set_valign(Gtk.Align.CENTER)
- label.set_line_wrap(True)
- label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR)
-
- self.gtk.Dialog(self, buttons, label, self.error_modal_response)
+ self.gtk.Dialog(self, buttons, scroll, self.error_modal_response)
@staticmethod
def error_modal_response(widget, response_id):