#pragma once #include #include #include #include #include "gdkmm/monitor.h" #include "gtkmm/window.h" #define DEFAULT_NOTIFICATION_TIMEOUT 7000 class BaseNotification : public Gtk::Window { public: BaseNotification( uint64_t notificationId, std::shared_ptr monitor); void pauseAutoClose(); void resumeAutoClose(); void startAutoClose(int timeoutMs); sigc::signal signal_close; sigc::signal signal_hover_changed; virtual ~BaseNotification() = default; uint64_t getNotificationId() const { return this->notificationId; } private: void ensure_notification_css_loaded(); void start_auto_close_timeout(int timeoutMs); void pause_auto_close(); void resume_auto_close(); // onClose signal can be added here if needed protected: uint64_t notificationId; bool autoClosePaused = false; int autoCloseRemainingMs = 0; std::chrono::steady_clock::time_point autoCloseDeadline; sigc::connection autoCloseConnection; };