From d3403c078ef9eaa5a3e95c60ef029f36fef1db96 Mon Sep 17 00:00:00 2001 From: Spencer Janssen Date: Thu, 5 Jul 2007 21:52:13 +0200 Subject: Note and workaround bugs in Operations.float darcs-hash:20070705195213-a5988-2dd794ce7f294a43fd21d88ec7974679de60afb7.gz --- Main.hs | 8 ++++++-- Operations.hs | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Main.hs b/Main.hs index 7b7ac7c..efa7ab1 100644 --- a/Main.hs +++ b/Main.hs @@ -29,7 +29,7 @@ import Graphics.X11.Xinerama (getScreenInfo) import XMonad import Config -import StackSet (new, floating, member) +import StackSet (new, floating, member, findIndex, workspace, tag, current, visible) import qualified StackSet as W import Operations @@ -209,7 +209,11 @@ handle e@(ConfigureRequestEvent {ev_window = w}) = withDisplay $ \dpy -> do ws <- gets windowset wa <- io $ getWindowAttributes dpy w - if M.member w (floating ws) || not (member w ws) + -- TODO temporary workaround for some bugs in float. Don't call 'float' on + -- windows that aren't visible, because it changes the focused screen + let vis = any ((== findIndex w ws) . Just . tag . workspace) (current ws : visible ws) + if (M.member w (floating ws) && vis) + || not (member w ws) then do io $ configureWindow dpy w (ev_value_mask e) $ WindowChanges { wc_x = ev_x e , wc_y = ev_y e diff --git a/Operations.hs b/Operations.hs index 5a1d1b5..a6ff551 100644 --- a/Operations.hs +++ b/Operations.hs @@ -473,6 +473,10 @@ sink :: Window -> X () sink = windows . W.sink -- | Make a tiled window floating, using its suggested rectangle +-- +-- TODO: float changes the set of visible workspaces when we call it for an +-- invisible window -- this should not happen. See 'temporary workaround' in +-- the handler for ConfigureRequestEvent also. float :: Window -> X () float w = withDisplay $ \d -> do ws <- gets windowset -- cgit v1.2.3