diff --git a/wlx-overlay-s/src/backend/task.rs b/wlx-overlay-s/src/backend/task.rs
index 245f032..333e66e 100644
--- a/wlx-overlay-s/src/backend/task.rs
+++ b/wlx-overlay-s/src/backend/task.rs
@@ -81,6 +81,7 @@ pub type CreateOverlayTask = dyn FnOnce(&mut AppState) -> Option
),
SoftToggleOverlay(OverlaySelector),
DeleteActiveSet,
ToggleEditMode,
diff --git a/wlx-overlay-s/src/gui/panel/button.rs b/wlx-overlay-s/src/gui/panel/button.rs
index ce090e3..3bccd52 100644
--- a/wlx-overlay-s/src/gui/panel/button.rs
+++ b/wlx-overlay-s/src/gui/panel/button.rs
@@ -226,6 +226,27 @@ pub(super) fn setup_custom_button(
Ok(EventResult::Consumed)
})
}
+ "::SetSwitch" => {
+ let arg = args.next().unwrap_or_default();
+ let Ok(set_idx) = arg.parse::() else {
+ log::error!("{command} has invalid argument: \"{arg}\"");
+ return;
+ };
+ let maybe_set = if set_idx < 0 {
+ None
+ } else {
+ Some(set_idx as usize)
+ };
+ Box::new(move |_common, data, app, _| {
+ if !test_button(data) || !test_duration(&button, app) {
+ return Ok(EventResult::Pass);
+ }
+
+ app.tasks
+ .enqueue(TaskType::Overlay(OverlayTask::SwitchSet(maybe_set)));
+ Ok(EventResult::Consumed)
+ })
+ }
"::OverlayToggle" => {
let Some(arg): Option> = args.next().map(Into::into) else {
log::error!("{command} has missing arguments");
diff --git a/wlx-overlay-s/src/windowing/manager.rs b/wlx-overlay-s/src/windowing/manager.rs
index de0fb47..d66a4ab 100644
--- a/wlx-overlay-s/src/windowing/manager.rs
+++ b/wlx-overlay-s/src/windowing/manager.rs
@@ -166,6 +166,9 @@ where
OverlayTask::ToggleSet(set) => {
self.switch_or_toggle_set(app, set);
}
+ OverlayTask::SwitchSet(maybe_set) => {
+ self.switch_to_set(app, maybe_set, false);
+ }
OverlayTask::SoftToggleOverlay(sel) => {
let Some(id) = self.id_by_selector(&sel) else {
log::warn!("Overlay not found for task: {sel:?}");