feat(app-list): middle click app button to launch new window
This commit is contained in:
parent
1475f8f32b
commit
3e80dcdca8
1 changed files with 25 additions and 13 deletions
|
|
@ -257,18 +257,7 @@ impl DockItem {
|
||||||
mouse_area(
|
mouse_area(
|
||||||
icon_button
|
icon_button
|
||||||
.on_press_maybe(if toplevels.is_empty() {
|
.on_press_maybe(if toplevels.is_empty() {
|
||||||
let gpu_idx = gpus.map(|gpus| {
|
launch_on_preferred_gpu(desktop_info, 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))
|
|
||||||
} else if toplevels.len() == 1 {
|
} else if toplevels.len() == 1 {
|
||||||
toplevels.first().map(|t| Message::Toggle(t.0.clone()))
|
toplevels.first().map(|t| Message::Toggle(t.0.clone()))
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -277,7 +266,11 @@ impl DockItem {
|
||||||
.width(Length::Shrink)
|
.width(Length::Shrink)
|
||||||
.height(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_drag(|_| Message::StartDrag(desktop_info.id.clone()))
|
||||||
.on_cancelled(Message::DragFinished)
|
.on_cancelled(Message::DragFinished)
|
||||||
|
|
@ -1579,3 +1572,22 @@ impl CosmicAppList {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn launch_on_preferred_gpu(
|
||||||
|
desktop_info: &DesktopEntryData,
|
||||||
|
gpus: Option<&[Gpu]>,
|
||||||
|
) -> Option<Message> {
|
||||||
|
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))
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue