1
0
Fork 0
mirror of https://github.com/Zedfrigg/ironbar.git synced 2025-08-17 06:41:03 +02:00

refactor(tray): switch over to libdbusmenu-gtk3

Also adds tooltips
This commit is contained in:
Jake Stanger 2024-11-16 17:19:49 +00:00
parent ff3f541183
commit 30de23dc64
No known key found for this signature in database
GPG key ID: C51FC8F9CB0BEA61
10 changed files with 76 additions and 447 deletions

View file

@ -1,10 +1,8 @@
mod diff;
mod icon;
mod interface;
use crate::clients::tray;
use crate::config::CommonConfig;
use crate::modules::tray::diff::get_diffs;
use crate::modules::{Module, ModuleInfo, ModuleParts, ModuleUpdateEvent, WidgetContext};
use crate::{glib_recv, lock, module_impl, send_async, spawn};
use color_eyre::{Report, Result};
@ -124,7 +122,9 @@ impl Module<MenuBar> for TrayModule {
// send tray commands
spawn(async move {
while let Some(cmd) = rx.recv().await {
client.activate(cmd).await?;
if let Err(err) = client.activate(cmd).await {
error!("{err:?}");
};
}
Ok::<_, Report>(())
@ -158,7 +158,7 @@ impl Module<MenuBar> for TrayModule {
// listen for UI updates
glib_recv!(context.subscribe(), update =>
on_update(update, &container, &mut menus, &icon_theme, self.icon_size, self.prefer_theme_icons, &context.controller_tx)
on_update(update, &container, &mut menus, &icon_theme, self.icon_size, self.prefer_theme_icons)
);
};
@ -178,13 +178,12 @@ fn on_update(
icon_theme: &IconTheme,
icon_size: u32,
prefer_icons: bool,
tx: &mpsc::Sender<ActivateRequest>,
) {
match update {
Event::Add(address, item) => {
debug!("Received new tray item at '{address}': {item:?}");
let mut menu_item = TrayMenu::new(tx.clone(), address.clone(), *item);
let mut menu_item = TrayMenu::new(*item);
container.add(&menu_item.widget);
if let Ok(image) = icon::get_image(&menu_item, icon_theme, icon_size, prefer_icons) {
@ -230,17 +229,14 @@ fn on_update(
label_widget.set_label(&title.unwrap_or_default());
}
}
// UpdateEvent::Tooltip(_tooltip) => {
// warn!("received unimplemented NewAttentionIcon event");
// }
UpdateEvent::Menu(menu) => {
debug!("received new menu for '{}'", address);
let diffs = get_diffs(menu_item.state(), &menu.submenus);
menu_item.apply_diffs(diffs);
menu_item.set_state(menu.submenus);
UpdateEvent::Tooltip(tooltip) => {
menu_item.set_tooltip(tooltip);
}
UpdateEvent::MenuConnect(menu) => {
let menu = system_tray::gtk_menu::Menu::new(&address, &menu);
menu_item.set_menu_widget(menu);
}
UpdateEvent::Menu(_) | UpdateEvent::MenuDiff(_) => {}
}
}
Event::Remove(address) => {