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

View File

@@ -35,7 +35,7 @@ All overlays are listed on bottom row.
<template name="Overlay"> <template name="Overlay">
<Button macro="button_style" id="overlay_${idx}" <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" align_items="center"
height="40"> height="40">
<sprite id="overlay_${idx}_sprite" src_builtin="${src}" width="32" height="32" /> <sprite id="overlay_${idx}_sprite" src_builtin="${src}" width="32" height="32" />

View File

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

View File

@@ -307,38 +307,13 @@ pub(super) fn setup_custom_button<S: 'static>(
return; 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, _| { Box::new(move |_common, data, app, _| {
if !test_button(data) || !test_duration(&button, app) { if !test_button(data) || !test_duration(&button, app) {
return Ok(EventResult::Pass); return Ok(EventResult::Pass);
} }
app.tasks app.tasks
.enqueue(TaskType::Overlay(OverlayTask::SoftToggleOverlay( .enqueue(TaskType::Overlay(OverlayTask::ToggleOverlay(
OverlaySelector::Name(arg.clone()), OverlaySelector::Name(arg.clone()),
))); )));
Ok(EventResult::Consumed) Ok(EventResult::Consumed)

View File

@@ -111,35 +111,6 @@ pub fn create_watch(app: &mut AppState) -> anyhow::Result<OverlayWindowConfig> {
Ok(EventResult::Consumed) Ok(EventResult::Consumed)
}), }),
"::EditModeOverlayToggle" => { "::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 arg = args.next().unwrap_or_default();
let Ok(idx) = arg.parse::<usize>() else { let Ok(idx) = arg.parse::<usize>() else {
log::error!("{command} has invalid argument: \"{arg}\""); log::error!("{command} has invalid argument: \"{arg}\"");
@@ -156,7 +127,7 @@ pub fn create_watch(app: &mut AppState) -> anyhow::Result<OverlayWindowConfig> {
}; };
app.tasks app.tasks
.enqueue(TaskType::Overlay(OverlayTask::SoftToggleOverlay( .enqueue(TaskType::Overlay(OverlayTask::ToggleOverlay(
OverlaySelector::Id(overlay.id), OverlaySelector::Id(overlay.id),
))); )));
Ok(EventResult::Consumed) Ok(EventResult::Consumed)

View File

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