[Xmonad] A plan for the floating layer

Donald Bruce Stewart dons at cse.unsw.edu.au
Thu May 31 05:17:09 EDT 2007


The current floating layer code handles the interface to the outside
world quite nicely, but interacts strangely with fullscreen mode.
The problems stem from the fact that windows are lifted into the
floating layer by setting a bit flag, basically. They are then rendered
separately if this flag is set. 

This is good, but means that floating windows keep an implicit position 
in the tiled ordering -- although they don't physically appear to be in
the tiled layer. 

This leads to some oddities:
    * moving a floating window in fullscreen tiled mode, will shift
      focus of the tiled layer to the window after the implicit position
      of the floating mode.
    * mod-shift-j reorders the implicit position of a floating window
        in the tiled layer, but this change isn't visible
   
I think the best way to solve this is to move from an 'implicit'
floating layer, denoted by flag bits, to an explicit floating layer on
each workspace:

    data Workspace i a = Workspace  { tag :: !i
                                    , tiled :: Stack a
                                    , float :: Stack a }

Now we can be sure that the floating layer is fully detached, and can be
operated on in isolation, as its own zipper. For one, this will mean fullscreen 
mode works (since focus isn't lost on the tiled stack). 

Should be able to reuse the existing code (changing modify a bit).

We also get a new set of operatoins on the float layer alone, or on the union
of the two layers.

Spencer, Jason, suggestions? 

Everyone else, not tracking the stable branch -- what do you think of the
tiling mode as it is? this will likely be the main new (and final!) feature
missing before 0.3 (and forward to 1.0).

-- Don


More information about the Xmonad mailing list