WIP show notification
This commit is contained in:
parent
17df83e611
commit
cc8da887e6
3 changed files with 35 additions and 19 deletions
|
|
@ -214,12 +214,12 @@ impl NotificationId {
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub struct Notification {
|
pub struct Notification {
|
||||||
id: NotificationId,
|
pub id: NotificationId,
|
||||||
app_name: String,
|
pub app_name: String,
|
||||||
app_icon: String, // decode?
|
pub app_icon: String, // decode?
|
||||||
summary: String,
|
pub summary: String,
|
||||||
body: String,
|
pub body: String,
|
||||||
actions: Vec<String>, // enum?
|
pub actions: Vec<String>, // enum?
|
||||||
hints: Hints,
|
hints: Hints,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,11 @@ use gtk4::{
|
||||||
subclass::prelude::*,
|
subclass::prelude::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use crate::application::PanelApp;
|
||||||
use crate::deref_cell::DerefCell;
|
use crate::deref_cell::DerefCell;
|
||||||
use crate::mpris::MprisControls;
|
use crate::mpris::MprisControls;
|
||||||
use crate::notification_popover::NotificationPopover;
|
use crate::notification_popover::NotificationPopover;
|
||||||
|
use crate::notifications::Notification;
|
||||||
use crate::popover_container::PopoverContainer;
|
use crate::popover_container::PopoverContainer;
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
|
|
@ -97,8 +99,18 @@ glib::wrapper! {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TimeButton {
|
impl TimeButton {
|
||||||
pub fn new() -> Self {
|
pub fn new(app: &PanelApp) -> Self {
|
||||||
glib::Object::new(&[]).unwrap()
|
let obj = glib::Object::new::<Self>(&[]).unwrap();
|
||||||
|
|
||||||
|
let notifications = app.notifications().clone();
|
||||||
|
app.notifications()
|
||||||
|
.connect_notification_recieved(clone!(@weak obj => move |id| {
|
||||||
|
if let Some(notification) = notifications.get(id) {
|
||||||
|
obj.handle_notification(¬ification);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
obj
|
||||||
}
|
}
|
||||||
|
|
||||||
fn inner(&self) -> &TimeButtonInner {
|
fn inner(&self) -> &TimeButtonInner {
|
||||||
|
|
@ -119,4 +131,12 @@ impl TimeButton {
|
||||||
.set_label(&time.format("%b %-d %-I:%M %p").to_string());
|
.set_label(&time.format("%b %-d %-I:%M %p").to_string());
|
||||||
// time.format("%B %-d %Y")
|
// time.format("%B %-d %Y")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn handle_notification(&self, notification: &Notification) {
|
||||||
|
println!("{:?}", notification);
|
||||||
|
|
||||||
|
let popover = &self.inner().notification_popover;
|
||||||
|
popover.set_body(¬ification.body);
|
||||||
|
popover.popup();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ fn button(text: &str) -> gtk4::Button {
|
||||||
pub struct PanelWindowInner {
|
pub struct PanelWindowInner {
|
||||||
size: Cell<Option<(i32, i32)>>,
|
size: Cell<Option<(i32, i32)>>,
|
||||||
monitor: DerefCell<gdk::Monitor>,
|
monitor: DerefCell<gdk::Monitor>,
|
||||||
|
box_: DerefCell<gtk4::CenterBox>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[glib::object_subclass]
|
#[glib::object_subclass]
|
||||||
|
|
@ -49,7 +50,6 @@ impl ObjectImpl for PanelWindowInner {
|
||||||
..append(&button("Workspaces"));
|
..append(&button("Workspaces"));
|
||||||
..append(&button("Applications"));
|
..append(&button("Applications"));
|
||||||
}));
|
}));
|
||||||
..set_center_widget(Some(&TimeButton::new()));
|
|
||||||
..set_end_widget(Some(&StatusArea::new()));
|
..set_end_widget(Some(&StatusArea::new()));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -58,6 +58,8 @@ impl ObjectImpl for PanelWindowInner {
|
||||||
..set_decorated(false);
|
..set_decorated(false);
|
||||||
..set_child(Some(&box_));
|
..set_child(Some(&box_));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.box_.set(box_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -130,17 +132,11 @@ impl PanelWindow {
|
||||||
obj.set_size_request(monitor.geometry().width, 0);
|
obj.set_size_request(monitor.geometry().width, 0);
|
||||||
obj.inner().monitor.set(monitor);
|
obj.inner().monitor.set(monitor);
|
||||||
|
|
||||||
app.add_window(&obj);
|
obj.inner()
|
||||||
|
.box_
|
||||||
|
.set_center_widget(Some(&TimeButton::new(app)));
|
||||||
|
|
||||||
let notifications = app.notifications().clone();
|
app.add_window(&obj);
|
||||||
app.notifications()
|
|
||||||
.connect_notification_recieved(clone!(@weak obj => move |id| {
|
|
||||||
let notification = notifications.get(id);
|
|
||||||
println!(
|
|
||||||
"{:?}",
|
|
||||||
notification
|
|
||||||
);
|
|
||||||
}));
|
|
||||||
|
|
||||||
obj
|
obj
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue