2011-01-13 17 views
6

Wirtualna klawiatura jest wymagana w środowisku Linux, które powinno być uruchamiane za każdym razem, gdy użytkownik naciśnie na edytowalne składniki interfejsu użytkownika, takie jak wirtualna klawiatura na iPhonie, iPadzie, Android, itp.Automatyczne uruchamianie klawiatury w systemie Linux, gdy użytkownik naciśnie edytowalne komponenty interfejsu użytkownika

Przegląd rozwiązania: Jako podstawę wirtualnej klawiatury została zastosowana klawiatura matchbox, która jest aplikacją typu open-source i zapewnia bogatą funkcjonalność. Mechanizm automatycznego przełączania został rozwiązany poprzez modyfikację źródła QT i GTK w celu wysłania sygnałów Dbus w sygnale "on_press" (gdy użytkownik naciśnie na edytowalny kompilator UI) do jakiegoś demona, który włącza wirtualną klawiaturę.

Problem: „on_press” sygnał DBus jest wysyłany, gdy użytkownik naciśnie lub klika składników UI czyli podczas „on_click” wypadek QT i GTK. Wirtualna klawiatura jest ukryta w zdarzeniu "focus_out" w QT i GTK. Klawiatura nie jest włączona podczas zdarzenia "focus_in", ponieważ niektóre aplikacje podczas uruchamiania emitują na chwilę zdarzenie "focus_in", a następnie emitują zdarzenie "focus_out", więc wirtualna klawiatura była wyświetlana przez krótki czas, a następnie ukryta, co nie było dokładne. zostało to rozwiązane przez wygenerowanie sygnału "on_press" Dbus podczas "on_click" zdarzeń GTK i QT.

Więc teraz mam inny problem.

  1. Powiedzmy użytkownik nacisnął na edytowalny oknie pojawiła się wirtualna klawiatura, "on_click" (GTK, wydarzenie QT) -> "on_press" (sygnał DBus) -> klawiatura wirtualna jest uruchomiona
  2. Następnie użytkownik naciska na Przycisk Tab, aby przejść do innego edytowalnego pola. "focus_out" (GTK, zdarzenie QT) -> "hide_keyboard" (sygnał Dbus) -> wirtualna klawiatura jest ukryta i nie jest ponownie uruchamiana.

Dzieje się tak, ponieważ drugie okno edytowalne emituje zdarzenie "focus_in", a nie "on_click".

Więc proszę, pomóż znaleźć rozwiązanie dla sprawy, gdy użytkownik przełącza między edytowalnym pudełkiem a przyciskiem tabulatora. Lub jeśli masz zupełnie inne rozwiązanie, zasugeruj to.

Dzięki z góry, Levon

Odpowiedz

1

na obsługiwanych platformach (Embedded Linux, WinCE) Qt emituje specjalny QEvent gdy panel wejściowy oprogramowanie powinno być pokazane;

QEvent::RequestSoftwareInputPanel 

Opis jest;

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

Jestem autorem Florence Virtual Keyboard: http://florence.sourceforge.net. Użyłem at-spi (http://en.wikipedia.org/wiki/Assistive_Technology_Service_Provider_Interface), aby rozwiązać problem. Zaletą at-spi jest to, że działa nie tylko z GTK i Qt, ale także z java, Firefox i Libre/OpenOffice.