From d29c756c3c32ba3f7ee71f3348c7cbcbabacc3e2 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Thu, 27 Feb 2025 20:32:13 -0500 Subject: [PATCH] feat: tooltips for app-list, minimize, and applet buttons --- cosmic-app-list/src/app.rs | 148 +++++++++++++++++++----------- cosmic-applet-minimize/src/lib.rs | 37 +++----- cosmic-applet-power/src/lib.rs | 1 + cosmic-panel-button/src/lib.rs | 19 +++- 4 files changed, 127 insertions(+), 78 deletions(-) diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index 1be1d6e1..7d4c68fe 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -1417,19 +1417,30 @@ impl cosmic::Application for CosmicAppList { .iter() .rev() .map(|dock_item| { - dock_item.as_icon( - &self.core.applet, - self.rectangle_tracker.as_ref(), - self.popup.is_none(), - self.config.enable_drag_source, - self.gpus.as_deref(), - dock_item - .toplevels - .iter() - .any(|y| focused_item.contains(&y.0.foreign_toplevel)), - theme.cosmic().radius_xs(), - self.core.main_window_id().unwrap(), - ) + self.core + .applet + .applet_tooltip( + dock_item.as_icon( + &self.core.applet, + self.rectangle_tracker.as_ref(), + self.popup.is_none(), + self.config.enable_drag_source, + self.gpus.as_deref(), + dock_item + .toplevels + .iter() + .any(|y| focused_item.contains(&y.0.foreign_toplevel)), + theme.cosmic().radius_xs(), + self.core.main_window_id().unwrap(), + ), + dock_item + .desktop_info + .name(&self.locales) + .unwrap_or_default() + .to_string(), + self.popup.is_some(), + ) + .into() }) .collect(); @@ -1499,19 +1510,30 @@ impl cosmic::Application for CosmicAppList { .unwrap_or(self.active_list.len())] .iter() .map(|dock_item| { - dock_item.as_icon( - &self.core.applet, - self.rectangle_tracker.as_ref(), - self.popup.is_none(), - self.config.enable_drag_source, - self.gpus.as_deref(), - dock_item - .toplevels - .iter() - .any(|y| focused_item.contains(&y.0.foreign_toplevel)), - dot_radius, - self.core.main_window_id().unwrap(), - ) + self.core + .applet + .applet_tooltip( + dock_item.as_icon( + &self.core.applet, + self.rectangle_tracker.as_ref(), + self.popup.is_none(), + self.config.enable_drag_source, + self.gpus.as_deref(), + dock_item + .toplevels + .iter() + .any(|y| focused_item.contains(&y.0.foreign_toplevel)), + dot_radius, + self.core.main_window_id().unwrap(), + ), + dock_item + .desktop_info + .name(&self.locales) + .unwrap_or_default() + .to_string(), + self.popup.is_some(), + ) + .into() }) .collect(); @@ -1904,19 +1926,30 @@ impl cosmic::Application for CosmicAppList { .unwrap_or(self.active_list.len() - 1)..] .iter() .map(|dock_item| { - dock_item.as_icon( - &self.core.applet, - self.rectangle_tracker.as_ref(), - self.popup.is_none(), - self.config.enable_drag_source, - self.gpus.as_deref(), - dock_item - .toplevels - .iter() - .any(|y| focused_item.contains(&y.0.foreign_toplevel)), - dot_radius, - id, - ) + self.core + .applet + .applet_tooltip( + dock_item.as_icon( + &self.core.applet, + self.rectangle_tracker.as_ref(), + self.popup.is_none(), + self.config.enable_drag_source, + self.gpus.as_deref(), + dock_item + .toplevels + .iter() + .any(|y| focused_item.contains(&y.0.foreign_toplevel)), + dot_radius, + id, + ), + dock_item + .desktop_info + .name(&self.locales) + .unwrap_or_default() + .to_string(), + self.popup.is_some(), + ) + .into() }) .collect(); let content = match &self.core.applet.anchor { @@ -1991,19 +2024,30 @@ impl cosmic::Application for CosmicAppList { .iter() .rev() .map(|dock_item| { - dock_item.as_icon( - &self.core.applet, - self.rectangle_tracker.as_ref(), - self.popup.is_none(), - self.config.enable_drag_source, - self.gpus.as_deref(), - dock_item - .toplevels - .iter() - .any(|y| focused_item.contains(&y.0.foreign_toplevel)), - dot_radius, - id, - ) + self.core + .applet + .applet_tooltip( + dock_item.as_icon( + &self.core.applet, + self.rectangle_tracker.as_ref(), + self.popup.is_none(), + self.config.enable_drag_source, + self.gpus.as_deref(), + dock_item + .toplevels + .iter() + .any(|y| focused_item.contains(&y.0.foreign_toplevel)), + dot_radius, + id, + ), + dock_item + .desktop_info + .name(&self.locales) + .unwrap_or_default() + .to_string(), + self.popup.is_some(), + ) + .into() }) .collect(); let content = match &self.core.applet.anchor { diff --git a/cosmic-applet-minimize/src/lib.rs b/cosmic-applet-minimize/src/lib.rs index 8a9bf882..6bbb3c51 100644 --- a/cosmic-applet-minimize/src/lib.rs +++ b/cosmic-applet-minimize/src/lib.rs @@ -23,7 +23,7 @@ use cosmic::{ window::{self}, Length, Limits, Subscription, }, - surface_message::{SurfaceMessage, MessageWrapper}, + surface_message::{MessageWrapper, SurfaceMessage}, widget::{autosize::autosize, mouse_area}, Task, }; @@ -252,27 +252,20 @@ impl cosmic::Application for Minimize { let theme = self.core.system_theme().cosmic(); let space_xxs = theme.space_xxs(); let icon_buttons = self.apps[..max_icon_count].iter().map(|(info, data, img)| { - tooltip( - Element::from(crate::window_image::WindowImage::new( - img.clone(), - &data.icon, - width as f32, - Message::Activate(info.foreign_toplevel.clone()), - padding, - )), - text(data.name.clone()).shaping(text::Shaping::Advanced), - // tooltip::Position::FollowCursor, - // FIXME tooltip fails to appear when created as indicated in design - // maybe it should be a subsurface - match self.core.applet.anchor { - PanelAnchor::Left => tooltip::Position::Right, - PanelAnchor::Right => tooltip::Position::Left, - PanelAnchor::Top => tooltip::Position::Bottom, - PanelAnchor::Bottom => tooltip::Position::Top, - }, - ) - .snap_within_viewport(false) - .into() + self.core + .applet + .applet_tooltip( + Element::from(crate::window_image::WindowImage::new( + img.clone(), + &data.icon, + width as f32, + Message::Activate(info.foreign_toplevel.clone()), + padding, + )), + data.name.clone(), + self.overflow_popup.is_some(), + ) + .into() }); let overflow_btn = if max_icon_count < self.apps.len() { let icon = match self.core.applet.anchor { diff --git a/cosmic-applet-power/src/lib.rs b/cosmic-applet-power/src/lib.rs index f0faf66c..12a7897f 100644 --- a/cosmic-applet-power/src/lib.rs +++ b/cosmic-applet-power/src/lib.rs @@ -213,6 +213,7 @@ impl cosmic::Application for Power { .icon_button(&self.icon_name) .on_press_down(Message::TogglePopup), "power", + self.popup.is_some(), ) .into() } diff --git a/cosmic-panel-button/src/lib.rs b/cosmic-panel-button/src/lib.rs index ba58ec18..d670ecd6 100644 --- a/cosmic-panel-button/src/lib.rs +++ b/cosmic-panel-button/src/lib.rs @@ -135,8 +135,18 @@ impl cosmic::Application for Button { ) ) { - self.core.applet.icon_button_from_handle( - cosmic::widget::icon::from_name(self.desktop.icon.clone().unwrap()).handle(), + cosmic::Element::from( + self.core.applet.applet_tooltip( + self.core + .applet + .icon_button_from_handle( + cosmic::widget::icon::from_name(self.desktop.icon.clone().unwrap()) + .handle(), + ) + .on_press_down(Msg::Press), + self.desktop.name.clone(), + false, + ), ) } else { let content = row!( @@ -151,8 +161,9 @@ impl cosmic::Application for Button { cosmic::widget::button::custom(content) .padding([0, self.core.applet.suggested_padding(true)]) .class(cosmic::theme::Button::AppletIcon) - } - .on_press_down(Msg::Press), + .on_press_down(Msg::Press) + .into() + }, AUTOSIZE_MAIN_ID.clone(), ) .into()