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:
Martin Rys 2024-09-03 16:50:16 +02:00 committed by Marius Vlad
parent 59c6015c52
commit c112760368
5 changed files with 35 additions and 18 deletions

View file

@ -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

View file

@ -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 {

View file

@ -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);

View file

@ -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);
}

View file

@ -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')