diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/WindowNotification.cpp | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/src/WindowNotification.cpp b/src/WindowNotification.cpp index acb47da..9e17108 100644 --- a/src/WindowNotification.cpp +++ b/src/WindowNotification.cpp @@ -1,34 +1,46 @@ #include "../include/WindowNotification.hpp" #include <gtkmm.h> -static Gtk::Overlay *overlay = nullptr; -static Gtk::Label *label = nullptr; - namespace dchat { WindowNotification::WindowNotification() { label.set_line_wrap(true); label.set_line_wrap_mode(Pango::WRAP_WORD_CHAR); - label.set_halign(Gtk::ALIGN_START); + label.set_halign(Gtk::ALIGN_CENTER); revealer.add(label); - add(revealer); + revealer.set_hexpand(true); + + Gtk::Grid *grid = Gtk::manage(new Gtk::Grid()); + grid->add(revealer); + grid->get_style_context()->add_class("window-notification"); + + add(*grid); set_valign(Gtk::ALIGN_START); - set_halign(Gtk::ALIGN_CENTER); - revealer.get_style_context()->add_class("window-notification"); + set_hexpand(true); show_all(); + set_visible(false); } void WindowNotification::show(const Glib::ustring &text) { hideTimer.disconnect(); + visibilityTimer.disconnect(); label.set_text(text); + set_visible(true); revealer.set_reveal_child(true); - int showTime = (int)std::max(1.0, (double)text.size() * 0.1); - hideTimer = Glib::signal_timeout().connect_seconds([this] + int showTime = (int)std::max(1.0, (double)text.size() * 0.1) * 1000; + + hideTimer = Glib::signal_timeout().connect([this] { revealer.set_reveal_child(false); return false; }, showTime); + + visibilityTimer = Glib::signal_timeout().connect([this] + { + set_visible(false); + return false; + }, showTime + revealer.get_transition_duration()); } }
\ No newline at end of file |