commit c27e4c092c34414a11eb570bbf78a4021a6b67dc
parent b2c32475a01b80d365834641de0fd187a4673bb6
Author: Chris Guillott <chris@techfo.xyz>
Date: Thu, 28 Apr 2016 14:10:21 -0400
Merge pull request #2 from joeythesaint/optional-xkbcompose
compose: make usage of xkbcompose optional
Diffstat:
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();