From 73e2f06b01f739dc1826612cb34ae259e3548a7c Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Sat, 20 Dec 2025 18:19:42 +0900 Subject: [PATCH] fix edit mode pointer leave --- wlx-overlay-s/src/backend/input.rs | 11 +++++++++-- wlx-overlay-s/src/windowing/window.rs | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/wlx-overlay-s/src/backend/input.rs b/wlx-overlay-s/src/backend/input.rs index fc7b524..4d78eaa 100644 --- a/wlx-overlay-s/src/backend/input.rs +++ b/wlx-overlay-s/src/backend/input.rs @@ -364,8 +364,11 @@ where } log::debug!("{} on_left (focus changed)", old_hovered.config.name); old_hovered.config.backend.on_left(app, idx); + old_hovered.hover_pointers[idx] = false; + if !old_hovered.hover_pointers.iter().any(|x| *x) { + overlays.edit_overlay(hovered_id, false, app); + } } - overlays.edit_overlay(hovered_id, false, app); } overlays.edit_overlay(hit.overlay, true, app); @@ -377,6 +380,7 @@ where }; pointer = &mut app.input_state.pointers[idx]; pointer.interaction.hovered_id = Some(hit.overlay); + hovered.hover_pointers[idx] = true; if let Some(primary_pointer) = hovered.primary_pointer { if hit.pointer <= primary_pointer { @@ -446,8 +450,11 @@ fn handle_no_hit( if let Some(hovered) = overlays.mut_by_id(hovered_id) { log::debug!("{} on_left (no hit)", hovered.config.name); hovered.config.backend.on_left(app, pointer_idx); + hovered.hover_pointers[pointer_idx] = false; + if !hovered.hover_pointers.iter().any(|x| *x) { + overlays.edit_overlay(hovered_id, false, app); + } } - overlays.edit_overlay(hovered_id, false, app); } // in case click released while not aiming at anything diff --git a/wlx-overlay-s/src/windowing/window.rs b/wlx-overlay-s/src/windowing/window.rs index afd8668..0ae58c5 100644 --- a/wlx-overlay-s/src/windowing/window.rs +++ b/wlx-overlay-s/src/windowing/window.rs @@ -17,6 +17,7 @@ pub struct OverlayWindowData { pub data: T, pub birthframe: usize, pub primary_pointer: Option, + pub hover_pointers: [bool; 2], } impl OverlayWindowData @@ -28,6 +29,7 @@ where data: T::default(), config, primary_pointer: None, + hover_pointers: [false, false], birthframe: 0, } }