diff options
Diffstat (limited to 'Operations.hs')
-rw-r--r-- | Operations.hs | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/Operations.hs b/Operations.hs index c8a9d7a..3e2a561 100644 --- a/Operations.hs +++ b/Operations.hs @@ -511,14 +511,17 @@ mouseDrag :: (Position -> Position -> X ()) -> X () -> X () mouseDrag f done = do drag <- gets dragging case drag of - Just _ -> return () -- error case? we're already dragging - Nothing -> do XConf { theRoot = root, display = d } <- ask - io $ grabPointer d root False (buttonReleaseMask .|. pointerMotionMask) - grabModeAsync grabModeAsync none none currentTime - let cleanup = do io $ ungrabPointer d currentTime - modify $ \s -> s { dragging = Nothing } - done - modify $ \s -> s { dragging = Just (f, cleanup) } + Just _ -> return () -- error case? we're already dragging + Nothing -> do + XConf { theRoot = root, display = d } <- ask + io $ grabPointer d root False (buttonReleaseMask .|. pointerMotionMask) + grabModeAsync grabModeAsync none none currentTime + modify $ \s -> s { dragging = Just (f, cleanup) } + where + cleanup = do + withDisplay $ io . flip ungrabPointer currentTime + modify $ \s -> s { dragging = Nothing } + done mouseMoveWindow :: Window -> X () mouseMoveWindow w = whenX (isClient w) $ withDisplay $ \d -> do |