fix bar doing out of date on keymap change

This commit is contained in:
galister
2026-01-08 02:57:21 +09:00
parent 43ccd439ee
commit 5f4ab341fe
4 changed files with 28 additions and 24 deletions

View File

@@ -96,6 +96,7 @@ pub enum OverlayTask {
ShowHide,
CleanupMirrors,
SettingsChanged,
KeyboardChanged,
Modify(OverlaySelector, Box<ModifyOverlayTask>),
Create(OverlaySelector, Box<CreateOverlayTask>),
ModifyPanel(ModifyPanelTask),

View File

@@ -33,7 +33,6 @@ mod windowing;
mod config_wayvr;
use std::{
os::unix::process::CommandExt,
path::PathBuf,
process::Command,
sync::atomic::{AtomicBool, AtomicUsize, Ordering},

View File

@@ -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(),
}
}
}

View File

@@ -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<T> OverlayWindowManager<T> {
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