Browse Source

Introduce --debug and some debugging options related to the Mode_switch / ISO_Level3_Shift thing

master
Michael Stapelberg 13 years ago
parent
commit
9f6ef91337
  1. 26
      i3lock.c

26
i3lock.c

@ -46,6 +46,12 @@ static bool iso_level3_shift_active = false;
static int modeswitchmask; static int modeswitchmask;
static int numlockmask; static int numlockmask;
static bool beep = false; static bool beep = false;
static bool debug_mode = false;
#define DEBUG(fmt, ...) do { \
if (debug_mode) \
printf("[i3lock-debug] " fmt, ##__VA_ARGS__); \
} while (0)
#ifndef NOLIBCAIRO #ifndef NOLIBCAIRO
static cairo_surface_t *img = NULL; static cairo_surface_t *img = NULL;
@ -114,7 +120,8 @@ static void input_done() {
* *
*/ */
static void handle_key_release(xcb_key_release_event_t *event) { static void handle_key_release(xcb_key_release_event_t *event) {
//printf("releasing %d, state raw = %d\n", event->detail, event->state); DEBUG("releasing key %d, state raw = %d, modeswitch_active = %d, iso_level3_shift_active = %d\n",
event->detail, event->state, modeswitch_active, iso_level3_shift_active);
/* fix state */ /* fix state */
event->state &= ~numlockmask; event->state &= ~numlockmask;
@ -126,6 +133,8 @@ static void handle_key_release(xcb_key_release_event_t *event) {
} else if (sym == XK_ISO_Level3_Shift) { } else if (sym == XK_ISO_Level3_Shift) {
iso_level3_shift_active = false; iso_level3_shift_active = false;
} }
DEBUG("release done. modeswitch_active = %d, iso_level3_shift_active = %d\n",
modeswitch_active, iso_level3_shift_active);
} }
/* /*
@ -135,7 +144,8 @@ static void handle_key_release(xcb_key_release_event_t *event) {
* *
*/ */
static void handle_key_press(xcb_key_press_event_t *event) { static void handle_key_press(xcb_key_press_event_t *event) {
//printf("keypress %d, state raw = %d\n", event->detail, event->state); DEBUG("keypress %d, state raw = %d, modeswitch_active = %d, iso_level3_shift_active = %d\n",
event->detail, event->state, modeswitch_active, iso_level3_shift_active);
xcb_keysym_t sym0, sym1, sym; xcb_keysym_t sym0, sym1, sym;
/* For each keycode, there is a list of symbols. The list could look like this: /* For each keycode, there is a list of symbols. The list could look like this:
@ -178,7 +188,7 @@ static void handle_key_press(xcb_key_press_event_t *event) {
sym1 = xcb_key_press_lookup_keysym(symbols, event, base_column + 1); sym1 = xcb_key_press_lookup_keysym(symbols, event, base_column + 1);
switch (sym0) { switch (sym0) {
case XK_Mode_switch: case XK_Mode_switch:
//printf("Mode switch enabled\n"); DEBUG("Mode switch enabled\n");
modeswitch_active = true; modeswitch_active = true;
return; return;
case XK_ISO_Level3_Shift: case XK_ISO_Level3_Shift:
@ -232,7 +242,7 @@ static void handle_key_press(xcb_key_press_event_t *event) {
if (xcb_is_modifier_key(sym) || xcb_is_cursor_key(sym)) if (xcb_is_modifier_key(sym) || xcb_is_cursor_key(sym))
return; return;
//printf("sym = %c (%d)\n", sym, sym); DEBUG("resolved to keysym = %c (%d)\n", sym, sym);
/* convert the keysym to UCS */ /* convert the keysym to UCS */
uint16_t ucs = keysym2ucs(sym); uint16_t ucs = keysym2ucs(sym);
@ -243,11 +253,12 @@ static void handle_key_press(xcb_key_press_event_t *event) {
/* store the UCS in a string to convert it */ /* store the UCS in a string to convert it */
uint8_t inp[3] = {(ucs & 0xFF00) >> 8, (ucs & 0xFF), 0}; uint8_t inp[3] = {(ucs & 0xFF00) >> 8, (ucs & 0xFF), 0};
DEBUG("input part = %s\n", inp);
/* store it in the password array as UTF-8 */ /* store it in the password array as UTF-8 */
input_position += convert_ucs_to_utf8((char*)inp, password + input_position); input_position += convert_ucs_to_utf8((char*)inp, password + input_position);
password[input_position] = '\0'; password[input_position] = '\0';
//printf("current password = %s\n", password); DEBUG("current password = %s\n", password);
} }
/* /*
@ -366,6 +377,7 @@ int main(int argc, char *argv[]) {
{"dpms", no_argument, NULL, 'd'}, {"dpms", no_argument, NULL, 'd'},
{"color", required_argument, NULL, 'c'}, {"color", required_argument, NULL, 'c'},
{"pointer", required_argument, NULL , 'p'}, {"pointer", required_argument, NULL , 'p'},
{"debug", no_argument, NULL, 0},
#ifndef NOLIBCAIRO #ifndef NOLIBCAIRO
{"image", required_argument, NULL, 'i'}, {"image", required_argument, NULL, 'i'},
{"tiling", no_argument, NULL, 't'}, {"tiling", no_argument, NULL, 't'},
@ -422,6 +434,10 @@ int main(int argc, char *argv[]) {
errx(1, "i3lock: Invalid pointer type given. Expected one of \"win\" or \"default\".\n"); errx(1, "i3lock: Invalid pointer type given. Expected one of \"win\" or \"default\".\n");
} }
break; break;
case 0:
if (strcmp(longopts[optind].name, "debug") == 0)
debug_mode = true;
break;
default: default:
errx(1, "i3lock: Unknown option. Syntax: i3lock [-v] [-n] [-b] [-d] [-c color] [-p win|default]" errx(1, "i3lock: Unknown option. Syntax: i3lock [-v] [-n] [-b] [-d] [-c color] [-p win|default]"
#ifndef NOLIBCAIRO #ifndef NOLIBCAIRO

Loading…
Cancel
Save