[sugar] multiple gtk.Windows hide() and show()

Dan Winship dwinship at redhat.com
Mon Aug 27 17:16:46 EDT 2007


Erik Blankinship wrote:
> Let me explain what I am trying to achieve: I am creating a "picture in 
> a picture effect" (using XV in a window, amongst other windows).  GTK 
> doesn't play well with overlapping widgets, and gtk.Fixed() doesn't 
> guarantee Z-order.  So I am using a stack of gtk.Windows without 
> decoration to achieve the desired effect, but the appearance is that 
> everything looks like a nice gtk layout.

Sorry, got confused by your description; I thought you were trying to 
change stacking on the fly by swapping transient-fors around.

But anyway, you still have the problem that "transient for" doesn't 
actually mean anything having to do with stacking. (In fact, the ICCCM 
lists a bunch of things a window manager might do differently with 
transient windows, but stacking order isn't one of them.) So (1) setting 
transient-for on a window won't necessarily affect its stacking, and (2) 
it may affect it in ways other than stacking. (Eg, matchbox appears to 
assume that any window that has WM_TRANSIENT_FOR set is a dialog box.)

So your best bet is probably to make your own version of gtk.Fixed that 
does have a guaranteed Z-order, rather than trying to bend the wm to 
your will.

Marco says "I seem to remember blizzard wrote something like that for 
mozilla gtk2". You *might* also be able to get gtk.Fixed to work just by 
calling raise()/lower() on the child widgets' GdkWindows to stack them 
the way you want within the Fixed. (Or just by being sure to show() them 
in bottom-to-top order.)

-- Dan


More information about the Sugar mailing list