
On Wed, Jan 30, 2008 at 11:50:30AM +0100, Andrea Rossato wrote:
A decoration is a modification to a layout, now. And it is attached to a window. If there is no window, there is no decoration.
just to clarify a bit more: decorations are produced by the Decoration layout modifier according to the decoration style - whose class you came to know. The decoration window is then inserted in the list of windows to be returned by runLayout in Operations.windows. So, now it is xmonad that calls "restackWindows d vs" - and vs has inside, properly placed, all our decoration windows. This way (this is THE only way I'm aware of), decorations, even if they have override_redirect set to True, will not float above windows placed above the window they are decorating... for instance, you can place a window above the tabs (the WindowArrager PURE modifier is quite an interesting stuff to explore... I didn't have the time, yet). As a side effect, all this placing of windows and decorations can be done with pure code on lists (some monadic bits are there just to provide methods with the right and more expressive types - I didn't choose them because I like them...;), Hope it's quite clear now, why we can decorate only windows returned to a layout. But you are free to hack Decoration and find better ways. I'm really really eager to discuss and to be questioned, and to see better stuff. I'm doing all that not because I want a better WM (it's been quite some time I have all I need), but just because I want a better understanding in structuring extensible code. Sorry for the noise. Andrea PS: This is just the design. We need to clean it up quite a lot. If you want to accept it. Otherwise, unrecord/revert, whatever...;)