Как эмулировать / подделать событие нажатия клавиш в Haskell? - PullRequest
5 голосов
/ 14 июля 2011

Как эмулировать / подменить событие нажатия клавиши в Haskell?

У меня есть экранная цифровая клавиатура в моем графическом интерфейсе, которую я хочу использовать для записи в текстовые записи в окне. Клавиатура состоит из виджетов кнопок, и я хочу, чтобы обработчик onButtonClicked отправил keyPressEvent, чтобы соответствующий символ / номер был записан в текстовой записи, которая имеет фокус. Я начал с просмотра Graphics.UI.Gtk.Gdk.Events и произвел событие нажатия клавиши

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

Я не мог понять, как отправить это событие. В любом случае оказывается, что Event устарел и должен использовать EventM. Я нашел widgetEvent :: WidgetClass self => self -> EventM t Bool в Graphics.UI.Gtk.Abstract.Widget. В API это говорит:

Редко используемая функция. Эта функция используется для генерации сигналов событий на виджете (эти сигналы никогда не должны передаваться без использования этой функции). Если вы хотите синтезировать событие, не используйте эту функцию; вместо этого используйте mainDoEvent, чтобы событие велось так, как если бы оно было в очереди событий.

Поэтому я посмотрел на mainDoEvent :: EventM t () в Graphics.UI.Gtk.General.General, но не уверен, как использовать EventM для создания нажатия клавиши, и не смог найти пример использования mainDoEvent. Кто-нибудь может посоветовать мне, как создать событие нажатия клавиши с помощью EventM и передать его на mainDoEvent или каким-либо другим способом сделать это? Спасибо.

1 Ответ

1 голос
/ 15 июля 2011

Создание события - неправильный путь.Вместо этого вы должны вставить свой текст, используя соответствующую функцию для вашего текстового виджета.Например, для TextBuffer s используйте textBufferInsertAtCursor .

...