diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/input/mod.rs | 15 | ||||
| -rw-r--r-- | src/ipc/server.rs | 29 | ||||
| -rw-r--r-- | src/niri.rs | 5 |
3 files changed, 25 insertions, 24 deletions
diff --git a/src/input/mod.rs b/src/input/mod.rs index 38827415..91581642 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -16,7 +16,7 @@ use smithay::backend::input::{ TabletToolProximityEvent, TabletToolTipEvent, TabletToolTipState, TouchEvent, }; use smithay::backend::libinput::LibinputInputBackend; -use smithay::input::keyboard::{keysyms, FilterResult, Keysym, ModifiersState, XkbContextHandler}; +use smithay::input::keyboard::{keysyms, FilterResult, Keysym, ModifiersState}; use smithay::input::pointer::{ AxisFrame, ButtonEvent, CursorIcon, CursorImageStatus, Focus, GestureHoldBeginEvent, GestureHoldEndEvent, GesturePinchBeginEvent, GesturePinchEndEvent, GesturePinchUpdateEvent, @@ -540,17 +540,10 @@ impl State { } Action::SwitchLayout(action) => { let keyboard = &self.niri.seat.get_keyboard().unwrap(); - let new_idx = keyboard.with_xkb_state(self, |mut state| { - match action { - LayoutSwitchTarget::Next => state.cycle_next_layout(), - LayoutSwitchTarget::Prev => state.cycle_prev_layout(), - }; - state.active_layout().0 + keyboard.with_xkb_state(self, |mut state| match action { + LayoutSwitchTarget::Next => state.cycle_next_layout(), + LayoutSwitchTarget::Prev => state.cycle_prev_layout(), }); - - if let Some(server) = &self.niri.ipc_server { - server.keyboard_layout_switched(new_idx as u8); - } } Action::MoveColumnLeft => { self.niri.layout.move_left(); 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(); diff --git a/src/niri.rs b/src/niri.rs index b2e3f02d..e7e23789 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -543,6 +543,7 @@ impl State { self.niri.refresh_window_rules(); self.refresh_ipc_outputs(); self.ipc_refresh_layout(); + self.ipc_refresh_keyboard_layout_index(); #[cfg(feature = "xdp-gnome-screencast")] self.niri.refresh_mapped_cast_outputs(); @@ -911,10 +912,6 @@ impl State { keyboard.with_xkb_state(self, |mut context| { context.set_layout(new_layout); }); - - if let Some(server) = &self.niri.ipc_server { - server.keyboard_layout_switched(new_layout.0 as u8); - } } } |
