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,19 +1417,30 @@ impl cosmic::Application for CosmicAppList {
.iter() .iter()
.rev() .rev()
.map(|dock_item| { .map(|dock_item| {
dock_item.as_icon( self.core
&self.core.applet, .applet
self.rectangle_tracker.as_ref(), .applet_tooltip(
self.popup.is_none(), dock_item.as_icon(
self.config.enable_drag_source, &self.core.applet,
self.gpus.as_deref(), self.rectangle_tracker.as_ref(),
dock_item self.popup.is_none(),
.toplevels self.config.enable_drag_source,
.iter() self.gpus.as_deref(),
.any(|y| focused_item.contains(&y.0.foreign_toplevel)), dock_item
theme.cosmic().radius_xs(), .toplevels
self.core.main_window_id().unwrap(), .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(); .collect();
@ -1499,19 +1510,30 @@ 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| {
dock_item.as_icon( self.core
&self.core.applet, .applet
self.rectangle_tracker.as_ref(), .applet_tooltip(
self.popup.is_none(), dock_item.as_icon(
self.config.enable_drag_source, &self.core.applet,
self.gpus.as_deref(), self.rectangle_tracker.as_ref(),
dock_item self.popup.is_none(),
.toplevels self.config.enable_drag_source,
.iter() self.gpus.as_deref(),
.any(|y| focused_item.contains(&y.0.foreign_toplevel)), dock_item
dot_radius, .toplevels
self.core.main_window_id().unwrap(), .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(); .collect();
@ -1904,19 +1926,30 @@ 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| {
dock_item.as_icon( self.core
&self.core.applet, .applet
self.rectangle_tracker.as_ref(), .applet_tooltip(
self.popup.is_none(), dock_item.as_icon(
self.config.enable_drag_source, &self.core.applet,
self.gpus.as_deref(), self.rectangle_tracker.as_ref(),
dock_item self.popup.is_none(),
.toplevels self.config.enable_drag_source,
.iter() self.gpus.as_deref(),
.any(|y| focused_item.contains(&y.0.foreign_toplevel)), dock_item
dot_radius, .toplevels
id, .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(); .collect();
let content = match &self.core.applet.anchor { let content = match &self.core.applet.anchor {
@ -1991,19 +2024,30 @@ impl cosmic::Application for CosmicAppList {
.iter() .iter()
.rev() .rev()
.map(|dock_item| { .map(|dock_item| {
dock_item.as_icon( self.core
&self.core.applet, .applet
self.rectangle_tracker.as_ref(), .applet_tooltip(
self.popup.is_none(), dock_item.as_icon(
self.config.enable_drag_source, &self.core.applet,
self.gpus.as_deref(), self.rectangle_tracker.as_ref(),
dock_item self.popup.is_none(),
.toplevels self.config.enable_drag_source,
.iter() self.gpus.as_deref(),
.any(|y| focused_item.contains(&y.0.foreign_toplevel)), dock_item
dot_radius, .toplevels
id, .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(); .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,27 +252,20 @@ 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
Element::from(crate::window_image::WindowImage::new( .applet
img.clone(), .applet_tooltip(
&data.icon, Element::from(crate::window_image::WindowImage::new(
width as f32, img.clone(),
Message::Activate(info.foreign_toplevel.clone()), &data.icon,
padding, width as f32,
)), Message::Activate(info.foreign_toplevel.clone()),
text(data.name.clone()).shaping(text::Shaping::Advanced), padding,
// tooltip::Position::FollowCursor, )),
// FIXME tooltip fails to appear when created as indicated in design data.name.clone(),
// maybe it should be a subsurface self.overflow_popup.is_some(),
match self.core.applet.anchor { )
PanelAnchor::Left => tooltip::Position::Right, .into()
PanelAnchor::Right => tooltip::Position::Left,
PanelAnchor::Top => tooltip::Position::Bottom,
PanelAnchor::Bottom => tooltip::Position::Top,
},
)
.snap_within_viewport(false)
.into()
}); });
let overflow_btn = if max_icon_count < self.apps.len() { let overflow_btn = if max_icon_count < self.apps.len() {
let icon = match self.core.applet.anchor { let icon = match self.core.applet.anchor {

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()