From 597ea62d179e51e45cbdd99085795567322ff2f7 Mon Sep 17 00:00:00 2001 From: Christian Meissl Date: Fri, 26 Jan 2024 15:13:54 +0100 Subject: input: update keyboard led state --- src/handlers/mod.rs | 16 +++++++++++++++- src/input.rs | 11 +++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index be8bab55..d44d9e8c 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -11,8 +11,9 @@ use std::thread; use smithay::backend::allocator::dmabuf::Dmabuf; use smithay::desktop::{PopupKind, PopupManager}; use smithay::input::pointer::{CursorIcon, CursorImageStatus, PointerHandle}; -use smithay::input::{Seat, SeatHandler, SeatState}; +use smithay::input::{keyboard, Seat, SeatHandler, SeatState}; use smithay::output::Output; +use smithay::reexports::input; use smithay::reexports::wayland_server::protocol::wl_data_source::WlDataSource; use smithay::reexports::wayland_server::protocol::wl_output::WlOutput; use smithay::reexports::wayland_server::protocol::wl_surface::WlSurface; @@ -73,6 +74,19 @@ impl SeatHandler for State { set_data_device_focus(dh, seat, client.clone()); set_primary_focus(dh, seat, client); } + + fn led_state_changed(&mut self, _seat: &Seat, led_state: keyboard::LedState) { + let keyboards = self + .niri + .devices + .iter() + .filter(|device| device.has_capability(input::DeviceCapability::Keyboard)) + .cloned(); + + for mut keyboard in keyboards { + keyboard.led_update(led_state.into()); + } + } } delegate_seat!(State); delegate_cursor_shape!(State); diff --git a/src/input.rs b/src/input.rs index 23ba6958..b9b91545 100644 --- a/src/input.rs +++ b/src/input.rs @@ -127,6 +127,17 @@ impl State { } } + if device.has_capability(input::DeviceCapability::Keyboard) { + if let Some(led_state) = self + .niri + .seat + .get_keyboard() + .map(|keyboard| keyboard.led_state()) + { + device.led_update(led_state.into()); + } + } + apply_libinput_settings(&self.niri.config.borrow().input, device); } InputEvent::DeviceRemoved { device } => { -- cgit