From 3afa2b710f9e4027ecd796b59ec81137d24c2575 Mon Sep 17 00:00:00 2001 From: Joe MacDonald Date: Thu, 28 Apr 2016 12:35:51 -0400 Subject: [PATCH] compose: make usage of xkbcompose optional Older versions of libxkbcommon-dev (in Debian / Ubuntu) don't provide xkbcommon-compose.h and the accompanying API. Detect whether the header file is present when building and if not, revert to the behaviour prior to ef3ef30400150f015695df08780e589c6407e646, the commit that introduced the usage of that header. Signed-off-by: Joe MacDonald --- Makefile | 1 + i3lock.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/Makefile b/Makefile index 6d6015e..8264185 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,7 @@ CFLAGS += -std=c99 CFLAGS += -pipe CFLAGS += -Wall CPPFLAGS += -D_GNU_SOURCE +CPPFLAGS += -DXKBCOMPOSE=$(shell if test -e /usr/include/xkbcommon/xkbcommon-compose.h ; then echo 1 ; else echo 0 ; fi ) CFLAGS += $(shell $(PKG_CONFIG) --cflags cairo xcb-dpms xcb-xinerama xcb-atom xcb-image xcb-xkb xkbcommon xkbcommon-x11) LIBS += $(shell $(PKG_CONFIG) --libs cairo xcb-dpms xcb-xinerama xcb-atom xcb-image xcb-xkb xkbcommon xkbcommon-x11) LIBS += -lpam diff --git a/i3lock.c b/i3lock.c index 79cb439..9e35131 100644 --- a/i3lock.c +++ b/i3lock.c @@ -24,7 +24,9 @@ #include #include #include +#if XKBCOMPOSE == 1 #include +#endif #include #include #include @@ -88,8 +90,10 @@ bool show_failed_attempts = false; static struct xkb_state *xkb_state; static struct xkb_context *xkb_context; static struct xkb_keymap *xkb_keymap; +#if XKBCOMPOSE == 1 static struct xkb_compose_table *xkb_compose_table; static struct xkb_compose_state *xkb_compose_state; +#endif static uint8_t xkb_base_event; static uint8_t xkb_base_error; @@ -145,6 +149,7 @@ static bool load_keymap(void) { return true; } +#if XKBCOMPOSE == 1 /* * Loads the XKB compose table from the given locale. * @@ -168,6 +173,7 @@ static bool load_compose_table(const char *locale) { return true; } +#endif /* XKBCOMPOSE */ /* * Clears the memory which stored the password to be a bit safer against @@ -353,7 +359,9 @@ static void handle_key_press(xcb_key_press_event_t *event) { char buffer[128]; int n; bool ctrl; +#if XKBCOMPOSE == 1 bool composed = false; +#endif ksym = xkb_state_key_get_one_sym(xkb_state, event->detail); ctrl = xkb_state_mod_name_is_active(xkb_state, XKB_MOD_NAME_CTRL, XKB_STATE_MODS_DEPRESSED); @@ -361,6 +369,7 @@ static void handle_key_press(xcb_key_press_event_t *event) { /* The buffer will be null-terminated, so n >= 2 for 1 actual character. */ memset(buffer, '\0', sizeof(buffer)); +#if XKBCOMPOSE == 1 if (xkb_compose_state && xkb_compose_state_feed(xkb_compose_state, ksym) == XKB_COMPOSE_FEED_ACCEPTED) { switch (xkb_compose_state_get_status(xkb_compose_state)) { case XKB_COMPOSE_NOTHING: @@ -383,6 +392,9 @@ static void handle_key_press(xcb_key_press_event_t *event) { if (!composed) { n = xkb_keysym_to_utf8(ksym, buffer, sizeof(buffer)); } +#else + n = xkb_keysym_to_utf8(ksym, buffer, sizeof(buffer)); +#endif switch (ksym) { case XKB_KEY_Return: @@ -1060,6 +1072,7 @@ int main(int argc, char *argv[]) { if (!load_keymap()) errx(EXIT_FAILURE, "Could not load keymap"); +#if XKBCOMPOSE == 1 const char *locale = getenv("LC_ALL"); if (!locale) locale = getenv("LC_CTYPE"); @@ -1072,6 +1085,7 @@ int main(int argc, char *argv[]) { } load_compose_table(locale); +#endif xinerama_init(); xinerama_query_screens();