summaryrefslogtreecommitdiff
path: root/src-3.0/GF/Fudgets/EventF.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2008-05-21 09:26:44 +0000
committeraarne <aarne@cs.chalmers.se>2008-05-21 09:26:44 +0000
commit055c0d0d5a5bb0dc75904fe53df7f2e4f5732a8f (patch)
tree0e63fb68c69c8f6ad0f78893c63420f0a3600e1c /src-3.0/GF/Fudgets/EventF.hs
parent915a1de71783ab8446b1af9e72c7ba7dfbc12d3f (diff)
GF/src is now for 2.9, and the new sources are in src-3.0 - keep it this way until the release of GF 3
Diffstat (limited to 'src-3.0/GF/Fudgets/EventF.hs')
-rw-r--r--src-3.0/GF/Fudgets/EventF.hs51
1 files changed, 51 insertions, 0 deletions
diff --git a/src-3.0/GF/Fudgets/EventF.hs b/src-3.0/GF/Fudgets/EventF.hs
new file mode 100644
index 000000000..7ea058dfa
--- /dev/null
+++ b/src-3.0/GF/Fudgets/EventF.hs
@@ -0,0 +1,51 @@
+----------------------------------------------------------------------
+-- |
+-- Module : EventF
+-- Maintainer : AR
+-- Stability : (stable)
+-- Portability : (portable)
+--
+-- > CVS $Date: 2005/04/21 16:22:16 $
+-- > CVS $Author: bringert $
+-- > CVS $Revision: 1.4 $
+--
+-- (Description of the module)
+-----------------------------------------------------------------------------
+
+module GF.Fudgets.EventF where
+import AllFudgets
+
+-- | The first string is the name of the key (e.g., "Down" for the down arrow key)
+--
+-- The modifiers list shift, control and alt keys that were active while the
+-- key was pressed.
+--
+-- The last string is the text produced by the key (for keys that produce
+-- printable characters, empty for control keys).
+type KeyPress = ((String,[Modifiers]),String)
+
+keyboardF :: F i o -> F i (Either KeyPress o)
+keyboardF fud = idRightSP (concatMapSP post) >^^=< oeventF mask fud
+ where
+ post (KeyEvent {type'=Pressed,keySym=sym,state=mods,keyLookup=s}) =
+ [((sym,mods),s)]
+ post _ = []
+
+ mask = [KeyPressMask,
+ EnterWindowMask, LeaveWindowMask -- because of CTT implementation
+ ]
+
+-- | Output events:
+oeventF em fud = eventF em (idLeftF fud)
+
+-- | Feed events to argument fudget:
+eventF eventmask = serCompLeftToRightF . groupF startcmds eventK
+ where
+ startcmds = [XCmd $ ChangeWindowAttributes [CWEventMask eventmask],
+ XCmd $ ConfigureWindow [CWBorderWidth 0]]
+ eventK = K $ mapFilterSP route
+ where route = message low high
+ low (XEvt event) = Just (High (Left event))
+ low _ = Nothing
+ high h = Just (High (Right h))
+