diff options
-rw-r--r-- | configure.ac | 15 | ||||
-rw-r--r-- | src/compositor.c | 2 | ||||
-rw-r--r-- | src/input.c | 39 |
3 files changed, 47 insertions, 9 deletions
diff --git a/configure.ac b/configure.ac index b6252218..726eb4ff 100644 --- a/configure.ac +++ b/configure.ac @@ -54,7 +54,7 @@ AC_CHECK_HEADERS([execinfo.h]) AC_CHECK_FUNCS([mkostemp strchrnul]) -COMPOSITOR_MODULES="wayland-server >= 1.1.90 xkbcommon pixman-1" +COMPOSITOR_MODULES="wayland-server >= 1.1.90 pixman-1" AC_ARG_ENABLE(egl, [ --disable-egl],, enable_egl=yes) @@ -64,6 +64,19 @@ if test x$enable_egl = xyes; then COMPOSITOR_MODULES="$COMPOSITOR_MODULES egl >= 7.10 glesv2" fi +AC_ARG_ENABLE(xkbcommon, + AS_HELP_STRING([--disable-xkbcommon], [Disable libxkbcommon + support: This is only useful in environments + where you do not have a hardware keyboard. If + libxkbcommon support is disabled clients will not + be sent a keymap and and must know how to + interpret the keycode sent for any key event.]),, + enable_xkbcommon=yes) +if test x$enable_xkbcommon = xyes; then + AC_DEFINE(ENABLE_XKBCOMMON, [1], [Build Weston with libxkbcommon support]) + COMPOSITOR_MODULES="$COMPOSITOR_MODULES xkbcommon" +fi + PKG_CHECK_MODULES(COMPOSITOR, [$COMPOSITOR_MODULES]) AC_ARG_ENABLE(setuid-install, [ --enable-setuid-install],, diff --git a/src/compositor.c b/src/compositor.c index df9a5bf4..30b14fe7 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -2829,7 +2829,6 @@ weston_compositor_init(struct weston_compositor *ec, weston_plane_init(&ec->primary_plane, 0, 0); weston_compositor_stack_plane(ec, &ec->primary_plane, NULL); - ec->use_xkbcommon = 1; s = weston_config_get_section(ec->config, "keyboard", NULL, NULL); weston_config_section_get_string(s, "keymap_rules", (char **) &xkb_names.rules, NULL); @@ -2841,6 +2840,7 @@ weston_compositor_init(struct weston_compositor *ec, (char **) &xkb_names.variant, NULL); weston_config_section_get_string(s, "keymap_options", (char **) &xkb_names.options, NULL); + if (weston_compositor_xkb_init(ec, &xkb_names) < 0) return -1; diff --git a/src/input.c b/src/input.c index a86bb7e5..88fd64c1 100644 --- a/src/input.c +++ b/src/input.c @@ -744,6 +744,7 @@ notify_axis(struct weston_seat *seat, uint32_t time, uint32_t axis, value); } +#ifdef ENABLE_XKBCOMMON WL_EXPORT void notify_modifiers(struct weston_seat *seat, uint32_t serial) { @@ -833,6 +834,18 @@ update_modifier_state(struct weston_seat *seat, uint32_t serial, uint32_t key, notify_modifiers(seat, serial); } +#else +WL_EXPORT void +notify_modifiers(struct weston_seat *seat, uint32_t serial) +{ +} + +static void +update_modifier_state(struct weston_seat *seat, uint32_t serial, uint32_t key, + enum wl_keyboard_key_state state) +{ +} +#endif WL_EXPORT void notify_key(struct weston_seat *seat, uint32_t time, uint32_t key, @@ -1276,16 +1289,12 @@ bind_seat(struct wl_client *client, void *data, uint32_t version, uint32_t id) wl_seat_send_name(resource, seat->seat_name); } +#ifdef ENABLE_XKBCOMMON int weston_compositor_xkb_init(struct weston_compositor *ec, struct xkb_rule_names *names) { - /* - * If we're operating in raw keyboard mode, libxkbcommon isn't used and - * shouldn't be initialized. - */ - if (!ec->use_xkbcommon) - return 0; + ec->use_xkbcommon = 1; if (ec->xkb_context == NULL) { ec->xkb_context = xkb_context_new(0); @@ -1423,6 +1432,19 @@ weston_compositor_build_global_keymap(struct weston_compositor *ec) return 0; } +#else +int +weston_compositor_xkb_init(struct weston_compositor *ec, + struct xkb_rule_names *names) +{ + return 0; +} + +void +weston_compositor_xkb_destroy(struct weston_compositor *ec) +{ +} +#endif WL_EXPORT int weston_seat_init_keyboard(struct weston_seat *seat, struct xkb_keymap *keymap) @@ -1432,7 +1454,7 @@ weston_seat_init_keyboard(struct weston_seat *seat, struct xkb_keymap *keymap) if (seat->keyboard) return 0; - +#ifdef ENABLE_XKBCOMMON if (seat->compositor->use_xkbcommon) { if (keymap != NULL) { seat->xkb_info.keymap = xkb_map_ref(keymap); @@ -1453,6 +1475,7 @@ weston_seat_init_keyboard(struct weston_seat *seat, struct xkb_keymap *keymap) seat->xkb_state.leds = 0; } +#endif keyboard = weston_keyboard_create(); if (keyboard == NULL) { @@ -1537,11 +1560,13 @@ weston_seat_release(struct weston_seat *seat) wl_list_remove(&seat->link); /* The global object is destroyed at wl_display_destroy() time. */ +#ifdef ENABLE_XKBCOMMON if (seat->compositor->use_xkbcommon) { if (seat->xkb_state.state != NULL) xkb_state_unref(seat->xkb_state.state); xkb_info_destroy(&seat->xkb_info); } +#endif if (seat->pointer) weston_pointer_destroy(seat->pointer); |