From 4ea58298242d3b9880244bf13e265ae9ddbca799 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Tue, 23 Dec 2025 01:06:16 +0900 Subject: [PATCH] fix sticky state on Lock Interaction --- wlx-overlay-s/src/assets/gui/edit.xml | 2 +- wlx-overlay-s/src/overlays/edit/lock.rs | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/wlx-overlay-s/src/assets/gui/edit.xml b/wlx-overlay-s/src/assets/gui/edit.xml index 27a44af..3a2da94 100644 --- a/wlx-overlay-s/src/assets/gui/edit.xml +++ b/wlx-overlay-s/src/assets/gui/edit.xml @@ -39,7 +39,7 @@
- + diff --git a/wlx-overlay-s/src/overlays/edit/lock.rs b/wlx-overlay-s/src/overlays/edit/lock.rs index 0825095..6be7fa2 100644 --- a/wlx-overlay-s/src/overlays/edit/lock.rs +++ b/wlx-overlay-s/src/overlays/edit/lock.rs @@ -1,7 +1,10 @@ +use std::rc::Rc; + use anyhow::Context; use glam::FloatExt; use wgui::{ animation::{Animation, AnimationEasing}, + components::button::ComponentButton, event::CallbackDataCommon, layout::WidgetID, parser::Fetchable, @@ -15,6 +18,7 @@ pub(super) struct InteractLockHandler { id: WidgetID, color: wgui::drawing::Color, interactable: bool, + button: Option>, } impl InteractLockHandler { @@ -27,10 +31,13 @@ impl InteractLockHandler { .get_as::(id) .context("Element with id=\"shadow\" must be a ")?; + let button = panel.parser_state.fetch_component_as("top_lock")?; + Ok(Self { id, color: shadow_rect.params.color, interactable: true, + button: Some(button), }) } @@ -42,6 +49,10 @@ impl InteractLockHandler { .get_as::(self.id) .unwrap(); // can only fail if set_up_rect has issues + if let Some(button) = self.button.as_ref() { + button.set_sticky_state(common, !interactable); + } + let globals = common.state.globals.get(); if interactable { set_anim_color(&mut rect, 0.0, self.color, globals.defaults.danger_color); @@ -60,6 +71,9 @@ impl InteractLockHandler { let rect_color = self.color; self.interactable = !self.interactable; + if let Some(button) = self.button.as_ref() { + button.set_sticky_state(common, !self.interactable); + } let anim = if self.interactable { Animation::new(