aboutsummaryrefslogtreecommitdiff
path: root/src/ipc/server.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-09-04 20:54:11 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-09-04 20:54:11 +0300
commit5460c792bd4bde8f03e68446b6bb053501e368bb (patch)
treed5793fce2af2fcfba419d0dcb3dc119820e013e0 /src/ipc/server.rs
parente5ecd27bbeb79f004bdadece9cdc5c29600ca709 (diff)
downloadniri-5460c792bd4bde8f03e68446b6bb053501e368bb.tar.gz
niri-5460c792bd4bde8f03e68446b6bb053501e368bb.tar.bz2
niri-5460c792bd4bde8f03e68446b6bb053501e368bb.zip
Fix missing KeyboardLayoutSwitched event on XKB switch
Diffstat (limited to 'src/ipc/server.rs')
-rw-r--r--src/ipc/server.rs29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/ipc/server.rs b/src/ipc/server.rs
index aeb0fcf0..bdafee2e 100644
--- a/src/ipc/server.rs
+++ b/src/ipc/server.rs
@@ -116,15 +116,6 @@ impl IpcServer {
let _ = stream.disconnect.send_blocking(());
}
}
-
- pub fn keyboard_layout_switched(&self, new_idx: u8) {
- let mut state = self.event_stream_state.borrow_mut();
- let state = &mut state.keyboard_layouts;
-
- let event = Event::KeyboardLayoutSwitched { idx: new_idx };
- state.apply(event.clone());
- self.send_event(event);
- }
}
impl Drop for IpcServer {
@@ -413,6 +404,26 @@ impl State {
server.send_event(event);
}
+ pub fn ipc_refresh_keyboard_layout_index(&mut self) {
+ let keyboard = self.niri.seat.get_keyboard().unwrap();
+ let idx = keyboard.with_xkb_state(self, |context| context.active_layout().0 as u8);
+
+ let Some(server) = &self.niri.ipc_server else {
+ return;
+ };
+
+ let mut state = server.event_stream_state.borrow_mut();
+ let state = &mut state.keyboard_layouts;
+
+ if state.keyboard_layouts.as_ref().unwrap().current_idx == idx {
+ return;
+ }
+
+ let event = Event::KeyboardLayoutSwitched { idx };
+ state.apply(event.clone());
+ server.send_event(event);
+ }
+
pub fn ipc_refresh_layout(&mut self) {
self.ipc_refresh_workspaces();
self.ipc_refresh_windows();