Let the core know about MouseResizableTile's draggers, so they are stacked correctly

This commit is contained in:
Jan Vornberger 2009-12-23 14:54:28 +00:00
parent e8c0f39fd5
commit adb7144a98

View File

@ -1,4 +1,4 @@
{-# LANGUAGE DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses, PatternGuards #-} {-# LANGUAGE DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses, PatternGuards, TypeSynonymInstances #-}
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
-- | -- |
-- Module : XMonad.Layout.MouseResizableTile -- Module : XMonad.Layout.MouseResizableTile
@ -25,6 +25,7 @@ module XMonad.Layout.MouseResizableTile (
import XMonad hiding (tile, splitVertically, splitHorizontallyBy) import XMonad hiding (tile, splitVertically, splitHorizontallyBy)
import qualified XMonad.StackSet as W import qualified XMonad.StackSet as W
import XMonad.Util.XUtils import XMonad.Util.XUtils
import Control.Applicative((<$>))
-- $usage -- $usage
-- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@: -- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:
@ -100,7 +101,7 @@ mouseResizableTile = MRT 1 mrtFraction [] [] [] 0 0 False
mouseResizableTileMirrored :: MouseResizableTile a mouseResizableTileMirrored :: MouseResizableTile a
mouseResizableTileMirrored= MRT 1 mrtFraction [] [] [] 0 0 True mouseResizableTileMirrored= MRT 1 mrtFraction [] [] [] 0 0 True
instance LayoutClass MouseResizableTile a where instance LayoutClass MouseResizableTile Window where
doLayout state sr (W.Stack w l r) = doLayout state sr (W.Stack w l r) =
let wins = reverse l ++ w : r let wins = reverse l ++ w : r
num = length wins num = length wins
@ -111,8 +112,10 @@ instance LayoutClass MouseResizableTile a where
rects' = map (mirrorAdjust id mirrorRect . sanitizeRectangle sr') rects rects' = map (mirrorAdjust id mirrorRect . sanitizeRectangle sr') rects
in do in do
mapM_ deleteDragger $ draggers state mapM_ deleteDragger $ draggers state
newDraggers <- mapM (createDragger sr . adjustForMirror (isMirrored state)) preparedDraggers (draggerWrs, newDraggers) <- unzip <$> mapM
return (zip wins rects', Just $ state { draggers = newDraggers, (createDragger sr . adjustForMirror (isMirrored state))
preparedDraggers
return (zip wins rects' ++ draggerWrs, Just $ state { draggers = newDraggers,
focusPos = length l, focusPos = length l,
numWindows = length wins }) numWindows = length wins })
where where
@ -227,11 +230,11 @@ splitHorizontallyBy f (Rectangle sx sy sw sh) = ((leftHalf, rightHalf), (dragger
draggerRect = Rectangle (sx + fromIntegral leftw - mrtDraggerOffset) sy mrtDraggerSize sh draggerRect = Rectangle (sx + fromIntegral leftw - mrtDraggerOffset) sy mrtDraggerSize sh
draggerInfo = MasterDragger sx (fromIntegral sw) draggerInfo = MasterDragger sx (fromIntegral sw)
createDragger :: Rectangle -> DraggerWithRect -> X DraggerWithWin createDragger :: Rectangle -> DraggerWithRect -> X ((Window, Rectangle), DraggerWithWin)
createDragger sr (draggerRect, draggerCursor, draggerInfo) = do createDragger sr (draggerRect, draggerCursor, draggerInfo) = do
draggerWin <- createInputWindow draggerCursor $ sanitizeRectangle sr draggerRect let draggerRect' = sanitizeRectangle sr draggerRect
io . flip lowerWindow draggerWin =<< asks display draggerWin <- createInputWindow draggerCursor draggerRect'
return (draggerWin, draggerInfo) return ((draggerWin, draggerRect'), (draggerWin, draggerInfo))
deleteDragger :: DraggerWithWin -> X () deleteDragger :: DraggerWithWin -> X ()
deleteDragger (draggerWin, _) = deleteWindow draggerWin deleteDragger (draggerWin, _) = deleteWindow draggerWin