i3lock-color

The world's most popular non-default computer lockscreen.
Index Commits Files Refs README LICENSE
commit 3afa2b710f9e4027ecd796b59ec81137d24c2575
parent b2c32475a01b80d365834641de0fd187a4673bb6
Author: Joe MacDonald <joe_macdonald@mentor.com>
Date:   Thu, 28 Apr 2016 12:35:51 -0400

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 <joe_macdonald@mentor.com>

Diffstat:
MMakefile | 1+
Mi3lock.c | 14++++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)
diff --git 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
@@ -24,7 +24,9 @@
 #include <ev.h>
 #include <sys/mman.h>
 #include <xkbcommon/xkbcommon.h>
+#if XKBCOMPOSE == 1
 #include <xkbcommon/xkbcommon-compose.h>
+#endif
 #include <xkbcommon/xkbcommon-x11.h>
 #include <cairo.h>
 #include <cairo/cairo-xcb.h>
@@ -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();