mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2025-12-20 09:20:08 +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>
|
#include <xkbcommon/xkbcommon.h>
|
||||||
#ifdef HAVE_XKBCOMMON_COMPOSE
|
|
||||||
#include <xkbcommon/xkbcommon-compose.h>
|
#include <xkbcommon/xkbcommon-compose.h>
|
||||||
#endif
|
|
||||||
#include <wayland-cursor.h>
|
#include <wayland-cursor.h>
|
||||||
|
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
|
@ -400,10 +398,8 @@ struct input {
|
||||||
struct {
|
struct {
|
||||||
struct xkb_keymap *keymap;
|
struct xkb_keymap *keymap;
|
||||||
struct xkb_state *state;
|
struct xkb_state *state;
|
||||||
#ifdef HAVE_XKBCOMMON_COMPOSE
|
|
||||||
struct xkb_compose_table *compose_table;
|
struct xkb_compose_table *compose_table;
|
||||||
struct xkb_compose_state *compose_state;
|
struct xkb_compose_state *compose_state;
|
||||||
#endif
|
|
||||||
xkb_mod_mask_t control_mask;
|
xkb_mod_mask_t control_mask;
|
||||||
xkb_mod_mask_t alt_mask;
|
xkb_mod_mask_t alt_mask;
|
||||||
xkb_mod_mask_t shift_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 input *input = data;
|
||||||
struct xkb_keymap *keymap;
|
struct xkb_keymap *keymap;
|
||||||
struct xkb_state *state;
|
struct xkb_state *state;
|
||||||
#ifdef HAVE_XKBCOMMON_COMPOSE
|
|
||||||
struct xkb_compose_table *compose_table;
|
struct xkb_compose_table *compose_table;
|
||||||
struct xkb_compose_state *compose_state;
|
struct xkb_compose_state *compose_state;
|
||||||
#endif
|
|
||||||
char *locale;
|
char *locale;
|
||||||
char *map_str;
|
char *map_str;
|
||||||
|
|
||||||
|
|
@ -3153,7 +3147,6 @@ keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard,
|
||||||
locale = "C";
|
locale = "C";
|
||||||
|
|
||||||
/* Set up XKB compose table */
|
/* Set up XKB compose table */
|
||||||
#ifdef HAVE_XKBCOMMON_COMPOSE
|
|
||||||
compose_table =
|
compose_table =
|
||||||
xkb_compose_table_new_from_locale(input->display->xkb_context,
|
xkb_compose_table_new_from_locale(input->display->xkb_context,
|
||||||
locale,
|
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'. "
|
fprintf(stderr, "could not create XKB compose table for locale '%s'. "
|
||||||
"Disabiling compose\n", locale);
|
"Disabiling compose\n", locale);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
xkb_keymap_unref(input->xkb.keymap);
|
xkb_keymap_unref(input->xkb.keymap);
|
||||||
xkb_state_unref(input->xkb.state);
|
xkb_state_unref(input->xkb.state);
|
||||||
|
|
@ -3228,7 +3220,6 @@ keyboard_handle_leave(void *data, struct wl_keyboard *keyboard,
|
||||||
static xkb_keysym_t
|
static xkb_keysym_t
|
||||||
process_key_press(xkb_keysym_t sym, struct input *input)
|
process_key_press(xkb_keysym_t sym, struct input *input)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_XKBCOMMON_COMPOSE
|
|
||||||
if (!input->xkb.compose_state)
|
if (!input->xkb.compose_state)
|
||||||
return sym;
|
return sym;
|
||||||
if (sym == XKB_KEY_NoSymbol)
|
if (sym == XKB_KEY_NoSymbol)
|
||||||
|
|
@ -3249,9 +3240,6 @@ process_key_press(xkb_keysym_t sym, struct input *input)
|
||||||
default:
|
default:
|
||||||
return sym;
|
return sym;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
return sym;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,10 @@ enum weston_led {
|
||||||
LED_NUM_LOCK = (1 << 0),
|
LED_NUM_LOCK = (1 << 0),
|
||||||
LED_CAPS_LOCK = (1 << 1),
|
LED_CAPS_LOCK = (1 << 1),
|
||||||
LED_SCROLL_LOCK = (1 << 2),
|
LED_SCROLL_LOCK = (1 << 2),
|
||||||
|
#ifdef HAVE_COMPOSE_AND_KANA
|
||||||
|
LED_COMPOSE = (1 << 3),
|
||||||
|
LED_KANA = (1 << 4),
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
enum weston_mode_aspect_ratio {
|
enum weston_mode_aspect_ratio {
|
||||||
|
|
@ -1229,6 +1233,10 @@ struct weston_xkb_info {
|
||||||
xkb_led_index_t num_led;
|
xkb_led_index_t num_led;
|
||||||
xkb_led_index_t caps_led;
|
xkb_led_index_t caps_led;
|
||||||
xkb_led_index_t scroll_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 {
|
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,
|
if (xkb_state_led_index_is_active(keyboard->xkb_state.state,
|
||||||
keyboard->xkb_info->scroll_led))
|
keyboard->xkb_info->scroll_led))
|
||||||
leds |= LED_SCROLL_LOCK;
|
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)
|
if (leds != keyboard->xkb_state.leds && seat->led_update)
|
||||||
seat->led_update(seat, leds);
|
seat->led_update(seat, leds);
|
||||||
keyboard->xkb_state.leds = leds;
|
keyboard->xkb_state.leds = leds;
|
||||||
|
|
@ -4017,6 +4025,12 @@ weston_xkb_info_create(struct xkb_keymap *keymap)
|
||||||
XKB_LED_NAME_CAPS);
|
XKB_LED_NAME_CAPS);
|
||||||
xkb_info->scroll_led = xkb_keymap_led_get_index(xkb_info->keymap,
|
xkb_info->scroll_led = xkb_keymap_led_get_index(xkb_info->keymap,
|
||||||
XKB_LED_NAME_SCROLL);
|
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,
|
keymap_string = xkb_keymap_get_as_string(xkb_info->keymap,
|
||||||
XKB_KEYMAP_FORMAT_TEXT_V1);
|
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;
|
leds |= LIBINPUT_LED_CAPS_LOCK;
|
||||||
if (weston_leds & LED_SCROLL_LOCK)
|
if (weston_leds & LED_SCROLL_LOCK)
|
||||||
leds |= LIBINPUT_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);
|
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))
|
error('Backend @0@ was chosen as native but is not being built.'.format(backend_default))
|
||||||
endif
|
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_server = dependency('wayland-server', version: '>= 1.22.0')
|
||||||
dep_wayland_client = dependency('wayland-client', version: '>= 1.22.0')
|
dep_wayland_client = dependency('wayland-client', version: '>= 1.22.0')
|
||||||
dep_pixman = dependency('pixman-1', version: '>= 0.25.2')
|
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')
|
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_libevdev = dependency('libevdev')
|
||||||
dep_libm = cc.find_library('m')
|
dep_libm = cc.find_library('m')
|
||||||
dep_libdl = cc.find_library('dl')
|
dep_libdl = cc.find_library('dl')
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue