#pragma once #include #include #include #include "gdkmm/monitor.h" #include "gtkmm/window.h" #define DEFAULT_NOTIFICATION_TIMEOUT 6700 class BaseNotification : public Gtk::Window { public: BaseNotification(uint64_t notificationId, std::shared_ptr monitor); void pauseAutoClose(); void resumeAutoClose(); void startAutoClose(int timeoutMs); uint64_t getNotificationId() const { return this->notificationId; } sigc::signal getSignalClose() { return this->signalClose; } sigc::signal getSignalHoverChanged() { return this->signalHoverChanged; } private: sigc::signal signalClose; sigc::signal signalHoverChanged; uint64_t notificationId; bool autoClosePaused = false; int autoCloseRemainingMs = 0; std::chrono::steady_clock::time_point autoCloseDeadline; sigc::connection autoCloseConnection; void ensure_notification_css_loaded(); void start_auto_close_timeout(int timeoutMs); void pause_auto_close(); void resume_auto_close(); protected: bool getAutoClosePaused() const { return this->autoClosePaused; } int getAutoCloseRemainingMs() const { return this->autoCloseRemainingMs; } std::chrono::steady_clock::time_point getAutoCloseDeadline() const { return this->autoCloseDeadline; } };