diff options
-rw-r--r-- | Main.hs | 4 | ||||
-rw-r--r-- | Operations.hs | 14 | ||||
-rw-r--r-- | XMonad.hs | 2 |
3 files changed, 13 insertions, 7 deletions
@@ -224,4 +224,6 @@ handle e@(ConfigureRequestEvent {ev_window = w}) = withDisplay $ \dpy -> do -- the root may have configured handle (ConfigureEvent {ev_window = w}) = whenX (isRoot w) rescreen -handle _ = return () -- trace (eventName e) -- ignoring +handle e = sendMessage e -- trace (eventName e) -- ignoring + +instance Message Event diff --git a/Operations.hs b/Operations.hs index 92f48b2..eb3a871 100644 --- a/Operations.hs +++ b/Operations.hs @@ -335,7 +335,11 @@ switchLayout = layout (\(x, xs) -> let xs' = xs ++ [x] in (head xs', tail xs')) -- TODO, this will refresh on Nothing. -- sendMessage :: Message a => a -> X () -sendMessage a = layout $ \x@(l, ls) -> maybe x (flip (,) ls) (modifyLayout l (SomeMessage a)) +sendMessage a = do n <- (W.tag . W.workspace . W.current) `fmap` gets windowset + Just (l,ls) <- M.lookup n `fmap` gets layouts + ml' <- modifyLayout l (SomeMessage a) + whenJust ml' $ \l' -> do modify $ \s -> s { layouts = M.insert n (l',ls) (layouts s) } + refresh -- -- Builtin layout algorithms: @@ -358,7 +362,7 @@ instance Message IncMasterN -- a plea for tuple sections: map . (,sc) full :: Layout full = Layout { doLayout = \sc ws -> return [ (w,sc) | w <- ws ] - , modifyLayout = const Nothing } -- no changes + , modifyLayout = const (return Nothing) } -- no changes -- -- The tiling mode of xmonad, and its operations. @@ -366,8 +370,8 @@ full = Layout { doLayout = \sc ws -> return [ (w,sc) | w <- ws ] tall :: Int -> Rational -> Rational -> Layout tall nmaster delta frac = Layout { doLayout = \r -> return . ap zip (tile frac r nmaster . length) - , modifyLayout = \m -> fmap resize (fromMessage m) `mplus` - fmap incmastern (fromMessage m) } + , modifyLayout = \m -> return $ msum [fmap resize (fromMessage m) + ,fmap incmastern (fromMessage m)] } where resize Shrink = tall nmaster delta (frac-delta) resize Expand = tall nmaster delta (frac+delta) @@ -381,7 +385,7 @@ mirrorRect (Rectangle rx ry rw rh) = (Rectangle ry rx rh rw) mirror :: Layout -> Layout mirror (Layout { doLayout = dl, modifyLayout = ml }) = Layout { doLayout = \sc w -> map (second mirrorRect) `fmap` dl (mirrorRect sc) w - , modifyLayout = fmap mirror . ml } + , modifyLayout = fmap (fmap mirror) . ml } -- | tile. Compute the positions for windows using the default 2 pane tiling algorithm. -- @@ -109,7 +109,7 @@ atom_WM_STATE = getAtom "WM_STATE" -- 'modifyLayout' can be considered a branch of an exception handler. -- data Layout = Layout { doLayout :: Rectangle -> [Window] -> X [(Window, Rectangle)] - , modifyLayout :: SomeMessage -> Maybe Layout } + , modifyLayout :: SomeMessage -> X (Maybe Layout) } -- Based on ideas in /An Extensible Dynamically-Typed Hierarchy of Exceptions/, -- Simon Marlow, 2006. Use extensible messages to the modifyLayout handler. |