summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac15
-rw-r--r--src/compositor.c2
-rw-r--r--src/input.c39
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);