Re: GtkPlug issue ...



Owen Taylor <otaylor redhat com> writes:

> One possibility is to simply to make native children of a foreign
> window have ->parent set to the root window GdkWindow. Reasons
> for this:
> 
>  * We don't know all children of the foreign window. 
> 
>  * It's pretty normal for children of foreign windows to be
>    reparented without our knowledge. In fact, a ReparentNotify
>    for such a situation is what triggered the above backtrace!
> 
>    I don't want to have to track this in GDK.
> 
>  * If the foreign GdkWindow is created after the local child,
>    the ->children pointer won't be correct.
>  
> The ->children pointer for a foreign window really isn't
> interesting because it isn't reliably correct.
> 
>  * It corresponds to the idea that a GtkSocket is like a window
>    manager frame. Typically windows with ->parent == GDK_PARENT_ROOT()
>    actually have the window manager frames as their real
>    X parent.
> 
> The other possibility would be to, as you suggest, to make
> _gdk_window_destroy_heirarchy() clean up the parent pointers
> for the children of a foreign window.
> 
> I think the former is better; I'll look at implementing the
> invariant:
> 
>  GDK_WINDOW_TYPE (window->parent) != GDK_WINDOW_FOREIGN

Could you test that the change I just checked in:

Tue Oct 23 17:31:42 2001  Owen Taylor  <otaylor redhat com>

	* gdk/x11/gdkwindow-x11.c gdk/win32/gdkwindow-win32.c: Always 
	set window->parent (except or the root window itself); if 
	the window's parent is not a GdkWindow, or is a window of 
	type GDK_WINDOW_FOREIGN, set window->parent to the root parent.

	* gdk/gdkwindow.c (gdk_window_get_toplevels): Don't include
	windows of type GDK_WINDOW_FOREIGN.

fixes the problem for you?

Thanks,
                                        Owen



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]