aboutsummaryrefslogtreecommitdiffstats
path: root/FlexibleResize.hs
diff options
context:
space:
mode:
authorSpencer Janssen <sjanssen@cse.unl.edu>2007-11-01 21:10:59 +0100
committerSpencer Janssen <sjanssen@cse.unl.edu>2007-11-01 21:10:59 +0100
commit4866f2e367dfcf22a9591231ba40948826a1b438 (patch)
tree7a245caee3f146826b267d773b7eaa80386a818e /FlexibleResize.hs
parent47589e1913fb9530481caedb543978a30d4323ea (diff)
downloadXMonadContrib-4866f2e367dfcf22a9591231ba40948826a1b438.tar.gz
XMonadContrib-4866f2e367dfcf22a9591231ba40948826a1b438.tar.xz
XMonadContrib-4866f2e367dfcf22a9591231ba40948826a1b438.zip
Hierarchify
darcs-hash:20071101201059-a5988-fc1f1262bec1b69e13ba18ae7cefeafc8c4471d4.gz
Diffstat (limited to 'FlexibleResize.hs')
-rw-r--r--FlexibleResize.hs67
1 files changed, 0 insertions, 67 deletions
diff --git a/FlexibleResize.hs b/FlexibleResize.hs
deleted file mode 100644
index e6bb338..0000000
--- a/FlexibleResize.hs
+++ /dev/null
@@ -1,67 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module : XMonadContrib.FlexibleResize
--- Copyright : (c) Lukas Mai
--- License : BSD3-style (see LICENSE)
---
--- Maintainer : <l.mai@web.de>
--- Stability : unstable
--- Portability : unportable
---
--- Lets you resize floating windows from any corner.
---
------------------------------------------------------------------------------
-
-module XMonadContrib.FlexibleResize (
- -- * Usage
- -- $usage
- XMonadContrib.FlexibleResize.mouseResizeWindow
-) where
-
-import XMonad
-import XMonad.Operations
-import Graphics.X11.Xlib
-import Graphics.X11.Xlib.Extras
-import Foreign.C.Types
-
--- $usage
--- Put something like this in your Config.hs file:
---
--- > import qualified XMonadContrib.FlexibleResize as Flex
--- > mouseBindings = M.fromList
--- > [ ...
--- > , ((modMask, button3), (\w -> focus w >> Flex.mouseResizeWindow w)) ]
-
--- %import qualified XMonadContrib.FlexibleResize as Flex
--- %mousebind , ((modMask, button3), (\\w -> focus w >> Flex.mouseResizeWindow w))
-
-mouseResizeWindow :: Window -> X ()
-mouseResizeWindow w = whenX (isClient w) $ withDisplay $ \d -> do
- io $ raiseWindow d w
- wa <- io $ getWindowAttributes d w
- sh <- io $ getWMNormalHints d w
- (_, _, _, _, _, ix, iy, _) <- io $ queryPointer d w
- let
- [pos_x, pos_y, width, height] = map (fromIntegral . ($ wa)) [wa_x, wa_y, wa_width, wa_height]
- west = firstHalf ix width
- north = firstHalf iy height
- (cx, fx, gx) = mkSel west width pos_x
- (cy, fy, gy) = mkSel north height pos_y
- io $ warpPointer d none w 0 0 0 0 cx cy
- mouseDrag (\ex ey -> do
- wa' <- io $ getWindowAttributes d w
- let [px, py] = map (fromIntegral . ($ wa')) [wa_x, wa_y]
- io $ moveResizeWindow d w (fx px (fromIntegral ex))
- (fy py (fromIntegral ey))
- `uncurry` applySizeHints sh (gx $ fromIntegral ex, gy $ fromIntegral ey))
- (float w)
- where
- firstHalf :: CInt -> Position -> Bool
- firstHalf a b = fromIntegral a * 2 <= b
- cfst = curry fst
- csnd = curry snd
- mkSel :: Bool -> Position -> Position -> (Position, a -> a -> a, CInt -> Position)
- mkSel b k p =
- if b
- then (0, csnd, ((k + p) -) . fromIntegral)
- else (k, cfst, subtract p . fromIntegral)