clients: Make XKB compose support conditional

Debian Jessie's version of libxkbcommon is too old for compose support,
so rather than force people to upgrade, let's make it conditional.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Daniel Díaz <daniel.diaz@linaro.org>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
This commit is contained in:
Daniel Stone
2016-10-20 14:45:58 +01:00
parent 75b7197f4e
commit 5b01596e3f
2 changed files with 16 additions and 0 deletions
+12
View File
@@ -63,7 +63,9 @@ typedef void *EGLContext;
#endif /* no HAVE_CAIRO_EGL */ #endif /* no HAVE_CAIRO_EGL */
#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>
@@ -373,8 +375,10 @@ 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;
@@ -2982,8 +2986,10 @@ 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;
@@ -3031,6 +3037,7 @@ 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,
@@ -3054,6 +3061,7 @@ 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);
@@ -3099,6 +3107,7 @@ 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 (sym == XKB_KEY_NoSymbol) if (sym == XKB_KEY_NoSymbol)
return sym; return sym;
if (xkb_compose_state_feed(input->xkb.compose_state, if (xkb_compose_state_feed(input->xkb.compose_state,
@@ -3117,6 +3126,9 @@ process_key_press(xkb_keysym_t sym, struct input *input)
default: default:
return sym; return sym;
} }
#else
return sym;
#endif
} }
static void static void
+4
View File
@@ -146,6 +146,10 @@ AC_ARG_ENABLE(xkbcommon,
if test x$enable_xkbcommon = xyes; then if test x$enable_xkbcommon = xyes; then
AC_DEFINE(ENABLE_XKBCOMMON, [1], [Build Weston with libxkbcommon support]) AC_DEFINE(ENABLE_XKBCOMMON, [1], [Build Weston with libxkbcommon support])
COMPOSITOR_MODULES="$COMPOSITOR_MODULES xkbcommon >= 0.3.0" COMPOSITOR_MODULES="$COMPOSITOR_MODULES xkbcommon >= 0.3.0"
PKG_CHECK_MODULES(XKBCOMMON_COMPOSE, [xkbcommon >= 0.5.0],
[AC_DEFINE(HAVE_XKBCOMMON_COMPOSE, 1,
[Define if xkbcommon is 0.5.0 or newer])],
true)
fi fi
AC_ARG_ENABLE(setuid-install, [ --enable-setuid-install],, AC_ARG_ENABLE(setuid-install, [ --enable-setuid-install],,