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

View file

@ -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 {

View file

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

View file

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