diff --git a/clients/window.c b/clients/window.c index d3b7d6961608b905abd72abd163e679a98ce8740..18295ffa8bf7f02c1a88251d6a2450b2ca6197af 100644 --- a/clients/window.c +++ b/clients/window.c @@ -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 diff --git a/include/libweston/libweston.h b/include/libweston/libweston.h index d1e7587d595602956c428022c2904a683b22356e..e9d0d59e7f4a305e00754f8a9a5f15f03ab294c3 100644 --- a/include/libweston/libweston.h +++ b/include/libweston/libweston.h @@ -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 { diff --git a/libweston/input.c b/libweston/input.c index 0aee74d28360cb9da91a4f8e50070581204eaf29..379ab1b4a6314d430b49451ee4837b09d8a011f9 100644 --- a/libweston/input.c +++ b/libweston/input.c @@ -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); diff --git a/libweston/libinput-device.c b/libweston/libinput-device.c index 31b88ac43c3af0e5047739452d4d6549dcb83bb3..ac1f990787ebaed7be5702b40c89d9001abd55c0 100644 --- a/libweston/libinput-device.c +++ b/libweston/libinput-device.c @@ -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); } diff --git a/meson.build b/meson.build index 6e516c390c94788b70c397ab204271b58c0bf39b..13fff0fe0099508eb8c246f8fc32b37c260606e7 100644 --- a/meson.build +++ b/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')