diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-09-04 20:54:11 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-09-04 20:54:11 +0300 |
| commit | 5460c792bd4bde8f03e68446b6bb053501e368bb (patch) | |
| tree | d5793fce2af2fcfba419d0dcb3dc119820e013e0 /src/ipc/server.rs | |
| parent | e5ecd27bbeb79f004bdadece9cdc5c29600ca709 (diff) | |
| download | niri-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.rs | 29 |
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(); |
