mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2025-12-20 05:50:10 +01:00
input: Add support for LED_COMPOSE and LED_KANA USB HID LEDs
Also bump up the xkbcommon dependency to a newer, 10 year old version, to be able to remove very old ifdefs. Signed-off-by: Martin Rys <martin@rys.rs>
This commit is contained in:
parent
59c6015c52
commit
c112760368
5 changed files with 35 additions and 18 deletions
|
|
@ -44,9 +44,7 @@
|
|||
|
||||
|
||||
#include <xkbcommon/xkbcommon.h>
|
||||
#ifdef HAVE_XKBCOMMON_COMPOSE
|
||||
#include <xkbcommon/xkbcommon-compose.h>
|
||||
#endif
|
||||
#include <wayland-cursor.h>
|
||||
|
||||
#include <linux/input.h>
|
||||
|
|
@ -400,10 +398,8 @@ struct input {
|
|||
struct {
|
||||
struct xkb_keymap *keymap;
|
||||
struct xkb_state *state;
|
||||
#ifdef HAVE_XKBCOMMON_COMPOSE
|
||||
struct xkb_compose_table *compose_table;
|
||||
struct xkb_compose_state *compose_state;
|
||||
#endif
|
||||
xkb_mod_mask_t control_mask;
|
||||
xkb_mod_mask_t alt_mask;
|
||||
xkb_mod_mask_t shift_mask;
|
||||
|
|
@ -3102,10 +3098,8 @@ keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard,
|
|||
struct input *input = data;
|
||||
struct xkb_keymap *keymap;
|
||||
struct xkb_state *state;
|
||||
#ifdef HAVE_XKBCOMMON_COMPOSE
|
||||
struct xkb_compose_table *compose_table;
|
||||
struct xkb_compose_state *compose_state;
|
||||
#endif
|
||||
char *locale;
|
||||
char *map_str;
|
||||
|
||||
|
|
@ -3153,7 +3147,6 @@ keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard,
|
|||
locale = "C";
|
||||
|
||||
/* Set up XKB compose table */
|
||||
#ifdef HAVE_XKBCOMMON_COMPOSE
|
||||
compose_table =
|
||||
xkb_compose_table_new_from_locale(input->display->xkb_context,
|
||||
locale,
|
||||
|
|
@ -3177,7 +3170,6 @@ keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard,
|
|||
fprintf(stderr, "could not create XKB compose table for locale '%s'. "
|
||||
"Disabiling compose\n", locale);
|
||||
}
|
||||
#endif
|
||||
|
||||
xkb_keymap_unref(input->xkb.keymap);
|
||||
xkb_state_unref(input->xkb.state);
|
||||
|
|
@ -3228,7 +3220,6 @@ keyboard_handle_leave(void *data, struct wl_keyboard *keyboard,
|
|||
static xkb_keysym_t
|
||||
process_key_press(xkb_keysym_t sym, struct input *input)
|
||||
{
|
||||
#ifdef HAVE_XKBCOMMON_COMPOSE
|
||||
if (!input->xkb.compose_state)
|
||||
return sym;
|
||||
if (sym == XKB_KEY_NoSymbol)
|
||||
|
|
@ -3249,9 +3240,6 @@ process_key_press(xkb_keysym_t sym, struct input *input)
|
|||
default:
|
||||
return sym;
|
||||
}
|
||||
#else
|
||||
return sym;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -110,6 +110,10 @@ enum weston_led {
|
|||
LED_NUM_LOCK = (1 << 0),
|
||||
LED_CAPS_LOCK = (1 << 1),
|
||||
LED_SCROLL_LOCK = (1 << 2),
|
||||
#ifdef HAVE_COMPOSE_AND_KANA
|
||||
LED_COMPOSE = (1 << 3),
|
||||
LED_KANA = (1 << 4),
|
||||
#endif
|
||||
};
|
||||
|
||||
enum weston_mode_aspect_ratio {
|
||||
|
|
@ -1229,6 +1233,10 @@ struct weston_xkb_info {
|
|||
xkb_led_index_t num_led;
|
||||
xkb_led_index_t caps_led;
|
||||
xkb_led_index_t scroll_led;
|
||||
#ifdef HAVE_COMPOSE_AND_KANA
|
||||
xkb_led_index_t compose_led;
|
||||
xkb_led_index_t kana_led;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct weston_keyboard {
|
||||
|
|
|
|||
|
|
@ -2525,6 +2525,14 @@ notify_modifiers(struct weston_seat *seat, uint32_t serial)
|
|||
if (xkb_state_led_index_is_active(keyboard->xkb_state.state,
|
||||
keyboard->xkb_info->scroll_led))
|
||||
leds |= LED_SCROLL_LOCK;
|
||||
#ifdef HAVE_COMPOSE_AND_KANA
|
||||
if (xkb_state_led_index_is_active(keyboard->xkb_state.state,
|
||||
keyboard->xkb_info->compose_led))
|
||||
leds |= LED_COMPOSE;
|
||||
if (xkb_state_led_index_is_active(keyboard->xkb_state.state,
|
||||
keyboard->xkb_info->kana_led))
|
||||
leds |= LED_KANA;
|
||||
#endif
|
||||
if (leds != keyboard->xkb_state.leds && seat->led_update)
|
||||
seat->led_update(seat, leds);
|
||||
keyboard->xkb_state.leds = leds;
|
||||
|
|
@ -4017,6 +4025,12 @@ weston_xkb_info_create(struct xkb_keymap *keymap)
|
|||
XKB_LED_NAME_CAPS);
|
||||
xkb_info->scroll_led = xkb_keymap_led_get_index(xkb_info->keymap,
|
||||
XKB_LED_NAME_SCROLL);
|
||||
#ifdef HAVE_COMPOSE_AND_KANA
|
||||
xkb_info->compose_led = xkb_keymap_led_get_index(xkb_info->keymap,
|
||||
XKB_LED_NAME_COMPOSE);
|
||||
xkb_info->kana_led = xkb_keymap_led_get_index(xkb_info->keymap,
|
||||
XKB_LED_NAME_KANA);
|
||||
#endif
|
||||
|
||||
keymap_string = xkb_keymap_get_as_string(xkb_info->keymap,
|
||||
XKB_KEYMAP_FORMAT_TEXT_V1);
|
||||
|
|
|
|||
|
|
@ -63,7 +63,12 @@ evdev_led_update(struct evdev_device *device, enum weston_led weston_leds)
|
|||
leds |= LIBINPUT_LED_CAPS_LOCK;
|
||||
if (weston_leds & LED_SCROLL_LOCK)
|
||||
leds |= LIBINPUT_LED_SCROLL_LOCK;
|
||||
|
||||
#ifdef HAVE_COMPOSE_AND_KANA
|
||||
if (weston_leds & LED_COMPOSE)
|
||||
leds |= LIBINPUT_LED_COMPOSE;
|
||||
if (weston_leds & LED_KANA)
|
||||
leds |= LIBINPUT_LED_KANA;
|
||||
#endif
|
||||
libinput_device_led_update(device->device, leds);
|
||||
}
|
||||
|
||||
|
|
|
|||
12
meson.build
12
meson.build
|
|
@ -149,15 +149,17 @@ if not get_option('backend-' + backend_default)
|
|||
error('Backend @0@ was chosen as native but is not being built.'.format(backend_default))
|
||||
endif
|
||||
|
||||
dep_xkbcommon = dependency('xkbcommon', version: '>= 0.3.0')
|
||||
if dep_xkbcommon.version().version_compare('>= 0.5.0')
|
||||
config_h.set('HAVE_XKBCOMMON_COMPOSE', '1')
|
||||
endif
|
||||
|
||||
dep_wayland_server = dependency('wayland-server', version: '>= 1.22.0')
|
||||
dep_wayland_client = dependency('wayland-client', version: '>= 1.22.0')
|
||||
dep_pixman = dependency('pixman-1', version: '>= 0.25.2')
|
||||
dep_xkbcommon = dependency('xkbcommon', version: '>= 0.5.0')
|
||||
dep_libinput = dependency('libinput', version: '>= 1.2.0')
|
||||
if dep_xkbcommon.version().version_compare('>= 1.8.0')
|
||||
if dep_libinput.version().version_compare('>= 1.26.0')
|
||||
config_h.set('HAVE_COMPOSE_AND_KANA', '1')
|
||||
endif
|
||||
endif
|
||||
|
||||
dep_libevdev = dependency('libevdev')
|
||||
dep_libm = cc.find_library('m')
|
||||
dep_libdl = cc.find_library('dl')
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue