В настоящее время я пытаюсь отладить проблему, с которой я столкнулся, с программой 'matchbox-keyboard' (http://matchbox-project.org/), и я Надеюсь на помощь. matchbox-keyboard - это экранная клавиатура, которую я в настоящее время использую в киоске с сенсорным экраном, чтобы пользователи могли вводить базовый ввод для выполнения поиска и т. д. Она может быть немного старой, но, тем не менее, идеально подходит для моего приложения, потому что это Клавиатура «по требованию» (т.е. появляется только при необходимости), легкая и хорошо работает с оконным менеджером спичечных коробок, который я использую на устройстве. Однако один из сайтов, который должен посетить киоск, требует от пользователя временного входа в систему, и по какой-то причине экранная клавиатура исчезает всякий раз, когда пользователь щелкает поле пароля.
Сайт, который пользователи должны посетить, не может быть изменен, поэтому я решил попробовать исправить спичечную клавиатуру, чтобы изменить это поведение.С этой целью я отследил проблему до настраиваемого атома, определенного в коде, как показано ниже
typedef enum {
MBKeyboardRemoteNone = 0,
MBKeyboardRemoteShow,
MBKeyboardRemoteHide,
MBKeyboardRemoteToggle,
} MBKeyboardRemoteOperation;
=============
void
mb_kbd_remote_init (MBKeyboardUI *ui)
{
Atom_MB_IM_INVOKER_COMMAND = XInternAtom(mb_kbd_ui_x_display(ui),
"_MB_IM_INVOKER_COMMAND", False);
}
Этот атом затем проверяется в Xevents, а затем данные из xevent ( xevent-> xclient.data.l [0]
) используются, чтобы определить, в какое состояние поместить клавиатуру. Я не могу понять, как X display знает, когда Xevent должен быть типом _MB_IM_INVOKER_COMMAND, и как он фактически устанавливает значение данных. В частности, как / почему он устанавливает значение xevent-> xclient.data.l [0]
равным 2 ( MBKeyboardRemoteHide
), когда я ввожу поле пароля.
Я попытался просмотреть код на предмет ссылок на упомянутые здесь критические объекты, а также почитать о событиях Xlib из руководства здесь: http://tronche.com/gui/x/xlib/events/ и поиск ответов в Google, но, честно говоря, это просто немного выше моей головы, и я не могу понять эту проблему. На данный момент он перестал быть необходимостью для моего проекта киоска и стал с моей стороны все более любопытным (и чем-то, что сводит меня с ума, пока я не выясню это), поэтому, если бы кто-нибудь мог помочь мне получить некоторые ответы, я был бы самый благодарный.
========== Обновление ==========
Дальнейшее тестирование / информация:
проблема, похоже, не связана с реализацией браузера, поскольку я пробовал желаемый веб-сайт, а также базовая тестовая HTML-страница, которая имеет только текстовое поле и поле пароля, в браузере gecko (Firefox), а также в браузере webkit (Midori), и в обоих браузерах на обеих страницах поведение было то же.Вот тестовая HTML-страница для справки: