refactor notifications
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user