feat: tooltips for app-list, minimize, and applet buttons

This commit is contained in:
Ashley Wulber 2025-02-27 20:32:13 -05:00 committed by Ashley Wulber
parent 0de336d0d7
commit d29c756c3c
4 changed files with 127 additions and 78 deletions

View file

@ -1417,6 +1417,9 @@ impl cosmic::Application for CosmicAppList {
.iter() .iter()
.rev() .rev()
.map(|dock_item| { .map(|dock_item| {
self.core
.applet
.applet_tooltip(
dock_item.as_icon( dock_item.as_icon(
&self.core.applet, &self.core.applet,
self.rectangle_tracker.as_ref(), self.rectangle_tracker.as_ref(),
@ -1429,7 +1432,15 @@ impl cosmic::Application for CosmicAppList {
.any(|y| focused_item.contains(&y.0.foreign_toplevel)), .any(|y| focused_item.contains(&y.0.foreign_toplevel)),
theme.cosmic().radius_xs(), theme.cosmic().radius_xs(),
self.core.main_window_id().unwrap(), self.core.main_window_id().unwrap(),
),
dock_item
.desktop_info
.name(&self.locales)
.unwrap_or_default()
.to_string(),
self.popup.is_some(),
) )
.into()
}) })
.collect(); .collect();
@ -1499,6 +1510,9 @@ impl cosmic::Application for CosmicAppList {
.unwrap_or(self.active_list.len())] .unwrap_or(self.active_list.len())]
.iter() .iter()
.map(|dock_item| { .map(|dock_item| {
self.core
.applet
.applet_tooltip(
dock_item.as_icon( dock_item.as_icon(
&self.core.applet, &self.core.applet,
self.rectangle_tracker.as_ref(), self.rectangle_tracker.as_ref(),
@ -1511,7 +1525,15 @@ impl cosmic::Application for CosmicAppList {
.any(|y| focused_item.contains(&y.0.foreign_toplevel)), .any(|y| focused_item.contains(&y.0.foreign_toplevel)),
dot_radius, dot_radius,
self.core.main_window_id().unwrap(), self.core.main_window_id().unwrap(),
),
dock_item
.desktop_info
.name(&self.locales)
.unwrap_or_default()
.to_string(),
self.popup.is_some(),
) )
.into()
}) })
.collect(); .collect();
@ -1904,6 +1926,9 @@ impl cosmic::Application for CosmicAppList {
.unwrap_or(self.active_list.len() - 1)..] .unwrap_or(self.active_list.len() - 1)..]
.iter() .iter()
.map(|dock_item| { .map(|dock_item| {
self.core
.applet
.applet_tooltip(
dock_item.as_icon( dock_item.as_icon(
&self.core.applet, &self.core.applet,
self.rectangle_tracker.as_ref(), self.rectangle_tracker.as_ref(),
@ -1916,7 +1941,15 @@ impl cosmic::Application for CosmicAppList {
.any(|y| focused_item.contains(&y.0.foreign_toplevel)), .any(|y| focused_item.contains(&y.0.foreign_toplevel)),
dot_radius, dot_radius,
id, id,
),
dock_item
.desktop_info
.name(&self.locales)
.unwrap_or_default()
.to_string(),
self.popup.is_some(),
) )
.into()
}) })
.collect(); .collect();
let content = match &self.core.applet.anchor { let content = match &self.core.applet.anchor {
@ -1991,6 +2024,9 @@ impl cosmic::Application for CosmicAppList {
.iter() .iter()
.rev() .rev()
.map(|dock_item| { .map(|dock_item| {
self.core
.applet
.applet_tooltip(
dock_item.as_icon( dock_item.as_icon(
&self.core.applet, &self.core.applet,
self.rectangle_tracker.as_ref(), self.rectangle_tracker.as_ref(),
@ -2003,7 +2039,15 @@ impl cosmic::Application for CosmicAppList {
.any(|y| focused_item.contains(&y.0.foreign_toplevel)), .any(|y| focused_item.contains(&y.0.foreign_toplevel)),
dot_radius, dot_radius,
id, id,
),
dock_item
.desktop_info
.name(&self.locales)
.unwrap_or_default()
.to_string(),
self.popup.is_some(),
) )
.into()
}) })
.collect(); .collect();
let content = match &self.core.applet.anchor { let content = match &self.core.applet.anchor {

View file

@ -23,7 +23,7 @@ use cosmic::{
window::{self}, window::{self},
Length, Limits, Subscription, Length, Limits, Subscription,
}, },
surface_message::{SurfaceMessage, MessageWrapper}, surface_message::{MessageWrapper, SurfaceMessage},
widget::{autosize::autosize, mouse_area}, widget::{autosize::autosize, mouse_area},
Task, Task,
}; };
@ -252,7 +252,9 @@ impl cosmic::Application for Minimize {
let theme = self.core.system_theme().cosmic(); let theme = self.core.system_theme().cosmic();
let space_xxs = theme.space_xxs(); let space_xxs = theme.space_xxs();
let icon_buttons = self.apps[..max_icon_count].iter().map(|(info, data, img)| { let icon_buttons = self.apps[..max_icon_count].iter().map(|(info, data, img)| {
tooltip( self.core
.applet
.applet_tooltip(
Element::from(crate::window_image::WindowImage::new( Element::from(crate::window_image::WindowImage::new(
img.clone(), img.clone(),
&data.icon, &data.icon,
@ -260,18 +262,9 @@ impl cosmic::Application for Minimize {
Message::Activate(info.foreign_toplevel.clone()), Message::Activate(info.foreign_toplevel.clone()),
padding, padding,
)), )),
text(data.name.clone()).shaping(text::Shaping::Advanced), data.name.clone(),
// tooltip::Position::FollowCursor, self.overflow_popup.is_some(),
// 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() .into()
}); });
let overflow_btn = if max_icon_count < self.apps.len() { let overflow_btn = if max_icon_count < self.apps.len() {

View file

@ -213,6 +213,7 @@ impl cosmic::Application for Power {
.icon_button(&self.icon_name) .icon_button(&self.icon_name)
.on_press_down(Message::TogglePopup), .on_press_down(Message::TogglePopup),
"power", "power",
self.popup.is_some(),
) )
.into() .into()
} }

View file

@ -135,8 +135,18 @@ impl cosmic::Application for Button {
) )
) )
{ {
self.core.applet.icon_button_from_handle( cosmic::Element::from(
cosmic::widget::icon::from_name(self.desktop.icon.clone().unwrap()).handle(), 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 { } else {
let content = row!( let content = row!(
@ -151,8 +161,9 @@ impl cosmic::Application for Button {
cosmic::widget::button::custom(content) cosmic::widget::button::custom(content)
.padding([0, self.core.applet.suggested_padding(true)]) .padding([0, self.core.applet.suggested_padding(true)])
.class(cosmic::theme::Button::AppletIcon) .class(cosmic::theme::Button::AppletIcon)
} .on_press_down(Msg::Press)
.on_press_down(Msg::Press), .into()
},
AUTOSIZE_MAIN_ID.clone(), AUTOSIZE_MAIN_ID.clone(),
) )
.into() .into()