2011-01-13 20 views
6

Problema: El teclado virtual es obligatorio en el entorno Linux, que se debe iniciar cada vez que el usuario presiona en los componentes de la IU editable, como el teclado virtual en iPhone, iPad, Android, etc.Teclado de inicio automático en Linux cuando el usuario presiona en componentes de UI editables

Resumen de la solución: Como base para el teclado virtual se tomó el teclado de caja de fósforos que es una aplicación de código abierto y proporciona una funcionalidad rica. El mecanismo de auto-alternancia se resolvió modificando la fuente de QT y GTK para enviar señales Dbus en la señal "on_press" (cuando el usuario presiona comp. UI editable) a algún daemon que enciende el teclado virtual.

Issue: "on_press" La señal de Dbus se envía cuando el usuario presiona o hace clic en los componentes de la IU, es decir, durante el evento "on_click" de QT y GTK. El teclado virtual está oculto en el evento "focus_out" de QT y GTK. El teclado no se enciende durante el evento "focus_in" porque algunas aplicaciones durante el lanzamiento emiten el evento "focus_in" por un momento y luego emiten el evento "focus_out", por lo que el teclado virtual se muestra durante un tiempo corto y luego se oculta que no era preciso. esto se resolvió generando señal de Dbus "on_press" durante eventos "on_click" GTK y QT.

Así que ahora aquí tengo otro problema.

  1. permite decir el usuario pulsa sobre el cuadro editable, apareció teclado virtual, "on_click" (GTK, caso del intervalo QT) -> "on_press" (señal Dbus) -> teclado virtual se pone en marcha
  2. Entonces el usuario pulsa sobre Botón de tabulación para cambiar a otro cuadro editable. "focus_out" (GTK, evento QT) -> "hide_keyboard" (señal Dbus) -> el teclado virtual está oculto y no se inicia de nuevo.

Esto ocurre porque el segundo cuadro editable emite el evento "focus_in" y no el evento "on_click".

Por lo tanto, ayúdenos a encontrar una solución para el caso cuando el usuario cambie de cuadro editable con botón de tabulación. O si tiene otra solución por favor sugiérala.

Gracias de antemano, Levon

Respuesta

1

En las plataformas soportadas (Embedded Linux, Windows CE) Qt emite un especial QEvent cuando el panel de entrada de software debe ser mostrado;

QEvent::RequestSoftwareInputPanel 

Descripción is;

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

yo soy el autor de Florencia teclado virtual: http://florence.sourceforge.net. Utilicé at-spi (http://en.wikipedia.org/wiki/Assistive_Technology_Service_Provider_Interface) para resolver el problema. La ventaja de at-spi es que funciona no solo con GTK y Qt sino también con Java, Firefox y Libre/OpenOffice.

Cuestiones relacionadas