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();