From 12e5749bda098ec534d4bf062cebe09ae6fc2c25 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Sun, 14 Dec 2025 21:29:23 +0900 Subject: [PATCH] set wayvr keymap --- wlx-overlay-s/src/overlays/keyboard/mod.rs | 18 +++++++++++++----- wlx-overlay-s/src/subsystem/hid/mod.rs | 2 +- wlx-overlay-s/src/subsystem/hid/wayland.rs | 6 +++--- wlx-overlay-s/src/subsystem/input.rs | 9 ++++----- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/wlx-overlay-s/src/overlays/keyboard/mod.rs b/wlx-overlay-s/src/overlays/keyboard/mod.rs index 518876b..99306d3 100644 --- a/wlx-overlay-s/src/overlays/keyboard/mod.rs +++ b/wlx-overlay-s/src/overlays/keyboard/mod.rs @@ -10,17 +10,16 @@ use crate::{ overlays::keyboard::{builder::create_keyboard_panel, layout::AltModifier}, state::AppState, subsystem::hid::{ - wayland::WlKeymapMonitor, KeyModifier, VirtualKey, WheelDelta, XkbKeymap, ALT, CTRL, META, - SHIFT, SUPER, + ALT, CTRL, KeyModifier, META, SHIFT, SUPER, VirtualKey, WheelDelta, XkbKeymap, + wayland::WlKeymapMonitor, }, windowing::{ backend::{FrameMeta, OverlayBackend, OverlayEventData, RenderResources, ShouldRender}, window::OverlayWindowConfig, }, }; -use dbus::message::MatchRule; -use glam::{vec3, Affine3A, Quat, Vec3}; -use slotmap::{new_key_type, SlotMap}; +use glam::{Affine3A, Quat, Vec3, vec3}; +use slotmap::{SlotMap, new_key_type}; use wgui::{ drawing, event::{InternalStateChangeEvent, MouseButton, MouseButtonIndex}, @@ -51,6 +50,10 @@ pub fn create_keyboard( processes: vec![], }; + if let Some(keymap) = keymap.as_ref() { + app.hid_provider.keymap_changed(keymap); + } + if !layout.auto_labels.unwrap_or(true) { keymap = None; } @@ -117,6 +120,10 @@ impl KeyboardBackend { } fn switch_keymap(&mut self, keymap: &XkbKeymap, app: &mut AppState) -> anyhow::Result { + if !self.layout.auto_labels.unwrap_or(true) { + return Ok(false); + } + let Some(layout_name) = keymap.inner.layouts().next() else { log::error!("XKB keymap without a layout!"); return Ok(false); @@ -161,6 +168,7 @@ impl OverlayBackend for KeyboardBackend { } fn should_render(&mut self, app: &mut AppState) -> anyhow::Result { if let Some(keymap) = self.wkm.check() { + app.hid_provider.keymap_changed(&keymap); if self.switch_keymap(&keymap, app)? { return Ok(match self.panel().should_render(app)? { ShouldRender::Should | ShouldRender::Can => ShouldRender::Should, diff --git a/wlx-overlay-s/src/subsystem/hid/mod.rs b/wlx-overlay-s/src/subsystem/hid/mod.rs index bee74cf..64f314e 100644 --- a/wlx-overlay-s/src/subsystem/hid/mod.rs +++ b/wlx-overlay-s/src/subsystem/hid/mod.rs @@ -1,5 +1,5 @@ use glam::Vec2; -use idmap::{idmap, IdMap}; +use idmap::{IdMap, idmap}; use idmap_derive::IntegerId; use input_linux::{ AbsoluteAxis, AbsoluteInfo, AbsoluteInfoSetup, EventKind, InputId, Key, RelativeAxis, diff --git a/wlx-overlay-s/src/subsystem/hid/wayland.rs b/wlx-overlay-s/src/subsystem/hid/wayland.rs index b754a80..ce56ec2 100644 --- a/wlx-overlay-s/src/subsystem/hid/wayland.rs +++ b/wlx-overlay-s/src/subsystem/hid/wayland.rs @@ -1,13 +1,13 @@ use anyhow::Context; -use wayland_client::{globals::GlobalList, EventQueue}; +use wayland_client::{EventQueue, globals::GlobalList}; use wlx_capture::wayland::wayland_client::{ - globals::{registry_queue_init, GlobalListContents}, + Connection, Dispatch, Proxy, QueueHandle, + globals::{GlobalListContents, registry_queue_init}, protocol::{ wl_keyboard::{self, WlKeyboard}, wl_registry::WlRegistry, wl_seat::{self, Capability, WlSeat}, }, - Connection, Dispatch, Proxy, QueueHandle, }; use xkbcommon::xkb; diff --git a/wlx-overlay-s/src/subsystem/input.rs b/wlx-overlay-s/src/subsystem/input.rs index e19a8ce..36e006b 100644 --- a/wlx-overlay-s/src/subsystem/input.rs +++ b/wlx-overlay-s/src/subsystem/input.rs @@ -1,9 +1,8 @@ use super::hid::{self, HidProvider, VirtualKey}; -use xkbcommon::xkb; - #[cfg(feature = "wayvr")] use crate::overlays::wayvr::WayVRData; +use crate::subsystem::hid::XkbKeymap; #[cfg(feature = "wayvr")] use std::{cell::RefCell, rc::Rc}; @@ -50,20 +49,20 @@ impl HidWrapper { } } - pub fn keymap_changed(&self, keymap: &xkb::Keymap) { + pub fn keymap_changed(&self, keymap: &XkbKeymap) { #[cfg(feature = "wayvr")] if let Some(wayvr) = &self.wayvr { let _ = wayvr .borrow_mut() .data .state - .set_keymap(keymap) + .set_keymap(&keymap.inner) .inspect_err(|e| log::error!("Could not set WayVR keymap: {e:?}")); } log::info!( "Keymap changed: {}", - keymap.layouts().next().unwrap_or("Unknown") + keymap.inner.layouts().next().unwrap_or("Unknown") ); }