aboutsummaryrefslogtreecommitdiffstats
path: root/XMonad/Layout/DraggingVisualizer.hs
diff options
context:
space:
mode:
authorJan Vornberger <jan.vornberger@informatik.uni-oldenburg.de>2009-11-29 01:34:31 +0100
committerJan Vornberger <jan.vornberger@informatik.uni-oldenburg.de>2009-11-29 01:34:31 +0100
commit5d008f4dc2a692fff7f705ac30e21031d53ba864 (patch)
treef960a5295c94cf6b1dc69be9f76fd5e3c74cbb05 /XMonad/Layout/DraggingVisualizer.hs
parentc7e2085ea1e8ef2f6b282daeda4d846fbf6d6087 (diff)
downloadXMonadContrib-5d008f4dc2a692fff7f705ac30e21031d53ba864.tar.gz
XMonadContrib-5d008f4dc2a692fff7f705ac30e21031d53ba864.tar.xz
XMonadContrib-5d008f4dc2a692fff7f705ac30e21031d53ba864.zip
Decoration that allows to switch the position of windows by dragging them onto each other.
Ignore-this: 38aff0f3beb1a1eb304219c4f3e85593 darcs-hash:20091129003431-594c5-3d57fe54414de7e9cfd10192cc18aa561e2b77f2.gz
Diffstat (limited to 'XMonad/Layout/DraggingVisualizer.hs')
-rw-r--r--XMonad/Layout/DraggingVisualizer.hs48
1 files changed, 48 insertions, 0 deletions
diff --git a/XMonad/Layout/DraggingVisualizer.hs b/XMonad/Layout/DraggingVisualizer.hs
new file mode 100644
index 0000000..157fef1
--- /dev/null
+++ b/XMonad/Layout/DraggingVisualizer.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveDataTypeable, TypeSynonymInstances, MultiParamTypeClasses, FlexibleContexts #-}
+----------------------------------------------------------------------------
+-- |
+-- Module : XMonad.Layout.DraggingVisualizer
+-- Copyright : (c) Jan Vornberger 2009
+-- License : BSD3-style (see LICENSE)
+--
+-- Maintainer : jan.vornberger@informatik.uni-oldenburg.de
+-- Stability : unstable
+-- Portability : not portable
+--
+-- A helper module to visualize the process of dragging a window by
+-- making it follow the mouse cursor. See "XMonad.Layout.WindowSwitcherDecoration"
+-- for a module that makes use of this.
+--
+-----------------------------------------------------------------------------
+
+module XMonad.Layout.DraggingVisualizer
+ ( draggingVisualizer,
+ DraggingVisualizerMsg (..)
+ ) where
+
+import XMonad
+import XMonad.Layout.LayoutModifier
+
+data DraggingVisualizer a = DraggingVisualizer (Maybe (Window, Rectangle)) deriving ( Read, Show )
+draggingVisualizer :: LayoutClass l Window => l Window -> ModifiedLayout DraggingVisualizer l Window
+draggingVisualizer = ModifiedLayout $ DraggingVisualizer Nothing
+
+data DraggingVisualizerMsg = DraggingWindow Window Rectangle
+ | DraggingStopped
+ deriving ( Typeable, Eq )
+instance Message DraggingVisualizerMsg
+
+instance LayoutModifier DraggingVisualizer Window where
+ modifierDescription (DraggingVisualizer _) = "DraggingVisualizer"
+ pureModifier (DraggingVisualizer (Just dragged@(draggedWin, _))) _ _ wrs =
+ if draggedWin `elem` (map fst wrs)
+ then (dragged : rest, Nothing)
+ else (wrs, Just $ DraggingVisualizer Nothing)
+ where
+ rest = filter (\(w, _) -> w /= draggedWin) wrs
+ pureModifier _ _ _ wrs = (wrs, Nothing)
+
+ pureMess (DraggingVisualizer _) m = case fromMessage m of
+ Just (DraggingWindow w rect) -> Just $ DraggingVisualizer $ Just (w, rect)
+ Just (DraggingStopped) -> Just $ DraggingVisualizer Nothing
+ _ -> Nothing