feat: toast notification

This commit is contained in:
aclist 2025-08-08 18:00:33 +09:00
parent 8f3238e4de
commit 9c6847ba39

View File

@ -551,6 +551,9 @@ def load_css() -> None:
.frame {
border: 0px;
}
.toast-label {
padding: 10px;
}
.frame > border {
border-radius: 5px;
padding: 5px;
@ -1016,8 +1019,14 @@ class OuterWindow(Gtk.Window):
self._set_resolution()
self.grid = Grid()
self.add(self.grid)
self.toast = Toast()
self.overlay = Gtk.Overlay()
self.overlay.add_overlay(self.grid)
self.overlay.add_overlay(self.toast)
self.add(self.overlay)
self.show_all()
self.toast.set_visible(False)
self.grid.right_panel.filters_vbox.set_visible(False)
self.grid.right_panel.enable_ping_button(False)
@ -1080,6 +1089,47 @@ class OuterWindow(Gtk.Window):
save_res_and_quit()
class Toast(Gtk.EventBox):
def __init__(self):
super().__init__()
self.label = Gtk.Label()
self.box = Gtk.Box(
orientation=Gtk.Orientation.HORIZONTAL,
halign=Gtk.Align.CENTER,
valign=Gtk.Align.CENTER,
)
self.box.add(self.label)
self.add(self.box)
self.box.set_size_request(200, 100)
add_class(self.box, "toast-label")
def set_text(self, text: str) -> None:
self.label.set_text(text)
def set_text_and_fade(self, text: str) -> None:
self.set_text(text)
self.pop()
self._defer_fade()
def fade_out(self) -> bool:
if self.get_opacity() == 0:
self.set_visible(False)
self.set_opacity(1)
return False
self.set_opacity(self.get_opacity() - 0.03)
return True
def pop(self) -> None:
self.set_visible(True)
def _defer_fade(self) -> Literal[False]:
"""Defers fade out of toast"""
GLib.timeout_add(30, self.fade_out)
return False
class ScrollableTree(Gtk.ScrolledWindow):
def __init__(self):
super().__init__()