2011-01-13 5 views
6

Dichiarazione di problema: La tastiera virtuale è necessaria in ambiente Linux che deve essere avviato ogni volta che l'utente preme componenti modificabili dell'interfaccia utente, come la tastiera virtuale in iPhone, iPad, Android, ecc.Tastiera di avvio automatico in Linux quando l'utente preme componenti UI modificabili

Panoramica soluzioni: Come base per la tastiera virtuale è stata utilizzata una tastiera matchbox che è un'applicazione open-source e offre funzionalità avanzate. Il meccanismo di auto-commutazione è stato risolto modificando la sorgente di QT e GTK per inviare segnali Dbus sul segnale "on_press" (quando l'utente preme la compilazione dell'interfaccia utente modificabile) su un demone che attiva la tastiera virtuale.

Edizione: "on_press" Il segnale Dbus viene inviato quando l'utente preme o fa clic sui componenti dell'interfaccia utente, ad esempio durante l'evento "on_click" di QT e GTK. La tastiera virtuale è nascosta nell'evento "focus_out" di QT e GTK. La tastiera non viene attivata durante l'evento "focus_in" perché alcune applicazioni durante l'avvio emettono l'evento "focus_in" per un momento, quindi emettono l'evento "focus_out", quindi la tastiera virtuale è stata visualizzata per un breve periodo, quindi nascosta e non accurata. questo è stato risolto generando il segnale Dbus "on_press" durante gli eventi GTK e QT "on_click".

Quindi ora ho un altro problema.

  1. consente di dire utente ha premuto sulla scatola modificabile, tastiera virtuale è apparso, "on_click" (GTK, evento QT) -> "on_press" (segnale dBus) -> tastiera virtuale viene lanciato
  2. Poi l'utente preme su Pulsante Tab per passare ad un'altra casella modificabile. "focus_out" (evento GTK, QT) -> "hide_keyboard" (segnale Dbus) -> la tastiera virtuale è nascosta e non viene avviata di nuovo.

Ciò accade perché la seconda casella modificabile emette l'evento "focus_in" e non "on_click".

Quindi, per favore aiutatemi a trovare una soluzione per il caso quando l'utente passa dalla casella modificabile con il tasto tab. O se hai completamente altra soluzione, per favore suggeriscila.

Grazie in anticipo, Levon

risposta

1

Su piattaforme supportate (embedded Linux, WinCE) Qt emette una speciale QEvent quando pannello di immissione software deve essere visualizzata;

QEvent::RequestSoftwareInputPanel 

Descrizione è;

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

Sono l'autore di Firenze Virtual Keyboard: http://florence.sourceforge.net. Ho usato at-spi (http://en.wikipedia.org/wiki/Assistive_Technology_Service_Provider_Interface) per risolvere il problema. Il vantaggio di at-spi è che funziona non solo con GTK e Qt ma anche con java, Firefox e Libre/OpenOffice.

Problemi correlati