aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/input/mod.rs15
-rw-r--r--src/ipc/server.rs29
-rw-r--r--src/niri.rs5
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);
- }
}
}