Автоматический запуск клавиатуры в Linux, когда пользователь нажимает на редактируемые компоненты пользовательского интерфейса - PullRequest
6 голосов
/ 13 января 2011

Постановка проблемы: В среде 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.

Так что теперь у меня есть еще одна проблема.

  1. Допустим, пользователь нажал на редактируемый блок, появилась виртуальная клавиатура, "on_click" (GTK, событие QT) -> "on_press" (Сигнал Dbus) -> запускается виртуальная клавиатура
  2. Затем пользователь нажимает кнопку Tab, чтобы переключиться в другое редактируемое окно.«focus_out» (GTK, событие QT) -> «hide_keyboard» (сигнал Dbus) -> виртуальная клавиатура скрыта и больше не запускается.

Это происходит потому, что второе редактируемое поле выдает «focus_in»событие, а не событие "on_click".

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

Заранее спасибо, Левон

Ответы [ 2 ]

5 голосов
/ 30 марта 2011

Я являюсь автором виртуальной клавиатуры Florence: http://florence.sourceforge.net. Я использовал at-spi (http://en.wikipedia.org/wiki/Assistive_Technology_Service_Provider_Interface) для решения проблемы. Преимущество at-spi в том, что он работает не только с GTK и Qt, нотакже с Java, Firefox и Libre / OpenOffice.

1 голос
/ 13 января 2011

На поддерживаемых платформах (Embedded Linux, WinCE) Qt выдает специальный QEvent, когда должна отображаться панель ввода программного обеспечения;

QEvent::RequestSoftwareInputPanel   

Описание есть;

A widget wants to open a software input panel (SIP).
...