diff options
| author | Josh Rahm <rahm@google.com> | 2023-12-08 16:13:24 -0700 |
|---|---|---|
| committer | Josh Rahm <rahm@google.com> | 2023-12-08 16:13:24 -0700 |
| commit | 9f176adbff807dafec2caee5e3b104e65caf9029 (patch) | |
| tree | 8d31ec2a97dd0ae880e2a5e3a2c29b8331d22976 /src/Rahm/Desktop/Dragging.hs | |
| parent | 33879cd90b0dd488540f7526d3eceab152a23d0f (diff) | |
| download | rde-pinwindow.tar.gz rde-pinwindow.tar.bz2 rde-pinwindow.zip | |
Got the pin window layout to work. It works better than the main branch for now except the border color does not change.pinwindow
Diffstat (limited to 'src/Rahm/Desktop/Dragging.hs')
| -rw-r--r-- | src/Rahm/Desktop/Dragging.hs | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/Rahm/Desktop/Dragging.hs b/src/Rahm/Desktop/Dragging.hs index 5252390..853cf43 100644 --- a/src/Rahm/Desktop/Dragging.hs +++ b/src/Rahm/Desktop/Dragging.hs @@ -5,8 +5,9 @@ import Control.Monad.Trans (lift) import Control.Monad.Trans.Maybe (MaybeT (MaybeT)) import Data.IORef (newIORef, readIORef, writeIORef) import Data.Maybe (fromMaybe) -import Rahm.Desktop.Common (runMaybeT_, setBorderColor, pointerWindow, pointerLocation) +import Rahm.Desktop.Common (pointerLocation, pointerWindow, runMaybeT_, setBorderColor) import Rahm.Desktop.Layout.Hole (addHoleForWindow, removeHoleForWindow, resetHole) +import Rahm.Desktop.Layout.PinWindow (isWindowPinned, pinWindow, unpinWindow) import Rahm.Desktop.Logger import Rahm.Desktop.Marking (setAlternateWindows) import qualified Rahm.Desktop.StackSet as W @@ -80,6 +81,26 @@ ifReleased but (AfterDragAction act) = AfterDragAction $ \win b -> do ifReleased' :: X.Button -> (X.Window -> X.Button -> X ()) -> AfterDragAction ifReleased' but act = ifReleased but (AfterDragAction act) +mouseResizeWindowAndThen :: (X.Window -> X ()) -> + AfterDragAction -> X.Window -> X () +mouseResizeWindowAndThen beforeAction (AfterDragAction releaseAction) window = do + beforeAction window + windowPinned <- isWindowPinned window + unpinWindow window + tilePosition <- X.withWindowSet $ return . W.windowTilePosition window + mapM_ (X.broadcastMessage . flip addHoleForWindow window) tilePosition + + X.mouseResizeWindow window + + afterDrag $ do + X.broadcastMessage $ removeHoleForWindow window + curev <- X.asks X.currentEvent + when windowPinned $ + pinWindow window + releaseAction window (maybe 0 X.ev_button curev) + X.refresh + + mouseMoveWindowAndThen :: (X.Window -> X ()) -> AfterDragAction -> @@ -87,6 +108,8 @@ mouseMoveWindowAndThen :: X () mouseMoveWindowAndThen beforeAction (AfterDragAction releaseAction) window = do beforeAction window + windowPinned <- isWindowPinned window + unpinWindow window tilePosition <- X.withWindowSet $ return . W.windowTilePosition window mapM_ (X.broadcastMessage . flip addHoleForWindow window) tilePosition X.mouseMoveWindow window @@ -94,6 +117,8 @@ mouseMoveWindowAndThen beforeAction (AfterDragAction releaseAction) window = do afterDrag $ do X.broadcastMessage $ removeHoleForWindow window curev <- X.asks X.currentEvent + when windowPinned $ + pinWindow window releaseAction window (maybe 0 X.ev_button curev) X.refresh |