
On Fri, Feb 08, 2008 at 09:24:57AM +0000, David Chanters wrote:
How easy? i've been wanting something like this for ages now. i like the 'tiled' layout but hate the fact that when i close clients, or float them, that the rest of the tiled windows resize as a result.
I think this is a tricky issue, since you want the flexibility of a tiling layout (a layout that will recalculate each window's size every time the workspace must be refreshed), but, below a certain amount of windows, the windows' geometry should be fixed. If that is right (that is to say, if I get your problem correctly) you could just do that, starting from something like Tall (in the xmonad library, XMonad/Layout.hs): you check the number of windows in the stack (you can check it against a parameter of your layout type, so it can be configured by the layout user) and then you give to each window its rectangle accordingly, applying a fixed structure for the first, let's say 3, windows, and the tiling algorithm if the windows are more.
What i also note is the simplefloat layout modifier does this -- i.e., i float clients and nothing else is recomputed in the tiled layout -- but i do not know how to take that component and add it for the tiled layout -- is there a transform for it? Empty pane or something?
SimpleFloat is doing that because there's the WindowArranger layer right *above* the layout: the layout is going to give the window is rectangle the first time. The WindowArranger will take that rectangle and store it in its state component. After that, the WindowArranger will ignore any rectangle produced by the underlying layout (because it has the ArrangeAll bit - a Bool - set to True, otherwise it will ignore the underlying layout only *after* the user changed the window's geometry).
i dont mind trying to write this extension, but i would need heavy pointers as to where to look. :)
As I said, if my understanding of your problem is correct - and what I proposed a viable solution - I would start from something like Tall, or like Accordion (this one is in the contrib library). I hope this helps. Cheers, Andrea