build: Make libxkbcommon build-time optional in the compositor

v2: Incorporate review feedback from Daniel Stone - improved configure
message about the purpose of this option and reorganisation of #ifdefs.
dev
Rob Bradford 12 years ago committed by Kristian Høgsberg
parent 01a9273bd2
commit 382ff46ffb
  1. 15
      configure.ac
  2. 2
      src/compositor.c
  3. 39
      src/input.c

@ -54,7 +54,7 @@ AC_CHECK_HEADERS([execinfo.h])
AC_CHECK_FUNCS([mkostemp strchrnul]) 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],, AC_ARG_ENABLE(egl, [ --disable-egl],,
enable_egl=yes) enable_egl=yes)
@ -64,6 +64,19 @@ if test x$enable_egl = xyes; then
COMPOSITOR_MODULES="$COMPOSITOR_MODULES egl >= 7.10 glesv2" COMPOSITOR_MODULES="$COMPOSITOR_MODULES egl >= 7.10 glesv2"
fi 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]) PKG_CHECK_MODULES(COMPOSITOR, [$COMPOSITOR_MODULES])
AC_ARG_ENABLE(setuid-install, [ --enable-setuid-install],, AC_ARG_ENABLE(setuid-install, [ --enable-setuid-install],,

@ -2829,7 +2829,6 @@ weston_compositor_init(struct weston_compositor *ec,
weston_plane_init(&ec->primary_plane, 0, 0); weston_plane_init(&ec->primary_plane, 0, 0);
weston_compositor_stack_plane(ec, &ec->primary_plane, NULL); weston_compositor_stack_plane(ec, &ec->primary_plane, NULL);
ec->use_xkbcommon = 1;
s = weston_config_get_section(ec->config, "keyboard", NULL, NULL); s = weston_config_get_section(ec->config, "keyboard", NULL, NULL);
weston_config_section_get_string(s, "keymap_rules", weston_config_section_get_string(s, "keymap_rules",
(char **) &xkb_names.rules, NULL); (char **) &xkb_names.rules, NULL);
@ -2841,6 +2840,7 @@ weston_compositor_init(struct weston_compositor *ec,
(char **) &xkb_names.variant, NULL); (char **) &xkb_names.variant, NULL);
weston_config_section_get_string(s, "keymap_options", weston_config_section_get_string(s, "keymap_options",
(char **) &xkb_names.options, NULL); (char **) &xkb_names.options, NULL);
if (weston_compositor_xkb_init(ec, &xkb_names) < 0) if (weston_compositor_xkb_init(ec, &xkb_names) < 0)
return -1; return -1;

@ -744,6 +744,7 @@ notify_axis(struct weston_seat *seat, uint32_t time, uint32_t axis,
value); value);
} }
#ifdef ENABLE_XKBCOMMON
WL_EXPORT void WL_EXPORT void
notify_modifiers(struct weston_seat *seat, uint32_t serial) 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); 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 WL_EXPORT void
notify_key(struct weston_seat *seat, uint32_t time, uint32_t key, 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); wl_seat_send_name(resource, seat->seat_name);
} }
#ifdef ENABLE_XKBCOMMON
int int
weston_compositor_xkb_init(struct weston_compositor *ec, weston_compositor_xkb_init(struct weston_compositor *ec,
struct xkb_rule_names *names) struct xkb_rule_names *names)
{ {
/* ec->use_xkbcommon = 1;
* If we're operating in raw keyboard mode, libxkbcommon isn't used and
* shouldn't be initialized.
*/
if (!ec->use_xkbcommon)
return 0;
if (ec->xkb_context == NULL) { if (ec->xkb_context == NULL) {
ec->xkb_context = xkb_context_new(0); ec->xkb_context = xkb_context_new(0);
@ -1423,6 +1432,19 @@ weston_compositor_build_global_keymap(struct weston_compositor *ec)
return 0; 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 WL_EXPORT int
weston_seat_init_keyboard(struct weston_seat *seat, struct xkb_keymap *keymap) 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) if (seat->keyboard)
return 0; return 0;
#ifdef ENABLE_XKBCOMMON
if (seat->compositor->use_xkbcommon) { if (seat->compositor->use_xkbcommon) {
if (keymap != NULL) { if (keymap != NULL) {
seat->xkb_info.keymap = xkb_map_ref(keymap); 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; seat->xkb_state.leds = 0;
} }
#endif
keyboard = weston_keyboard_create(); keyboard = weston_keyboard_create();
if (keyboard == NULL) { if (keyboard == NULL) {
@ -1537,11 +1560,13 @@ weston_seat_release(struct weston_seat *seat)
wl_list_remove(&seat->link); wl_list_remove(&seat->link);
/* The global object is destroyed at wl_display_destroy() time. */ /* The global object is destroyed at wl_display_destroy() time. */
#ifdef ENABLE_XKBCOMMON
if (seat->compositor->use_xkbcommon) { if (seat->compositor->use_xkbcommon) {
if (seat->xkb_state.state != NULL) if (seat->xkb_state.state != NULL)
xkb_state_unref(seat->xkb_state.state); xkb_state_unref(seat->xkb_state.state);
xkb_info_destroy(&seat->xkb_info); xkb_info_destroy(&seat->xkb_info);
} }
#endif
if (seat->pointer) if (seat->pointer)
weston_pointer_destroy(seat->pointer); weston_pointer_destroy(seat->pointer);

Loading…
Cancel
Save