aboutsummaryrefslogtreecommitdiff
path: root/src/Rahm/Desktop/Dragging.hs
diff options
context:
space:
mode:
authorJosh Rahm <rahm@google.com>2023-12-08 16:13:24 -0700
committerJosh Rahm <rahm@google.com>2023-12-08 16:13:24 -0700
commit9f176adbff807dafec2caee5e3b104e65caf9029 (patch)
tree8d31ec2a97dd0ae880e2a5e3a2c29b8331d22976 /src/Rahm/Desktop/Dragging.hs
parent33879cd90b0dd488540f7526d3eceab152a23d0f (diff)
downloadrde-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.hs27
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