::OverlayToggle to not reset overlay on show

This commit is contained in:
galister
2026-01-07 02:56:55 +09:00
parent 8160d20e73
commit f0a77f6da0
6 changed files with 14 additions and 68 deletions

View File

@@ -106,7 +106,6 @@
<rectangle macro="dropdown_title">
<label text="${name}" weight="bold" size="24" />
</rectangle>
<MenuButton translation="BAR.TOGGLE_HIDE" action="::OverlaySoftToggle ${name}" />
<MenuButton translation="BAR.TOGGLE_IN_SET" action="::OverlayToggle ${name}" />
<MenuButton translation="BAR.CLOSE" action="::WvrOverlayTermProcess ${name}" />
<MenuButton translation="BAR.FORCE_CLOSE" action="::WvrOverlayKillProcess ${name}" />
@@ -127,7 +126,6 @@
<rectangle macro="dropdown_title">
<label text="${name}" weight="bold" size="24" />
</rectangle>
<MenuButton translation="BAR.TOGGLE_HIDE" action="::OverlaySoftToggle ${name}" />
<MenuButton translation="BAR.TOGGLE_IN_SET" action="::OverlayToggle ${name}" />
</div>
</div>
@@ -142,7 +140,6 @@
<rectangle macro="dropdown_title">
<label text="${name}" weight="bold" size="24" />
</rectangle>
<MenuButton translation="BAR.TOGGLE_HIDE" action="::OverlaySoftToggle ${name}" />
<MenuButton translation="BAR.TOGGLE_IN_SET" action="::OverlayToggle ${name}" />
</div>
</div>
@@ -160,7 +157,6 @@
<rectangle macro="dropdown_title">
<label text="${name}" weight="bold" size="24" />
</rectangle>
<MenuButton translation="BAR.TOGGLE_HIDE" action="::OverlaySoftToggle ${name}" />
<MenuButton translation="BAR.TOGGLE_IN_SET" action="::OverlayToggle ${name}" />
<MenuButton translation="BAR.CLOSE" action="::OverlayDrop ${name}" />
</div>

View File

@@ -35,7 +35,7 @@ All overlays are listed on bottom row.
<template name="Overlay">
<Button macro="button_style" id="overlay_${idx}"
tooltip="WATCH.TOGGLE_FOR_CURRENT_SET" _press="::SingleSetOverlayToggle ${idx}" _long_release="::SingleSetOverlayReset ${idx}"
tooltip="WATCH.TOGGLE_FOR_CURRENT_SET" _press="::OverlayToggle ${idx}" _long_release="::SingleSetOverlayReset ${idx}"
align_items="center"
height="40">
<sprite id="overlay_${idx}_sprite" src_builtin="${src}" width="32" height="32" />

View File

@@ -82,7 +82,7 @@ pub enum OverlayTask {
AddSet,
ToggleSet(usize),
SwitchSet(Option<usize>),
SoftToggleOverlay(OverlaySelector),
ToggleOverlay(OverlaySelector),
DeleteActiveSet,
ToggleEditMode,
ToggleDashboard,

View File

@@ -307,38 +307,13 @@ pub(super) fn setup_custom_button<S: 'static>(
return;
};
Box::new(move |_common, data, app, _| {
if !test_button(data) || !test_duration(&button, app) {
return Ok(EventResult::Pass);
}
app.tasks.enqueue(TaskType::Overlay(OverlayTask::Modify(
OverlaySelector::Name(arg.clone()),
Box::new(move |app, owc| {
if owc.active_state.is_none() {
owc.activate(app);
} else {
owc.deactivate();
}
}),
)));
Ok(EventResult::Consumed)
})
}
"::OverlaySoftToggle" => {
let arg: Arc<str> = args.collect::<Vec<_>>().join(" ").into();
if arg.len() < 1 {
log::error!("{command} has missing arguments");
return;
};
Box::new(move |_common, data, app, _| {
if !test_button(data) || !test_duration(&button, app) {
return Ok(EventResult::Pass);
}
app.tasks
.enqueue(TaskType::Overlay(OverlayTask::SoftToggleOverlay(
.enqueue(TaskType::Overlay(OverlayTask::ToggleOverlay(
OverlaySelector::Name(arg.clone()),
)));
Ok(EventResult::Consumed)

View File

@@ -111,35 +111,6 @@ pub fn create_watch(app: &mut AppState) -> anyhow::Result<OverlayWindowConfig> {
Ok(EventResult::Consumed)
}),
"::EditModeOverlayToggle" => {
let arg = args.next().unwrap_or_default();
let Ok(idx) = arg.parse::<usize>() else {
log::error!("{command} has invalid argument: \"{arg}\"");
return;
};
Box::new(move |_common, data, app, state| {
if !test_button(data) || !test_duration(&button, app) {
return Ok(EventResult::Pass);
}
let Some(overlay) = state.overlay_metas.get(idx) else {
log::error!("No overlay at index {idx}.");
return Ok(EventResult::Consumed);
};
app.tasks.enqueue(TaskType::Overlay(OverlayTask::Modify(
OverlaySelector::Id(overlay.id),
Box::new(move |app, owc| {
if owc.active_state.is_none() {
owc.activate(app);
} else {
owc.deactivate();
}
}),
)));
Ok(EventResult::Consumed)
})
}
"::SingleSetOverlayToggle" => {
let arg = args.next().unwrap_or_default();
let Ok(idx) = arg.parse::<usize>() else {
log::error!("{command} has invalid argument: \"{arg}\"");
@@ -156,7 +127,7 @@ pub fn create_watch(app: &mut AppState) -> anyhow::Result<OverlayWindowConfig> {
};
app.tasks
.enqueue(TaskType::Overlay(OverlayTask::SoftToggleOverlay(
.enqueue(TaskType::Overlay(OverlayTask::ToggleOverlay(
OverlaySelector::Id(overlay.id),
)));
Ok(EventResult::Consumed)

View File

@@ -172,7 +172,7 @@ where
OverlayTask::SwitchSet(maybe_set) => {
self.switch_to_set(app, maybe_set, false);
}
OverlayTask::SoftToggleOverlay(sel) => {
OverlayTask::ToggleOverlay(sel) => {
let Some(id) = self.id_by_selector(&sel) else {
log::warn!("Overlay not found for task: {sel:?}");
return Ok(());
@@ -180,13 +180,17 @@ where
let o = &mut self.overlays[id];
if let Some(active_state) = o.config.active_state.take() {
log::debug!("{}: soft-toggle off", o.config.name);
log::debug!("{}: toggle off", o.config.name);
self.sets[self.restore_set]
.overlays
.insert(id, active_state);
} else if let Some(state) = self.sets[self.restore_set].overlays.remove(id) {
.inactive_overlays
.arc_set(o.config.name.clone(), active_state);
} else if let Some(state) = self.sets[self.restore_set]
.inactive_overlays
.arc_rm(&o.config.name)
{
let o = &mut self.overlays[id];
log::debug!("{}: soft-toggle on", o.config.name);
log::debug!("{}: toggle on", o.config.name);
o.config.dirty = true;
o.config.active_state = Some(state);
o.config.reset(app, false);