From eda52aa9eeffdf431637caafca573e3f1ef8d50d Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Mon, 24 Aug 2009 22:09:08 +0200 Subject: [PATCH] Make key events work. --- FPPrac.hs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/FPPrac.hs b/FPPrac.hs index 9f5ec9d..2a67b6e 100644 --- a/FPPrac.hs +++ b/FPPrac.hs @@ -162,20 +162,29 @@ runGUI w h (IS { .. }) = do buffer' <- Cairo.createImageSurface Cairo.FormatARGB32 w h buffer <- newIORef buffer' + -- Repack state + let state = IS { .. } + -- Register events Gtk.on window Gtk.exposeEvent $ onExpose buffer Gtk.on window Gtk.configureEvent $ onResize buffer + Gtk.on window Gtk.keyPressEvent $ onKeyDown state - -- Repack state - let state = IS { .. } - -- Process any initial requests processPostponed state -- Show the window and start the Gtk mainloop. Gtk.widgetShowAll window Gtk.mainGUI - + +-- | Called when a key is pressed. +onKeyDown :: IState -> EventM.EventM EventM.EKey Bool +onKeyDown s = do + keyval <- EventM.eventKeyVal + case Gtk.keyToChar keyval of + Just c -> liftIO $ post s (KeyIn c) + Nothing -> return () + return True -- No clue what this means -- | Called when (part of) the window should be redrawn. Copy the given surface -- to the exposed window on an expose event. -- 2.30.2