From 21f9d1822a9f20938267d2b043f15facca4d1251 Mon Sep 17 00:00:00 2001 From: Antony Blakey Date: Sat, 29 Dec 2018 14:35:11 +0000 Subject: [PATCH] Add --track/-t option to enable external state tracking --- src/binding.c | 19 +++++++++++++++++++ src/util.c | 1 + src/xchainkeys.c | 10 +++++++++- src/xchainkeys.h | 1 + 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/binding.c b/src/binding.c index ead5ff7..3762235 100644 --- a/src/binding.c +++ b/src/binding.c @@ -245,7 +245,15 @@ void binding_activate(Binding_t *self) { switch(self->action) { case XC_ACTION_ENTER: + if (xc->track) { + printf("TRACK enter\n"); + fflush(stdout); + } binding_enter(self); + if (xc->track) { + printf("TRACK exit\n"); + fflush(stdout); + } break; case XC_ACTION_ESCAPE: @@ -261,7 +269,15 @@ void binding_activate(Binding_t *self) { break; case XC_ACTION_GROUP: + if (xc->track) { + printf("TRACK group enter %s\n", self->name); + fflush(stdout); + } binding_group(self); + if (xc->track) { + printf("TRACK group exit %s\n", self->name); + fflush(stdout); + } break; case XC_ACTION_LOAD: @@ -278,6 +294,9 @@ int binding_wait_event(Binding_t *self) { fd_set in; int ignore_delay = False; + if (XPending(xc->display)) + return True; + if (xc->delay > 0) { if (self->timeout > 0 && xc->delay > self->timeout) { ignore_delay = True; diff --git a/src/util.c b/src/util.c index d0efe45..3e07f30 100644 --- a/src/util.c +++ b/src/util.c @@ -26,6 +26,7 @@ void usage() { printf(" -f, --file : alternative config file\n"); printf(" -k, --keys : Show valid keyspecs\n"); printf(" -d, --debug : Enable debug messages\n"); + printf(" -t, --track : Track entry/exit to stdout\n"); printf(" -h, --help : Print this help text\n"); printf(" -v, --version : Print version information\n"); printf("\n"); diff --git a/src/xchainkeys.c b/src/xchainkeys.c index e574364..89508ae 100644 --- a/src/xchainkeys.c +++ b/src/xchainkeys.c @@ -59,6 +59,7 @@ XChainKeys_t* xc_new() { XSetErrorHandler(xc_handle_error); self->debug = False; + self->track = False; self->timeout = 3000; self->delay = 1000; self->hold = -1; @@ -622,13 +623,14 @@ void xc_parse_options(XChainKeys_t *self, int argc, char **argv) { { "version", no_argument, NULL, 'v' }, { "keys", no_argument, NULL, 'k' }, { "file", no_argument, NULL, 'f' }, + { "track", no_argument, NULL, 't' }, { 0, 0, 0, 0 }, }; int option, option_index; while (1) { - option = getopt_long(argc, argv, "dhvkf:", options, &option_index); + option = getopt_long(argc, argv, "dhvkf:t", options, &option_index); switch (option) { @@ -641,6 +643,12 @@ void xc_parse_options(XChainKeys_t *self, int argc, char **argv) { xc_show_keys(self); exit(EXIT_SUCCESS); + case 't': + self->track = True; + version(); + printf("\n"); fflush(stdout); + break; + case 'd': self->debug = True; version(); diff --git a/src/xchainkeys.h b/src/xchainkeys.h index 1f6b8e8..ef10efe 100644 --- a/src/xchainkeys.h +++ b/src/xchainkeys.h @@ -22,6 +22,7 @@ typedef struct XChainKeys { int debug; unsigned int timeout; unsigned int delay; + unsigned int track; unsigned int hold; int connection; char *position;