/* Toggle whether to grab keys or not in interactive mode. * If not in interactive mode (see `mode') print an error. */ static void toggle_interactive_mode() { switch (mode) { case INTERACTIVE: ungrab_keys(); printf("interactive mode off\n"); mode = INTERACTIVE_DISABLED; break; case INTERACTIVE_DISABLED: grab_keys(); printf("interactive mode re-activated\n"); mode = INTERACTIVE; break; default: fprintf(stderr, "Toggle command called in non-interactive mode."); break; } }
static void cleanup (void) { HotkeyConfiguration* hotkey; if (!loaded) return; ungrab_keys (); release_filter(); hotkey = &(plugin_cfg.first); hotkey = hotkey->next; while (hotkey) { HotkeyConfiguration * old; old = hotkey; hotkey = hotkey->next; free(old); } plugin_cfg.first.next = NULL; plugin_cfg.first.key = 0; plugin_cfg.first.event = 0; plugin_cfg.first.mask = 0; loaded = FALSE; }
static void XF86AudioKeyGrab_cleanup() { ungrab_keys(); gdk_window_remove_filter(NULL, xf86audio_filter, map); }
static Bool wait_key(int screen, KeyCode* kc, unsigned int* mods) { grab_keys(screen); KeyCode waitfor = 0; *kc = 0; Bool done = False; while (!done) { // Use select to make sure we check our timer(s) at least once a second fd_set rd; int fd = ConnectionNumber(dpy); struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; FD_ZERO(&rd); FD_SET(fd, &rd); if (select(fd+1, &rd, NULL, NULL, &tv) > 0) { int nQueued = XPending(dpy); if (nQueued == 0) printf("Waiting for key...\n"); while (nQueued > 0) { XEvent event; XNextEvent(dpy, &event); if (verbose) trace("event.type=%d", event.type); switch (event.type) { case KeyPress: { XKeyEvent* e = (XKeyEvent*)&event; if (verbose) trace("KeyPress 0x%x/0x%x", e->keycode, e->state); if (waitfor == 0) { waitfor = e->keycode; *mods = e->state; if (verbose) trace("wait for key 0x%x release...", waitfor); } } break; case KeyRelease: { XKeyEvent* e = (XKeyEvent*)&event; if (verbose) trace("KeyRelease 0x%x/0x%x", e->keycode, e->state); if (e->keycode == waitfor) { *kc = waitfor; if (verbose) trace("got key 0x%x release!", waitfor); } done = True; } break; } if (!done) nQueued = XPending(dpy); else nQueued = 0; } } } ungrab_keys(screen); return (Bool)(*kc != 0); }