mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -07:00
Let the core know about MouseResizableTile's draggers, so they are stacked correctly
This commit is contained in:
parent
e8c0f39fd5
commit
adb7144a98
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user