refactor notifications

This commit is contained in:
2026-02-01 16:10:42 +01:00
parent 17aef717b7
commit 178a4451d4
18 changed files with 449 additions and 236 deletions
@@ -0,0 +1,51 @@
#include "widgets/notification/baseNotification.hpp"
#include <filesystem>
#include <string>
#include "helpers/system.hpp"
#include "gdkmm/monitor.h"
#include "gtk4-layer-shell.h"
#include "gtkmm/cssprovider.h"
BaseNotification::BaseNotification(std::shared_ptr<Gdk::Monitor> monitor) {
ensure_notification_css_loaded();
set_default_size(300, 100);
gtk_layer_init_for_window(gobj());
gtk_layer_set_monitor(gobj(), monitor->gobj());
gtk_layer_set_layer(gobj(), GTK_LAYER_SHELL_LAYER_OVERLAY);
gtk_layer_set_anchor(gobj(), GTK_LAYER_SHELL_EDGE_TOP, TRUE);
gtk_layer_set_anchor(gobj(), GTK_LAYER_SHELL_EDGE_RIGHT, TRUE);
gtk_layer_set_margin(gobj(), GTK_LAYER_SHELL_EDGE_TOP, 2);
gtk_layer_set_margin(gobj(), GTK_LAYER_SHELL_EDGE_RIGHT, 2);
add_css_class("notification-popup");
}
void BaseNotification::ensure_notification_css_loaded() {
static bool loaded = false;
if (loaded) {
return;
}
auto css_provider = Gtk::CssProvider::create();
std::string css_path = "resources/notification.css";
const char *home = std::getenv("HOME");
if (home) {
std::filesystem::path config_path =
std::filesystem::path(home) / ".config/bar/notification.css";
if (std::filesystem::exists(config_path)) {
css_path = config_path.string();
}
}
const std::string css = SystemHelper::read_file_to_string(css_path);
css_provider->load_from_data(css);
Gtk::StyleContext::add_provider_for_display(
Gdk::Display::get_default(), css_provider,
GTK_STYLE_PROVIDER_PRIORITY_USER + 2);
loaded = true;
}