From 3e80dcdca8496b1fe35a704c548459e07bc9b937 Mon Sep 17 00:00:00 2001 From: Ryan Brue <56272643+ryanabx@users.noreply.github.com> Date: Thu, 4 Apr 2024 06:51:21 -0500 Subject: [PATCH] feat(app-list): middle click app button to launch new window --- cosmic-app-list/src/app.rs | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index 5a4e802d..6859fac9 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -257,18 +257,7 @@ impl DockItem { mouse_area( icon_button .on_press_maybe(if toplevels.is_empty() { - let gpu_idx = gpus.map(|gpus| { - if desktop_info.prefers_dgpu { - gpus.iter().position(|gpu| !gpu.default).unwrap_or(0) - } else { - gpus.iter().position(|gpu| gpu.default).unwrap_or(0) - } - }); - - desktop_info - .exec - .clone() - .map(|exec| Message::Exec(exec, gpu_idx)) + launch_on_preferred_gpu(desktop_info, gpus) } else if toplevels.len() == 1 { toplevels.first().map(|t| Message::Toggle(t.0.clone())) } else { @@ -277,7 +266,11 @@ impl DockItem { .width(Length::Shrink) .height(Length::Shrink), ) - .on_right_release(Message::Popup(desktop_info.id.clone())), + .on_right_release(Message::Popup(desktop_info.id.clone())) + .on_middle_release({ + launch_on_preferred_gpu(desktop_info, gpus) + .unwrap_or_else(|| Message::Popup(desktop_info.id.clone())) + }), ) .on_drag(|_| Message::StartDrag(desktop_info.id.clone())) .on_cancelled(Message::DragFinished) @@ -1579,3 +1572,22 @@ impl CosmicAppList { None } } + +fn launch_on_preferred_gpu( + desktop_info: &DesktopEntryData, + gpus: Option<&[Gpu]>, +) -> Option { + let Some(exec) = desktop_info.exec.clone() else { + return None; + }; + + let gpu_idx = gpus.map(|gpus| { + if desktop_info.prefers_dgpu { + gpus.iter().position(|gpu| !gpu.default).unwrap_or(0) + } else { + gpus.iter().position(|gpu| gpu.default).unwrap_or(0) + } + }); + + Some(Message::Exec(exec, gpu_idx)) +}