From ff4b39069c3caf621dd9299c42d83a8c41987393 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Sat, 13 Dec 2025 21:44:15 +0900 Subject: [PATCH] per-window option to disable grabbing --- wlx-overlay-s/src/assets/edit/disable-grab.svg | 1 + wlx-overlay-s/src/assets/gui/edit.xml | 1 + wlx-overlay-s/src/assets/lang/de.json | 1 + wlx-overlay-s/src/assets/lang/en.json | 1 + wlx-overlay-s/src/assets/lang/es.json | 1 + wlx-overlay-s/src/assets/lang/ja.json | 1 + wlx-overlay-s/src/assets/lang/pl.json | 1 + wlx-overlay-s/src/overlays/edit/mod.rs | 11 +++++++++++ wlx-overlay-s/src/overlays/keyboard/builder.rs | 10 +++++----- wlx-overlay-s/src/overlays/screen/mod.rs | 2 +- wlx-overlay-s/src/windowing/manager.rs | 4 ++-- 11 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 wlx-overlay-s/src/assets/edit/disable-grab.svg diff --git a/wlx-overlay-s/src/assets/edit/disable-grab.svg b/wlx-overlay-s/src/assets/edit/disable-grab.svg new file mode 100644 index 0000000..81ee4cd --- /dev/null +++ b/wlx-overlay-s/src/assets/edit/disable-grab.svg @@ -0,0 +1 @@ + diff --git a/wlx-overlay-s/src/assets/gui/edit.xml b/wlx-overlay-s/src/assets/gui/edit.xml index 9db83e1..8f97b13 100644 --- a/wlx-overlay-s/src/assets/gui/edit.xml +++ b/wlx-overlay-s/src/assets/gui/edit.xml @@ -42,6 +42,7 @@
+ diff --git a/wlx-overlay-s/src/assets/lang/de.json b/wlx-overlay-s/src/assets/lang/de.json index 5db99d3..eb947e6 100644 --- a/wlx-overlay-s/src/assets/lang/de.json +++ b/wlx-overlay-s/src/assets/lang/de.json @@ -24,6 +24,7 @@ "HINT_POINT_WINDOW": "Zeigen Sie auf ein Fenster, um seine Parameter zu ändern.\nWenn Sie fertig sind, verlassen Sie den Bearbeitungsmodus mit der Schaltfläche auf der rechten Seite.", "LEAVE": "Bearbeitungsmodus verlassen", "LOCK_INTERACTION": "Interaktion sperren", + "DISABLE_GRAB": "Greifen deaktivieren", "MOVE_PRESS_AND_DRAG": "Verschieben (drücken & ziehen)", "OPACITY": "Undurchsichtigkeit", "POSITIONING": "Positionierung", diff --git a/wlx-overlay-s/src/assets/lang/en.json b/wlx-overlay-s/src/assets/lang/en.json index d3fbdb2..cf2e77a 100644 --- a/wlx-overlay-s/src/assets/lang/en.json +++ b/wlx-overlay-s/src/assets/lang/en.json @@ -24,6 +24,7 @@ "HINT_POINT_WINDOW": "Point at a window to change its parameters.\nOnce done, leave edit mode using the button on the right.", "LEAVE": "Leave edit mode", "LOCK_INTERACTION": "Lock interaction", + "DISABLE_GRAB": "Disable grab", "MOVE_PRESS_AND_DRAG": "Move (press & drag)", "OPACITY": "Opacity", "POSITIONING": "Positioning", diff --git a/wlx-overlay-s/src/assets/lang/es.json b/wlx-overlay-s/src/assets/lang/es.json index e88f488..3efe90e 100644 --- a/wlx-overlay-s/src/assets/lang/es.json +++ b/wlx-overlay-s/src/assets/lang/es.json @@ -24,6 +24,7 @@ "HINT_POINT_WINDOW": "Pulsa sobre una ventana para cambiar sus parámetros.\nUna vez terminado, sal del modo de edición usando el botón de la derecha.", "LEAVE": "Salir del modo edición", "LOCK_INTERACTION": "Bloquear interacción", + "DISABLE_GRAB": "Desactivar agarre", "MOVE_PRESS_AND_DRAG": "Mover (presionar y arrastrar)", "OPACITY": "Opacidad", "POSITIONING": "Posicionamiento", diff --git a/wlx-overlay-s/src/assets/lang/ja.json b/wlx-overlay-s/src/assets/lang/ja.json index d69742a..eab02d9 100644 --- a/wlx-overlay-s/src/assets/lang/ja.json +++ b/wlx-overlay-s/src/assets/lang/ja.json @@ -24,6 +24,7 @@ "HINT_POINT_WINDOW": "ウィンドウをタップしてそのパラメータを変更します。\n完了したら、右側のボタンで編集モードを終了してください。", "LEAVE": "編集モードを終了", "LOCK_INTERACTION": "インタラクションをロック", + "DISABLE_GRAB": "グラブを無効化", "MOVE_PRESS_AND_DRAG": "移動(押してドラッグ)", "OPACITY": "不透明度", "POSITIONING": "位置調整", diff --git a/wlx-overlay-s/src/assets/lang/pl.json b/wlx-overlay-s/src/assets/lang/pl.json index 6248420..7221a11 100644 --- a/wlx-overlay-s/src/assets/lang/pl.json +++ b/wlx-overlay-s/src/assets/lang/pl.json @@ -24,6 +24,7 @@ "HINT_POINT_WINDOW": "Wskaż na okno, aby zmienić jego parametry.\nPo zakończeniu wyjdź z trybu edycji za pomocą przycisku po prawej stronie.", "LEAVE": "Wyjdź z trybu edycji", "LOCK_INTERACTION": "Zablokuj interakcję", + "DISABLE_GRAB": "Wyłącz chwytanie", "MOVE_PRESS_AND_DRAG": "Przesuń (naciśnij i przeciągnij)", "OPACITY": "Przezroczystość", "POSITIONING": "Pozycjonowanie", diff --git a/wlx-overlay-s/src/overlays/edit/mod.rs b/wlx-overlay-s/src/overlays/edit/mod.rs index 343b5f7..0186702 100644 --- a/wlx-overlay-s/src/overlays/edit/mod.rs +++ b/wlx-overlay-s/src/overlays/edit/mod.rs @@ -251,6 +251,17 @@ fn make_edit_panel(app: &mut AppState) -> anyhow::Result { .enqueue(TaskType::Overlay(OverlayTask::Modify(sel, task))); Ok(EventResult::Consumed) }), + "::EditModeToggleGrab" => Box::new(move |_common, _data, app, state| { + let sel = OverlaySelector::Id(*state.id.borrow()); + app.tasks.enqueue(TaskType::Overlay(OverlayTask::Modify( + sel, + Box::new(|_app, owc| { + let state = owc.active_state.as_mut().unwrap(); //want panic + state.grabbable = !state.grabbable; + }), + ))); + Ok(EventResult::Consumed) + }), "::EditModeTab" => { let tab_name = args.next().unwrap().to_owned(); Box::new(move |common, _data, _app, state| { diff --git a/wlx-overlay-s/src/overlays/keyboard/builder.rs b/wlx-overlay-s/src/overlays/keyboard/builder.rs index 49d9e65..49d2e02 100644 --- a/wlx-overlay-s/src/overlays/keyboard/builder.rs +++ b/wlx-overlay-s/src/overlays/keyboard/builder.rs @@ -1,6 +1,6 @@ use std::{collections::HashMap, rc::Rc}; -use glam::{vec2, vec3, Affine3A, FloatExt, Mat4, Quat, Vec2, Vec3}; +use glam::{Affine3A, FloatExt, Mat4, Quat, Vec2, Vec3, vec2, vec3}; use wgui::{ animation::{Animation, AnimationEasing}, assets::AssetPath, @@ -11,10 +11,10 @@ use wgui::{ renderer_vk::util, taffy::{self, prelude::length}, widget::{ + EventResult, div::WidgetDiv, rectangle::{WidgetRectangle, WidgetRectangleParams}, util::WLength, - EventResult, }, }; use wlx_common::windowing::{OverlayWindowState, Positioning}; @@ -22,14 +22,14 @@ use wlx_common::windowing::{OverlayWindowState, Positioning}; use crate::{ gui::panel::GuiPanel, state::AppState, - subsystem::hid::{XkbKeymap, ALT, CTRL, META, SHIFT, SUPER}, + subsystem::hid::{ALT, CTRL, META, SHIFT, SUPER, XkbKeymap}, windowing::window::OverlayWindowConfig, }; use super::{ - handle_press, handle_release, + KEYBOARD_NAME, KeyButtonData, KeyState, KeyboardBackend, KeyboardState, handle_press, + handle_release, layout::{self, AltModifier, KeyCapType}, - KeyButtonData, KeyState, KeyboardBackend, KeyboardState, KEYBOARD_NAME, }; const BACKGROUND_PADDING: f32 = 16.0; diff --git a/wlx-overlay-s/src/overlays/screen/mod.rs b/wlx-overlay-s/src/overlays/screen/mod.rs index 3360d4b..8295761 100644 --- a/wlx-overlay-s/src/overlays/screen/mod.rs +++ b/wlx-overlay-s/src/overlays/screen/mod.rs @@ -1,6 +1,6 @@ use std::{f32::consts::PI, sync::Arc}; -use glam::{vec3, Affine3A, Quat, Vec3}; +use glam::{Affine3A, Quat, Vec3, vec3}; use wlx_capture::frame::Transform; use wlx_common::windowing::{OverlayWindowState, Positioning}; diff --git a/wlx-overlay-s/src/windowing/manager.rs b/wlx-overlay-s/src/windowing/manager.rs index f8b69ff..0eca306 100644 --- a/wlx-overlay-s/src/windowing/manager.rs +++ b/wlx-overlay-s/src/windowing/manager.rs @@ -291,7 +291,7 @@ impl OverlayWindowManager { let Some(o) = self.get_by_id(*oid) else { break; }; - let Some(mut state) = o.config.active_state.clone() else { + let Some(state) = o.config.active_state.clone() else { break; }; app.session @@ -489,7 +489,7 @@ impl OverlayWindowManager { if !global { for (i, set) in self.sets.iter_mut().enumerate() { - let Some(mut state) = set.inactive_overlays.arc_rm(&name) else { + let Some(state) = set.inactive_overlays.arc_rm(&name) else { continue; }; if self.current_set == Some(i) {