
On Thu, May 31, 2007 at 07:17:09PM +1000, Donald Bruce Stewart wrote:
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:
I agree. I can imagine workarounds for some of those problems, but not for the most glaring issue, which is that floating breaks layouts which depend upon focus.
data Workspace i a = Workspace { tag :: !i , tiled :: Stack a , float :: Stack a }
With that, you know which window has the focus in each layer, but how would you know which layer has focus? Also, you need to store the RationalRect with their x/y/w/h information somewhere. Are you thinking of retaining the "floating" map? Or float :: Stack (a, RationalRect)? Jason Creighton