Improve wayland settings

This commit is contained in:
Federico Terzi 2021-02-15 15:34:24 +01:00
parent 3737eed034
commit cfadebc733
5 changed files with 16 additions and 6 deletions

View File

@ -15,7 +15,7 @@ use thiserror::Error;
use super::{ use super::{
ffi::{ ffi::{
is_keyboard, xkb_key_direction, xkb_keycode_t, xkb_keymap_key_repeats, xkb_state, is_keyboard_or_mouse, xkb_key_direction, xkb_keycode_t, xkb_keymap_key_repeats, xkb_state,
xkb_state_get_keymap, xkb_state_key_get_one_sym, xkb_state_key_get_utf8, xkb_state_new, xkb_state_get_keymap, xkb_state_key_get_one_sym, xkb_state_key_get_utf8, xkb_state_new,
xkb_state_unref, xkb_state_update_key, EV_KEY, xkb_state_unref, xkb_state_update_key, EV_KEY,
}, },
@ -59,7 +59,7 @@ impl Device {
.custom_flags(O_NONBLOCK | O_CLOEXEC | O_RDONLY) .custom_flags(O_NONBLOCK | O_CLOEXEC | O_RDONLY)
.open(&path)?; .open(&path)?;
if unsafe { is_keyboard(file.as_raw_fd()) == 0 } { if unsafe { is_keyboard_or_mouse(file.as_raw_fd()) == 0 } {
return Err(DeviceError::InvalidDevice(path.to_string()).into()); return Err(DeviceError::InvalidDevice(path.to_string()).into());
} }

View File

@ -73,5 +73,5 @@ extern "C" {
#[link(name = "espansodetectevdev", kind = "static")] #[link(name = "espansodetectevdev", kind = "static")]
extern "C" { extern "C" {
pub fn is_keyboard(fd: i32) -> i32; pub fn is_keyboard_or_mouse(fd: i32) -> i32;
} }

View File

@ -57,7 +57,7 @@ evdev_bit_is_set(const unsigned long *array, int bit)
} }
/* Some heuristics to see if the device is a keyboard. */ /* Some heuristics to see if the device is a keyboard. */
int32_t is_keyboard(int fd) int32_t is_keyboard_or_mouse(int fd)
{ {
int i; int i;
unsigned long evbits[NLONGS(EV_CNT)] = {0}; unsigned long evbits[NLONGS(EV_CNT)] = {0};
@ -76,9 +76,15 @@ int32_t is_keyboard(int fd)
if (errno) if (errno)
return false; return false;
// Test for keyboard keys
for (i = KEY_RESERVED; i <= KEY_MIN_INTERESTING; i++) for (i = KEY_RESERVED; i <= KEY_MIN_INTERESTING; i++)
if (evdev_bit_is_set(keybits, i)) if (evdev_bit_is_set(keybits, i))
return true; return true;
// Test for mouse keys
for (i = BTN_MOUSE; i <= BTN_TASK; i++)
if (evdev_bit_is_set(keybits, i))
return true;
return false; return false;
} }

View File

@ -22,6 +22,6 @@
#include <stdint.h> #include <stdint.h>
extern "C" int32_t is_keyboard(int fd); extern "C" int32_t is_keyboard_or_mouse(int fd);
#endif //ESPANSO_DETECT_EVDEV_H #endif //ESPANSO_DETECT_EVDEV_H

View File

@ -65,7 +65,11 @@ impl Default for InjectionOptions {
} else if cfg!(target_os = "macos") { } else if cfg!(target_os = "macos") {
2 2
} else if cfg!(target_os = "linux") { } else if cfg!(target_os = "linux") {
0 if cfg!(feature = "wayland") {
1
} else {
0
}
} else { } else {
panic!("unsupported OS"); panic!("unsupported OS");
}; };