xcb_grab_key XCB_MOD_MASK_ANY и XCB_GRAB_ANY не работают - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь использовать XCB, чтобы получить все ключи с любыми модификаторами (глобально). В руководстве по функции xcb_grab_key сказано, что XCB_GRAB_ANY используется для всех ключей, а XCB_MOD_MASK_ANY - для любого модификатора, но когда я использую любой из них, он не работает: (

Вот пример программы:

#include <stdio.h>
#include <stdlib.h>
#define XK_LATIN1
#include <xcb/xcb.h>
#include <xcb/xcb_keysyms.h>
#include <X11/keysymdef.h>  

int main () {
    xcb_connection_t *connection = xcb_connect(NULL, NULL);

    xcb_screen_t *screen = xcb_setup_roots_iterator(xcb_get_setup(connection)).data;

    xcb_key_symbols_t * keysyms = xcb_key_symbols_alloc(connection);
    xcb_keycode_t * keycodesPtr = xcb_key_symbols_get_keycode(keysyms, XK_space);

    // grabbing a specific key (in this case space) with specific or no modifiers (in this case none) like this works
    xcb_grab_key(connection, 1, screen->root, XCB_NONE, keycodesPtr[0], XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);

    // grabbing with XCB_MOD_MASK_ANY (any modifier) like this doesn't work
    xcb_grab_key(connection, 1, screen->root, XCB_MOD_MASK_ANY, keycodesPtr[0], XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);

    // grabbing with XCB_GRAB_ANY (any key) like this doesn't work
    xcb_grab_key(connection, 1, screen->root, XCB_NONE, XCB_GRAB_ANY, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);

    xcb_flush(connection);

    xcb_generic_event_t *event;
    while ( (event = xcb_wait_for_event(connection)) ) {
        switch (event->response_type & ~0x80) {
            case XCB_KEY_PRESS: {
                puts("key press");
                break;
            }
            case XCB_KEY_RELEASE: {
                puts("key release");
                break;
            }
        }
        free(event);
    }

    return 0;
}

Если Я go просматриваю и комментирую другие "xcb_grab_key", только верхний из них работает.

Этот пост нашел то же самое, но как я могу исправить / обойти это, когда я хотите все ключи с любыми модификаторами?

Я нахожусь на Void Linux.

...