Постановка проблемы: В среде linux требуется виртуальная клавиатура, которая должна запускаться каждый раз, когда пользователь нажимает на редактируемые компоненты пользовательского интерфейса, такие как виртуальная клавиатура в iPhone, iPad, Android и т. Д.
Обзор решения: В качестве основы для виртуальной клавиатуры была взята спичечная коробка-клавиатура, которая представляет собой приложение с открытым исходным кодом и предоставляет богатые функциональные возможности.Механизм автоматического переключения был решен путем изменения источника QT и GTK для отправки сигналов Dbus по сигналу «on_press» (когда пользователь нажимает на редактируемую композицию пользовательского интерфейса) некоторому демону, который включает виртуальную клавиатуру.
Проблема: Сигнал Dbus "on_press" посылается, когда пользователь нажимает или щелкает компоненты пользовательского интерфейса, т.е. во время события "on_click" QT и GTK.Виртуальная клавиатура скрыта на событии focus_out QT и GTK.Клавиатура не включается во время события «focus_in», потому что некоторые приложения во время запуска генерируют событие «focus_in» на некоторое время, а затем событие «focus_out», поэтому виртуальная клавиатура отображалась на короткое время, а затем скрывалась, что было неточно.это было решено путем генерации сигнала Dbus on_press во время событий GTK и QT on_click.
Так что теперь у меня есть еще одна проблема.
- Допустим, пользователь нажал на редактируемый блок, появилась виртуальная клавиатура, "on_click" (GTK, событие QT) -> "on_press" (Сигнал Dbus) -> запускается виртуальная клавиатура
- Затем пользователь нажимает кнопку Tab, чтобы переключиться в другое редактируемое окно.«focus_out» (GTK, событие QT) -> «hide_keyboard» (сигнал Dbus) -> виртуальная клавиатура скрыта и больше не запускается.
Это происходит потому, что второе редактируемое поле выдает «focus_in»событие, а не событие "on_click".
Поэтому, пожалуйста, помогите найти решение для случая, когда пользователь переключается между редактируемым полем с помощью кнопки табуляции.Или, если у вас есть другое решение, пожалуйста, предложите его.
Заранее спасибо, Левон