fix bar doing out of date on keymap change
This commit is contained in:
@@ -96,6 +96,7 @@ pub enum OverlayTask {
|
|||||||
ShowHide,
|
ShowHide,
|
||||||
CleanupMirrors,
|
CleanupMirrors,
|
||||||
SettingsChanged,
|
SettingsChanged,
|
||||||
|
KeyboardChanged,
|
||||||
Modify(OverlaySelector, Box<ModifyOverlayTask>),
|
Modify(OverlaySelector, Box<ModifyOverlayTask>),
|
||||||
Create(OverlaySelector, Box<CreateOverlayTask>),
|
Create(OverlaySelector, Box<CreateOverlayTask>),
|
||||||
ModifyPanel(ModifyPanelTask),
|
ModifyPanel(ModifyPanelTask),
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ mod windowing;
|
|||||||
mod config_wayvr;
|
mod config_wayvr;
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
os::unix::process::CommandExt,
|
|
||||||
path::PathBuf,
|
path::PathBuf,
|
||||||
process::Command,
|
process::Command,
|
||||||
sync::atomic::{AtomicBool, AtomicUsize, Ordering},
|
sync::atomic::{AtomicBool, AtomicUsize, Ordering},
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ use std::{
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
KEYMAP_CHANGE,
|
KEYMAP_CHANGE,
|
||||||
backend::input::{HoverResult, PointerHit},
|
backend::{
|
||||||
|
input::{HoverResult, PointerHit},
|
||||||
|
task::{OverlayTask, TaskType},
|
||||||
|
},
|
||||||
gui::panel::{GuiPanel, overlay_list::OverlayList, set_list::SetList},
|
gui::panel::{GuiPanel, overlay_list::OverlayList, set_list::SetList},
|
||||||
overlays::keyboard::{builder::create_keyboard_panel, layout::AltModifier},
|
overlays::keyboard::{builder::create_keyboard_panel, layout::AltModifier},
|
||||||
state::AppState,
|
state::AppState,
|
||||||
@@ -170,6 +173,8 @@ impl KeyboardBackend {
|
|||||||
let new_key = self.add_new_keymap(Some(keymap), app)?;
|
let new_key = self.add_new_keymap(Some(keymap), app)?;
|
||||||
self.internal_switch_keymap(new_key);
|
self.internal_switch_keymap(new_key);
|
||||||
}
|
}
|
||||||
|
app.tasks
|
||||||
|
.enqueue(TaskType::Overlay(OverlayTask::KeyboardChanged));
|
||||||
Ok(true)
|
Ok(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,8 +334,8 @@ impl KeyboardState {
|
|||||||
modifiers: self.modifiers,
|
modifiers: self.modifiers,
|
||||||
alt_modifier: self.alt_modifier,
|
alt_modifier: self.alt_modifier,
|
||||||
processes: take_and_leave_default!(&mut self.processes),
|
processes: take_and_leave_default!(&mut self.processes),
|
||||||
overlay_list: take_and_leave_default!(&mut self.overlay_list),
|
overlay_list: OverlayList::default(),
|
||||||
set_list: take_and_leave_default!(&mut self.set_list),
|
set_list: SetList::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -235,16 +235,7 @@ where
|
|||||||
}
|
}
|
||||||
OverlayTask::AddSet => {
|
OverlayTask::AddSet => {
|
||||||
self.sets.push(OverlayWindowSet::default());
|
self.sets.push(OverlayWindowSet::default());
|
||||||
let len = self.sets.len();
|
self.sets_changed(app);
|
||||||
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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
OverlayTask::DeleteActiveSet => {
|
OverlayTask::DeleteActiveSet => {
|
||||||
let Some(set) = self.current_set else {
|
let Some(set) = self.current_set else {
|
||||||
@@ -273,16 +264,7 @@ where
|
|||||||
|
|
||||||
self.switch_to_set(app, None, false);
|
self.switch_to_set(app, None, false);
|
||||||
self.sets.remove(set);
|
self.sets.remove(set);
|
||||||
let len = self.sets.len();
|
self.sets_changed(app);
|
||||||
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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
OverlayTask::SettingsChanged => {
|
OverlayTask::SettingsChanged => {
|
||||||
for o in self.overlays.values_mut() {
|
for o in self.overlays.values_mut() {
|
||||||
@@ -293,6 +275,10 @@ where
|
|||||||
.log_err("Could not notify SettingsChanged");
|
.log_err("Could not notify SettingsChanged");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
OverlayTask::KeyboardChanged => {
|
||||||
|
self.overlays_changed(app)?;
|
||||||
|
self.sets_changed(app);
|
||||||
|
}
|
||||||
OverlayTask::CleanupMirrors => {
|
OverlayTask::CleanupMirrors => {
|
||||||
let mut ids_to_remove = vec![];
|
let mut ids_to_remove = vec![];
|
||||||
for (oid, o) in &self.overlays {
|
for (oid, o) in &self.overlays {
|
||||||
@@ -881,6 +867,19 @@ impl<T> OverlayWindowManager<T> {
|
|||||||
Ok(())
|
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<()> {
|
pub fn devices_changed(&mut self, app: &mut AppState) -> anyhow::Result<()> {
|
||||||
if let Some(watch) = self.mut_by_id(self.watch_id) {
|
if let Some(watch) = self.mut_by_id(self.watch_id) {
|
||||||
let _ = watch
|
let _ = watch
|
||||||
|
|||||||
Reference in New Issue
Block a user