Hi all, I've been playing around with some of the neat eye candy stuff that's emerging now, and one thing I've noticed is that sawfish will need to handle windows with shaped input (like cairo clock, or xwinwrap'ed windows) to be able to support some of these things.
For those who don't know, version 1.1 of the XShape extension added support for shaping the input mask of a window by itself. This is important because apps using argb visuals will use alpha transparency instead of output shaping to produce a non-rectangular appearance. Then the input mask is set to match the opaque parts of the window so input matches output. Now, sawfish reparents client windows into a frame window and while the frame window is made to conform to the output shape, it obviously doesn't know about or handle input shaping. So, even if the client has shaped input, it's still inside a frame that's catching events for the window manager. Compiz avoids this by never reparenting client windows (it draws decorations as peers). Metacity takes a different approach where a window that doesn't request decorations also doesn't get reparented. (99.9% of the time, if you're non-rectangular, you don't want decorations). But sawfish still reparents undecorated windows. So, it seems the obvious thing to do is change it to match the metacity behaviour. I've started initial investigations into this, but I was wondering if John had any useful tips. As a first step, I took a brute force approach and fiddled the code to not reparent any windows at all - I wanted to see if events on the client window that sawfish should interpret (like alt-left-click drag) would still get handled - and they don't. Once that problem is dealt with, it should be a simple matter to redefine undecorated windows to be un-reparented. (and if that's controversial, we can retain the notion of a reparented undecorated windows as a separate frame type). Thoughts? --phil
