diff --git a/Makefile b/Makefile index e364e5d..eae3691 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,8 @@ TARGET := xcape CFLAGS += -Wall -CFLAGS += `pkg-config --cflags xtst` -LDFLAGS += `pkg-config --libs xtst` +CFLAGS += `pkg-config --cflags xtst x11` +LDFLAGS += `pkg-config --libs xtst x11` LDFLAGS += -pthread $(TARGET): xcape.c diff --git a/xcape.c b/xcape.c index f64c8cc..b5dd2b0 100644 --- a/xcape.c +++ b/xcape.c @@ -28,6 +28,7 @@ #include #include #include +#include /************************************************************************ @@ -38,7 +39,6 @@ typedef struct _XCape_t Display *data_conn; Display *ctrl_conn; XRecordContext record_ctx; - KeyCode control_key; KeyCode escape_key; pthread_t sigwait_thread; sigset_t sigset; @@ -87,8 +87,6 @@ int main (int argc, char **argv) self->escape_key = XKeysymToKeycode (self->ctrl_conn, XK_Escape); - self->control_key = XKeysymToKeycode (self->ctrl_conn, - XK_Control_L); if (!XQueryExtension (self->ctrl_conn, "XTEST", &dummy, &dummy, &dummy)) @@ -101,6 +99,12 @@ int main (int argc, char **argv) fprintf (stderr, "Failed to obtain xrecord version\n"); exit (EXIT_FAILURE); } + if (!XkbQueryExtension (self->ctrl_conn, &dummy, &dummy, + &dummy, &dummy, &dummy)) + { + fprintf (stderr, "Failed to obtain xkb version\n"); + exit (EXIT_FAILURE); + } sigfillset(&self->sigset); pthread_sigmask (SIG_BLOCK, &self->sigset, NULL); @@ -189,7 +193,7 @@ void intercept (XPointer user_data, XRecordInterceptData *data) "Intercepted key event %d, key code %d\n", key_event, key_code); - if (key_code == self->control_key) + if (XkbKeycodeToKeysym(self->ctrl_conn, key_code, 0, 0) == XK_Control_L) { if (key_event == KeyPress) {