
On Wed, Aug 29, 2007 at 12:48:15PM +0200, Andrea Rossato wrote:
And this is the example code. You use it like this, in your Config.hs:
defaultLayouts = [ mouseFocus $ dragUpDownPane "dd" 0.1 0.5 , mouseFocus $ tabbed shrinkText defaultTConf , mouseFocus tiled ]
mouseFocus :: Layout a -> Layout a mouseFocus cl@(Layout {doLayout = dl , modifyLayout = ml}) = Layout {doLayout = doLay , modifyLayout = modLay} where doLay r s = dl r s modLay sm | Just e <- fromMessage sm = do handle_event e ml sm -- right?? | otherwise = ml sm
handle_event e@(CrossingEvent {ev_window = w, ev_event_type = t}) | t == enterNotify && ev_mode e == notifyNormal && ev_detail e /= notifyInferior = do focus w -- what should I do to XState after this? return () handle_event _ = return ()
Your doLay is buggy: when dl returns a modified layout, your mouseFocus "falls off". Similarly with ml. I would use LayoutHelpers: mouseFocus = layoutModifer idModDo modLay where modLay sm | Just e <- fromMessage sm = handle_event e >> return Nothing handle_event e@(CrossingEvent {ev_window = w, ev_event_type = t}) | t == enterNotify && ev_mode e == notifyNormal && ev_detail e /= notifyInferior = focus w -- what should I do to XState after this? handle_event _ = return () -- David Roundy http://www.darcs.net