mirror of
https://github.com/xmonad/xmonad.git
synced 2025-07-25 17:21:52 -07:00
Fix obscuring notifications when moving floats
Since4565e2c90e
, not only do we raise the floating window to top when starting dragging, we also restack all other managed windows directly below it (mouse{Move,Resize}Window now call `float` while dragging, which invoke `windows` and that restacks all windows). This means that as soon as we start dragging, all xmonad-managed windows are raised to the top, obscuring any unmanaged (override-redirect) windows that were at the top before. The good thing about4565e2c90e
is that since we refloat and refresh on every mouse move while dragging, we no longer need the `raiseWindow`. It was probably only there so that it stays visible when dragging between Xinerama screens (3cb64d7461
), and that's taken care of by refloating the window on every move. As the refresh restacks everything anyway, the only function of the `raiseWindow` is to stack windows above unmanaged ones, which is likely undesirable. There is still one known issue related to obscuring notifications: https://github.com/xmonad/xmonad/issues/89 That one is caused by X opening new windows at the top of stacking order and xmonad then restacking all other windows directly beneath them if the new window is in the master position of the stack. Some notification daemons like dunst work around this by raising themselves whenever a new window is opened (77bfbc4f7f/src/x11/x.c (L348)
). Fixing this one is considerably more complicated as we'd need to keep track of (unmanaged) windows that wish to be stacked above new windows, therefore this won't be addressed here, and probably won't be addressed in xmonad core ever. Fixes: https://github.com/xmonad/xmonad/issues/208 Fixes:4565e2c90e
("fix #63: window jumping to origin position when dragging")
This commit is contained in:
@@ -32,6 +32,9 @@
|
||||
* Change `ScreenDetail` to a newtype and make `RationalRect` strict in
|
||||
its contents.
|
||||
|
||||
* Fixed dunst notifications being obscured when moving floats.
|
||||
https://github.com/xmonad/xmonad/issues/208
|
||||
|
||||
## 0.15 (September 30, 2018)
|
||||
|
||||
* Reimplement `sendMessage` to deal properly with windowset changes made
|
||||
|
@@ -637,7 +637,6 @@ mouseDrag f done = do
|
||||
-- | drag the window under the cursor with the mouse while it is dragged
|
||||
mouseMoveWindow :: Window -> X ()
|
||||
mouseMoveWindow w = whenX (isClient w) $ withDisplay $ \d -> do
|
||||
io $ raiseWindow d w
|
||||
wa <- io $ getWindowAttributes d w
|
||||
(_, _, _, ox', oy', _, _, _) <- io $ queryPointer d w
|
||||
let ox = fromIntegral ox'
|
||||
@@ -652,7 +651,6 @@ mouseMoveWindow w = whenX (isClient w) $ withDisplay $ \d -> do
|
||||
-- | resize the window under the cursor with the mouse while it is dragged
|
||||
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
|
||||
io $ warpPointer d none w 0 0 0 0 (fromIntegral (wa_width wa)) (fromIntegral (wa_height wa))
|
||||
|
Reference in New Issue
Block a user