fix bar doing out of date on keymap change
This commit is contained in:
@@ -96,6 +96,7 @@ pub enum OverlayTask {
|
||||
ShowHide,
|
||||
CleanupMirrors,
|
||||
SettingsChanged,
|
||||
KeyboardChanged,
|
||||
Modify(OverlaySelector, Box<ModifyOverlayTask>),
|
||||
Create(OverlaySelector, Box<CreateOverlayTask>),
|
||||
ModifyPanel(ModifyPanelTask),
|
||||
|
||||
@@ -33,7 +33,6 @@ mod windowing;
|
||||
mod config_wayvr;
|
||||
|
||||
use std::{
|
||||
os::unix::process::CommandExt,
|
||||
path::PathBuf,
|
||||
process::Command,
|
||||
sync::atomic::{AtomicBool, AtomicUsize, Ordering},
|
||||
|
||||
@@ -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(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user