diff --git a/wlx-overlay-s/src/backend/task.rs b/wlx-overlay-s/src/backend/task.rs index 183bbb8..3ea7bd1 100644 --- a/wlx-overlay-s/src/backend/task.rs +++ b/wlx-overlay-s/src/backend/task.rs @@ -96,6 +96,7 @@ pub enum OverlayTask { ShowHide, CleanupMirrors, SettingsChanged, + KeyboardChanged, Modify(OverlaySelector, Box), Create(OverlaySelector, Box), ModifyPanel(ModifyPanelTask), diff --git a/wlx-overlay-s/src/main.rs b/wlx-overlay-s/src/main.rs index 34b4654..e7e894e 100644 --- a/wlx-overlay-s/src/main.rs +++ b/wlx-overlay-s/src/main.rs @@ -33,7 +33,6 @@ mod windowing; mod config_wayvr; use std::{ - os::unix::process::CommandExt, path::PathBuf, process::Command, sync::atomic::{AtomicBool, AtomicUsize, Ordering}, diff --git a/wlx-overlay-s/src/overlays/keyboard/mod.rs b/wlx-overlay-s/src/overlays/keyboard/mod.rs index fd5acb3..5975d1b 100644 --- a/wlx-overlay-s/src/overlays/keyboard/mod.rs +++ b/wlx-overlay-s/src/overlays/keyboard/mod.rs @@ -7,7 +7,10 @@ use std::{ use crate::{ KEYMAP_CHANGE, - backend::input::{HoverResult, PointerHit}, + backend::{ + input::{HoverResult, PointerHit}, + task::{OverlayTask, TaskType}, + }, gui::panel::{GuiPanel, overlay_list::OverlayList, set_list::SetList}, overlays::keyboard::{builder::create_keyboard_panel, layout::AltModifier}, state::AppState, @@ -170,6 +173,8 @@ impl KeyboardBackend { let new_key = self.add_new_keymap(Some(keymap), app)?; self.internal_switch_keymap(new_key); } + app.tasks + .enqueue(TaskType::Overlay(OverlayTask::KeyboardChanged)); Ok(true) } @@ -329,8 +334,8 @@ impl KeyboardState { modifiers: self.modifiers, alt_modifier: self.alt_modifier, processes: take_and_leave_default!(&mut self.processes), - overlay_list: take_and_leave_default!(&mut self.overlay_list), - set_list: take_and_leave_default!(&mut self.set_list), + overlay_list: OverlayList::default(), + set_list: SetList::default(), } } } diff --git a/wlx-overlay-s/src/windowing/manager.rs b/wlx-overlay-s/src/windowing/manager.rs index 10802a9..c131996 100644 --- a/wlx-overlay-s/src/windowing/manager.rs +++ b/wlx-overlay-s/src/windowing/manager.rs @@ -235,16 +235,7 @@ where } OverlayTask::AddSet => { self.sets.push(OverlayWindowSet::default()); - let len = self.sets.len(); - for id in [self.watch_id, self.keyboard_id] { - if let Some(o) = self.mut_by_id(id) { - let _ = o - .config - .backend - .notify(app, OverlayEventData::NumSetsChanged(len)) - .log_err("Could not notify NumSetsChanged"); - } - } + self.sets_changed(app); } OverlayTask::DeleteActiveSet => { let Some(set) = self.current_set else { @@ -273,16 +264,7 @@ where self.switch_to_set(app, None, false); self.sets.remove(set); - let len = self.sets.len(); - for id in [self.watch_id, self.keyboard_id] { - if let Some(o) = self.mut_by_id(id) { - let _ = o - .config - .backend - .notify(app, OverlayEventData::NumSetsChanged(len)) - .log_err("Could not notify NumSetsChanged"); - } - } + self.sets_changed(app); } OverlayTask::SettingsChanged => { for o in self.overlays.values_mut() { @@ -293,6 +275,10 @@ where .log_err("Could not notify SettingsChanged"); } } + OverlayTask::KeyboardChanged => { + self.overlays_changed(app)?; + self.sets_changed(app); + } OverlayTask::CleanupMirrors => { let mut ids_to_remove = vec![]; for (oid, o) in &self.overlays { @@ -881,6 +867,19 @@ impl OverlayWindowManager { Ok(()) } + fn sets_changed(&mut self, app: &mut AppState) { + let len = self.sets.len(); + for id in [self.watch_id, self.keyboard_id] { + if let Some(o) = self.mut_by_id(id) { + let _ = o + .config + .backend + .notify(app, OverlayEventData::NumSetsChanged(len)) + .log_err("Could not notify NumSetsChanged"); + } + } + } + pub fn devices_changed(&mut self, app: &mut AppState) -> anyhow::Result<()> { if let Some(watch) = self.mut_by_id(self.watch_id) { let _ = watch