2011-07-14 14 views
5

¿Cómo emular/suplantar evento de pulsación de tecla en Haskell?¿Cómo emular/suplantar evento de pulsación de tecla en Haskell?

Tengo un teclado numérico en pantalla en mi Gui que quiero usar para escribir en una serie de entradas de texto en la ventana. El teclado está formado por widgets de botones y lo que quiero hacer es que el controlador onButtonClicked envíe un keyPressEvent para que se escriba el número/registro apropiado en la entrada de texto que tiene el foco. Empecé mirando Graphics.UI.Gtk.Gdk.Events e hice un evento de pulsación de tecla

Event my1Event = Key True True Graphics.UI.Gtk.Gdk.Events.currentTime [] False False False 0xffb1 "KP_1" Nothing 

no podía encontrar la manera de despachar este evento. De todos modos resulta que Event está en desuso y debería usar EventM. Encontré widgetEvent :: WidgetClass self => self -> EventM t Bool en Graphics.UI.Gtk.Abstract.Widget. En la API dice:

Función rara vez utilizada. Esta función se usa para emitir señales de eventos en un widget (esas señales nunca deberían emitirse sin usar esta función para hacerlo). Sin embargo, si desea sintetizar un evento, no use esta función; en su lugar, use mainDoEvent para que el evento se comporte como si estuviera en la cola de eventos.

Así que miré a mainDoEvent :: EventM t() en Graphics.UI.Gtk.General.General pero estoy seguro como el uso de EventM para crear una pulsación de tecla y no podía encontrar un ejemplo de mainDoEvent en uso. ¿Alguien puede aconsejarme cómo crear un evento de pulsación de tecla usando EventM y pasarlo al mainDoEvent o de alguna otra manera para hacer esto? Gracias.

+5

Esta pregunta es probablemente más sobre GTK que Haskell. Ver [aquí] (http://developer.gnome.org/gtk/2.24/gtk-General.html#gtk-main-do-event) para la API subyacente, que parece estar expuesta a través de un contenedor FFI trivial en este caso. –

Respuesta

1

Generar un evento es el camino equivocado. En su lugar, debe insertar su texto utilizando la función adecuada para su widget de texto. Por ejemplo, para TextBuffer s, use textBufferInsertAtCursor.

Cuestiones relacionadas