Если при нажатии и удержании захвачена клавиша, захватываются и другие клавиши

Я схватил ключ с XGrabKey:

int mods = 0;
bool ownerevents = true;
XGrabKey(display, MY_KEYCODE, mods, rootwin, ownerevents, GrabModeAsync, GrabModeAsync);

Он успешно захватывает ключ. В моем примере MY_KEYCODE соответствует ключу b. Итак, теперь мой цикл событий запускается, только если я нажимаю клавишу b. ОДНАКО, если я удерживаю нажатой клавишу b, а затем нажимаю другие клавиши, они также попадают в мой цикл событий и также блокируются, поэтому временно «захватываются». Я думал попробовать XAllowEvents в части KeyPressed, но это не работает.

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


person Noitidart    schedule 21.01.2017    source источник
comment
Нет, это невозможно. После нажатия захваченной клавиши захватывается вся клавиатура до тех пор, пока клавиша не будет отпущена. Что ты пытаешься сделать?   -  person n. 1.8e9-where's-my-share m.    schedule 22.01.2017
comment
Спасибо @n.m. за прочтение и комментарий! Как работают приложения, когда они отправляют другую клавишу, когда я нажимаю одну клавишу. Например, если я нажму e, он должен отправить a. Они отправляют его KeyRelease?   -  person Noitidart    schedule 22.01.2017
comment
Обычно это делается путем переназначения ключа.   -  person n. 1.8e9-where's-my-share m.    schedule 22.01.2017
comment
Ооо, спасибо @n.m. !   -  person Noitidart    schedule 22.01.2017
comment
@н.м. не могли бы вы опубликовать эти два комментария в качестве решения, чтобы я мог принять его. Мне нравится выражать вам свою признательность :)   -  person Noitidart    schedule 23.01.2017


Ответы (1)


Невозможно сделать то, что вы хотите. После нажатия захваченной клавиши захватывается вся клавиатура до тех пор, пока клавиша не будет отпущена.

Если вы хотите программно глобально заменить ключевой символ, привязанный к ключу, это обычно делается с помощью переназначения ключа. См. XChangeKeyboardMapping и XkbChangeMap.

Если вы просто хотите навсегда переназначить клавишу и не заботитесь о том, как это делается, вы, вероятно, захотите написать/изменить файл конфигурации и вообще не заморачиваться с программированием. См. xmodmap и xkbcomp.

person n. 1.8e9-where's-my-share m.    schedule 22.01.2017