Перенаправить ввод с клавиатуры XGrabKey или XGrabKeyboard
цель
Я хочу перенаправить ввод с клавиатуры для разных окон в зависимости от ключа. Не все ключи будут перенаправлены в одно окно, я не могу использовать 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 может дать некоторую информацию:
когда клавиатура не схватил и я щелкните правой кнопкой мыши
отображается контекстное меню, нет события unmap.
при выходе из контекстного меню:
у меня есть 3 события unmap : (я печатаю имя окна рядом с Unmap)
Unmap pcmanfm
Unmap pcmanfm
Unmap
когда клавиатура схватил и я щелкните правой кнопкой мыши
у меня есть только 1 событие unmap :
Unmap
похоже, что контекстное меню unmapped перед отображением.
то, что я прошу
Я хочу или:
- используйте XGrabKeyboard без побочных эффектов
- используйте XGrabKey с любым ключом
- используйте другой fonction, который позволит мне перенаправить ввод клавиатуры
спасибо вы.
1 ответов
Я не нашел решения проблемы XGrabKeyboard.
xgrabkey не удалось для некоторых ключей, потому что они уже были схвачены OpenBox. Openbox имеет некоторые встроенные горячие клавиши, которые используют XGrabKey. Потому что я использую AnyModifier
, Если какой-либо захват был сделан, который включает этот ключ, то захват не удастся.
например, если программа захватывает Ctrl+F1
вы не можете захватить F1 с AnyModifier. Вы можете захватить F1 без модификатора, но захват не будет активным, если пользователь нажмет Alt+F1
например.
чтобы исправить эту проблему, я удалил горячие клавиши клавиатуры Openbox, потому что они не были важны для меня. Для этого я изменил конфигурационный файл.
другое решение-захватить ключ со всем модификатором, но тот, который уже схвачен. Захват ключа без модификатора недостаточно, потому что, например, Num-Lock является модификатором, и вы, вероятно, не хотите, чтобы ваш захват был активным или не зависел от Ням-Лок.