예제 #1
0
파일: iocane.c 프로젝트: Gaboose/Iocane
/* 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;
	}
}
예제 #2
0
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;
}
예제 #3
0
static void XF86AudioKeyGrab_cleanup()
{
	ungrab_keys();
	gdk_window_remove_filter(NULL, xf86audio_filter, map);
}
예제 #4
0
파일: wndo-pick.c 프로젝트: wijjo/wndo
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);
}