Skip to content

Commit

Permalink
Avoid redundancy now that ToplevelInfo contains handle
Browse files Browse the repository at this point in the history
  • Loading branch information
ids1024 committed Feb 12, 2025
1 parent f81df52 commit 4afa029
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 115 deletions.
79 changes: 42 additions & 37 deletions cosmic-app-list/src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,11 +128,7 @@ struct DockItem {
// ID used internally in the applet. Each dock item
// have an unique id
id: u32,
toplevels: Vec<(
ExtForeignToplevelHandleV1,
ToplevelInfo,
Option<WaylandImage>,
)>,
toplevels: Vec<(ToplevelInfo, Option<WaylandImage>)>,
// Information found in the .desktop file
desktop_info: DesktopEntry<'static>,
// We must use this because the id in `DesktopEntry` is an estimation.
Expand Down Expand Up @@ -253,7 +249,9 @@ impl DockItem {
.on_press_maybe(if toplevels.is_empty() {
launch_on_preferred_gpu(desktop_info, gpus)
} else if toplevels.len() == 1 {
toplevels.first().map(|t| Message::Toggle(t.0.clone()))
toplevels
.first()
.map(|t| Message::Toggle(t.0.foreign_toplevel.clone()))
} else {
Some(Message::TopLevelListPopup((*id).into(), window_id))
})
Expand Down Expand Up @@ -726,9 +724,10 @@ impl cosmic::Application for CosmicAppList {
.chain(self.pinned_list.iter())
.find(|t| t.id == id)
{
for (ref handle, _, _) in &toplevel_group.toplevels {
for (info, _) in &toplevel_group.toplevels {
if let Some(tx) = self.wayland_sender.as_ref() {
let _ = tx.send(WaylandRequest::Screencopy(handle.clone()));
let _ =
tx.send(WaylandRequest::Screencopy(info.foreign_toplevel.clone()));
}
}

Expand Down Expand Up @@ -849,10 +848,10 @@ impl cosmic::Application for CosmicAppList {
.chain(self.pinned_list.iter())
.find(|t| t.desktop_info.id() == id)
{
for (handle, _, _) in &toplevel_group.toplevels {
for (info, _) in &toplevel_group.toplevels {
if let Some(tx) = self.wayland_sender.as_ref() {
let _ = tx.send(WaylandRequest::Toplevel(ToplevelRequest::Quit(
handle.clone(),
info.foreign_toplevel.clone(),
)));
}
}
Expand Down Expand Up @@ -1021,10 +1020,10 @@ impl cosmic::Application for CosmicAppList {
.iter_mut()
.chain(self.pinned_list.iter_mut())
{
if let Some((_, _, ref mut handle_img)) = x
if let Some((_, ref mut handle_img)) = x
.toplevels
.iter_mut()
.find(|(toplevel_handle, _, _)| toplevel_handle.clone() == handle)
.find(|(info, _)| info.foreign_toplevel == handle)
{
*handle_img = Some(img);
break 'img_update;
Expand Down Expand Up @@ -1055,7 +1054,7 @@ impl cosmic::Application for CosmicAppList {
.map(cosmic::app::message::app);
}
WaylandUpdate::Toplevel(event) => match event {
ToplevelUpdate::Add(handle, mut info) => {
ToplevelUpdate::Add(mut info) => {
let new_desktop_info =
load_desktop_entries_from_app_ids(&[&info.app_id], &self.locales)
.remove(0);
Expand All @@ -1068,7 +1067,7 @@ impl cosmic::Application for CosmicAppList {
desktop_info.id() == new_desktop_info.id()
})
{
t.toplevels.push((handle, info, None));
t.toplevels.push((info, None));
} else {
if info.app_id.is_empty() {
info.app_id = format!("Unknown Application {}", self.item_ctr);
Expand All @@ -1078,7 +1077,7 @@ impl cosmic::Application for CosmicAppList {
self.active_list.push(DockItem {
id: self.item_ctr,
original_app_id: info.app_id.clone(),
toplevels: vec![(handle, info, None)],
toplevels: vec![(info, None)],
desktop_info: new_desktop_info,
});
}
Expand All @@ -1089,11 +1088,12 @@ impl cosmic::Application for CosmicAppList {
.iter_mut()
.chain(self.pinned_list.iter_mut())
{
t.toplevels.retain(|(t_handle, _, _)| t_handle != &handle);
t.toplevels
.retain(|(info, _)| info.foreign_toplevel != handle);
}
self.active_list.retain(|t| !t.toplevels.is_empty());
}
ToplevelUpdate::Update(handle, info) => {
ToplevelUpdate::Update(info) => {
// TODO probably want to make sure it is removed
if info.app_id.is_empty() {
return Task::none();
Expand All @@ -1103,8 +1103,8 @@ impl cosmic::Application for CosmicAppList {
.iter_mut()
.chain(self.pinned_list.iter_mut())
{
for (t_handle, t_info, _) in &mut toplevel_list.toplevels {
if &handle == t_handle {
for (t_info, _) in &mut toplevel_list.toplevels {
if info.foreign_toplevel == t_info.foreign_toplevel {
*t_info = info;
break 'toplevel_loop;
}
Expand Down Expand Up @@ -1409,7 +1409,7 @@ impl cosmic::Application for CosmicAppList {
dock_item
.toplevels
.iter()
.any(|y| focused_item.contains(&y.0)),
.any(|y| focused_item.contains(&y.0.foreign_toplevel)),
theme.cosmic().radius_xs(),
self.core.main_window_id().unwrap(),
)
Expand Down Expand Up @@ -1452,7 +1452,9 @@ impl cosmic::Application for CosmicAppList {
false,
self.config.enable_drag_source,
self.gpus.as_deref(),
item.toplevels.iter().any(|y| focused_item.contains(&y.0)),
item.toplevels
.iter()
.any(|y| focused_item.contains(&y.0.foreign_toplevel)),
dot_radius,
self.core.main_window_id().unwrap(),
),
Expand Down Expand Up @@ -1489,7 +1491,7 @@ impl cosmic::Application for CosmicAppList {
dock_item
.toplevels
.iter()
.any(|y| focused_item.contains(&y.0)),
.any(|y| focused_item.contains(&y.0.foreign_toplevel)),
dot_radius,
self.core.main_window_id().unwrap(),
)
Expand Down Expand Up @@ -1729,16 +1731,17 @@ impl cosmic::Application for CosmicAppList {

if !toplevels.is_empty() {
let mut list_col = column![];
for (handle, info, _) in toplevels {
for (info, _) in toplevels {
let title = if info.title.len() > 34 {
format!("{:.32}...", &info.title)
} else {
info.title.clone()
};
list_col = list_col.push(
menu_button(text::body(title))
.on_press(Message::Activate(handle.clone())),
);
list_col =
list_col
.push(menu_button(text::body(title)).on_press(
Message::Activate(info.foreign_toplevel.clone()),
));
}
content = content.push(list_col);
content = content.push(divider::horizontal::light());
Expand Down Expand Up @@ -1819,17 +1822,18 @@ impl cosmic::Application for CosmicAppList {
PanelAnchor::Left | PanelAnchor::Right => {
let mut content =
column![].padding(8).align_x(Alignment::Center).spacing(8);
for (handle, info, img) in toplevels {
for (info, img) in toplevels {
let title = if info.title.len() > 18 {
format!("{:.16}...", &info.title)
} else {
info.title.clone()
};
content = content.push(toplevel_button(
img.clone(),
Message::Toggle(handle.clone()),
Message::Toggle(info.foreign_toplevel.clone()),
title,
self.currently_active_toplevel().contains(handle),
self.currently_active_toplevel()
.contains(&info.foreign_toplevel),
));
}
self.core
Expand All @@ -1840,17 +1844,18 @@ impl cosmic::Application for CosmicAppList {
}
PanelAnchor::Bottom | PanelAnchor::Top => {
let mut content = row![].padding(8).align_y(Alignment::Center).spacing(8);
for (handle, info, img) in toplevels {
for (info, img) in toplevels {
let title = if info.title.len() > 18 {
format!("{:.16}...", &info.title)
} else {
info.title.clone()
};
content = content.push(toplevel_button(
img.clone(),
Message::Toggle(handle.clone()),
Message::Toggle(info.foreign_toplevel.clone()),
title,
self.currently_active_toplevel().contains(handle),
self.currently_active_toplevel()
.contains(&info.foreign_toplevel),
));
}
self.core
Expand Down Expand Up @@ -1891,7 +1896,7 @@ impl cosmic::Application for CosmicAppList {
dock_item
.toplevels
.iter()
.any(|y| focused_item.contains(&y.0)),
.any(|y| focused_item.contains(&y.0.foreign_toplevel)),
dot_radius,
id,
)
Expand Down Expand Up @@ -1978,7 +1983,7 @@ impl cosmic::Application for CosmicAppList {
dock_item
.toplevels
.iter()
.any(|y| focused_item.contains(&y.0)),
.any(|y| focused_item.contains(&y.0.foreign_toplevel)),
dot_radius,
id,
)
Expand Down Expand Up @@ -2142,7 +2147,7 @@ impl CosmicAppList {
let mut focused_toplevels: Vec<ExtForeignToplevelHandleV1> = Vec::new();
let active_workspaces = self.active_workspaces.clone();
for toplevel_list in self.active_list.iter().chain(self.pinned_list.iter()) {
for (t_handle, t_info, _) in &toplevel_list.toplevels {
for (t_info, _) in &toplevel_list.toplevels {
if t_info.state.contains(&State::Activated)
&& active_workspaces
.iter()
Expand All @@ -2153,7 +2158,7 @@ impl CosmicAppList {
})
})
{
focused_toplevels.push(t_handle.clone());
focused_toplevels.push(t_info.foreign_toplevel.clone());
}
}
}
Expand Down
6 changes: 1 addition & 5 deletions cosmic-app-list/src/wayland_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -241,10 +241,7 @@ impl ToplevelInfoHandler for AppData {
if let Some(info) = self.toplevel_info_state.info(toplevel) {
let _ = self
.tx
.unbounded_send(WaylandUpdate::Toplevel(ToplevelUpdate::Add(
toplevel.clone(),
info.clone(),
)));
.unbounded_send(WaylandUpdate::Toplevel(ToplevelUpdate::Add(info.clone())));
}
}

Expand All @@ -258,7 +255,6 @@ impl ToplevelInfoHandler for AppData {
let _ = self
.tx
.unbounded_send(WaylandUpdate::Toplevel(ToplevelUpdate::Update(
toplevel.clone(),
info.clone(),
)));
}
Expand Down
4 changes: 2 additions & 2 deletions cosmic-app-list/src/wayland_subscription.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,8 @@ pub enum WaylandUpdate {

#[derive(Clone, Debug)]
pub enum ToplevelUpdate {
Add(ExtForeignToplevelHandleV1, ToplevelInfo),
Update(ExtForeignToplevelHandleV1, ToplevelInfo),
Add(ToplevelInfo),
Update(ToplevelInfo),
Remove(ExtForeignToplevelHandleV1),
}

Expand Down
Loading

0 comments on commit 4afa029

Please sign in to comment.