From 4882b31761841b9b1c80161cdc442d9d3b7823cc Mon Sep 17 00:00:00 2001 From: heliguy Date: Fri, 5 Jul 2024 03:13:34 -0400 Subject: [PATCH] Introduce new error toast widget --- src/meson.build | 1 + src/widgets/error_toast.py | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/widgets/error_toast.py diff --git a/src/meson.build b/src/meson.build index 1830fc4..1ece3e5 100644 --- a/src/meson.build +++ b/src/meson.build @@ -51,6 +51,7 @@ warehouse_sources = [ 'main.py', 'host_info.py', 'widgets/app_row.py', + 'widgets/error_toast.py', 'main_window/window.py', 'packages_page/packages_page.py', '../data/style.css', diff --git a/src/widgets/error_toast.py b/src/widgets/error_toast.py new file mode 100644 index 0000000..3406961 --- /dev/null +++ b/src/widgets/error_toast.py @@ -0,0 +1,24 @@ +from gi.repository import Adw, Gtk, Gdk, GLib, Pango +clipboard = Gdk.Display.get_default().get_clipboard() + +class ErrorToast: + def __init__(self, display_msg, error_msg, parent_window, format=True): + + def on_response(dialog, response_id): + if response_id == "copy": + clipboard.set(error_msg) + + popup = Adw.AlertDialog.new(display_msg, None if format else error_msg) + popup.add_response("copy", _("Copy")) + popup.add_response("ok", _("OK")) + popup.connect("response", on_response) + + if format: + lb = Gtk.Label(selectable=True, wrap=True)#, natural_wrap_mode=Gtk.NaturalWrapMode.WORD) + lb.set_markup(f"{GLib.markup_escape_text(error_msg)}") + # lb.set_label(error_msg) + # lb.set_selectable(True) + popup.set_extra_child(lb) + + self.toast = Adw.Toast(title=display_msg, button_label=_("Details")) + self.toast.connect("button-clicked", lambda *_: popup.present(parent_window)) \ No newline at end of file