Цель
Я хочу перенаправить ввод с клавиатуры в разные окна в зависимости от клавиши. Не весь ключ будет перенаправлен в одно и то же окно, я не могу использовать XSetInputFocus
.
Первая попытка: XGrabKey
Я обнаружил, что могу захватить определенные клавиши, а затем отправить событие в нужное окно. Я использовал XGrabKey вот так
XGrabKey( mDisplay(),
XKeysymToKeycode(mDisplay(),XK_F1) ,
AnyModifier ,
RootWindow(mDisplay(), mScreenNum),
false, //Events aren't sent to the focused window
GrabModeAsync,
GrabModeAsync );
Это не работает для клавиш F1–F4, но работает для F5 и F6. Это также не работает для некоторых обычных клавиш, таких как e, r и t. Могут быть и другие. Мне нужно иметь возможность перенаправлять Fkeys, поэтому это решение не сработало для меня.
Вторая попытка: XGrabKeyboard
Я пробовал с XGrabKeyboard, вот так
XGrabKeyboard(mDisplay(),
RootWindow(mDisplay(), mScreenNum),
false,
GrabModeAsync,
GrabModeAsync,
CurrentTime);
Он работает со всеми Fkeys, но создает другие проблемы. Когда клавиатура захвата активна, я больше не могу перемещать окна с помощью мыши (она все еще работает, если приложение перемещает свое окно), я не могу получить доступ к контекстным меню и мигающему символу «|». не отображается в областях ввода.
Другая информация
Об этой проблеме уже говорилось здесь, но они не найти решение. Я использую Lubuntu (LXDE), а не GNOME, и у меня все та же проблема.
Событие unmap может дать некоторую информацию:
Когда клавиатура не захвачена и я нажимаю правой кнопкой мыши
отображается контекстное меню, события отмены карты нет.
Когда я выхожу из контекстного меню:
У меня есть 3 события unmap: (я печатаю имя окна рядом с Unmap)
Unmap pcmanfm
Unmap pcmanfm
Unmap
Когда клавиатура схвачена и я нажимаю правой кнопкой мыши
У меня есть только 1 событие unmap:
Unmap
Похоже, что контекстное меню отображается до отображения.
Что я прошу
Я хотел бы либо:
- Используйте XGrabKeyboard без побочных эффектов
- Используйте XGrabKey с любым ключом
- Используйте другую функцию, которая позволит мне перенаправить ввод с клавиатуры
Спасибо.