mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-15 15:59:32 -06:00
52 lines
1.6 KiB
Haskell
52 lines
1.6 KiB
Haskell
----------------------------------------------------------------------
|
|
-- |
|
|
-- 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))
|
|
|