For foreign parents, use the real parent not the root (which is what we list as parent in the APIs)
This commit is contained in:
committed by
Alexander Larsson
parent
d326a638fb
commit
ec4f8baa08
@ -267,6 +267,7 @@ GdkPixmap *_gdk_bitmap_create_from_data (GdkDrawable *drawable,
|
|||||||
gint height);
|
gint height);
|
||||||
|
|
||||||
void _gdk_window_impl_new (GdkWindow *window,
|
void _gdk_window_impl_new (GdkWindow *window,
|
||||||
|
GdkWindow *real_parent,
|
||||||
GdkScreen *screen,
|
GdkScreen *screen,
|
||||||
GdkVisual *visual,
|
GdkVisual *visual,
|
||||||
GdkEventMask event_mask,
|
GdkEventMask event_mask,
|
||||||
|
|||||||
@ -636,6 +636,7 @@ gdk_window_new (GdkWindow *parent,
|
|||||||
int x, y, depth;
|
int x, y, depth;
|
||||||
gboolean native;
|
gboolean native;
|
||||||
GdkEventMask event_mask;
|
GdkEventMask event_mask;
|
||||||
|
GdkWindow *real_parent;
|
||||||
|
|
||||||
g_return_val_if_fail (attributes != NULL, NULL);
|
g_return_val_if_fail (attributes != NULL, NULL);
|
||||||
|
|
||||||
@ -661,6 +662,7 @@ gdk_window_new (GdkWindow *parent,
|
|||||||
/* Windows with a foreign parent are treated as if they are children
|
/* Windows with a foreign parent are treated as if they are children
|
||||||
* of the root window, except for actual creation.
|
* of the root window, except for actual creation.
|
||||||
*/
|
*/
|
||||||
|
real_parent = parent;
|
||||||
if (GDK_WINDOW_TYPE (parent) == GDK_WINDOW_FOREIGN)
|
if (GDK_WINDOW_TYPE (parent) == GDK_WINDOW_FOREIGN)
|
||||||
parent = gdk_screen_get_root_window (screen);
|
parent = gdk_screen_get_root_window (screen);
|
||||||
|
|
||||||
@ -783,7 +785,7 @@ gdk_window_new (GdkWindow *parent,
|
|||||||
event_mask = GDK_EXPOSURE_MASK;
|
event_mask = GDK_EXPOSURE_MASK;
|
||||||
|
|
||||||
/* Create the impl */
|
/* Create the impl */
|
||||||
_gdk_window_impl_new (window, screen, visual, event_mask, attributes, attributes_mask);
|
_gdk_window_impl_new (window, real_parent, screen, visual, event_mask, attributes, attributes_mask);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1019,9 +1021,9 @@ gdk_window_set_has_native (GdkWindow *window, gboolean has_native)
|
|||||||
GdkVisual *visual;
|
GdkVisual *visual;
|
||||||
|
|
||||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||||
g_return_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_ROOT);
|
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window))
|
if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_ROOT ||
|
||||||
|
GDK_WINDOW_DESTROYED (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
private = (GdkWindowObject *) window;
|
private = (GdkWindowObject *) window;
|
||||||
@ -1043,7 +1045,7 @@ gdk_window_set_has_native (GdkWindow *window, gboolean has_native)
|
|||||||
visual = gdk_drawable_get_visual (window);
|
visual = gdk_drawable_get_visual (window);
|
||||||
|
|
||||||
old_impl = private->impl;
|
old_impl = private->impl;
|
||||||
_gdk_window_impl_new (window, screen, visual, GDK_EXPOSURE_MASK, NULL, 0);
|
_gdk_window_impl_new (window, private->parent, screen, visual, GDK_EXPOSURE_MASK, NULL, 0);
|
||||||
new_impl = private->impl;
|
new_impl = private->impl;
|
||||||
|
|
||||||
private->impl = old_impl;
|
private->impl = old_impl;
|
||||||
@ -1482,6 +1484,11 @@ gdk_window_add_filter (GdkWindow *window,
|
|||||||
private = (GdkWindowObject*) window;
|
private = (GdkWindowObject*) window;
|
||||||
if (private && GDK_WINDOW_DESTROYED (window))
|
if (private && GDK_WINDOW_DESTROYED (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* Filters are for the native events on the native window, so
|
||||||
|
ensure there is a native window. */
|
||||||
|
if (window)
|
||||||
|
gdk_window_set_has_native (window, TRUE);
|
||||||
|
|
||||||
if (private)
|
if (private)
|
||||||
tmp_list = private->filters;
|
tmp_list = private->filters;
|
||||||
|
|||||||
@ -624,6 +624,7 @@ setup_toplevel_window (GdkWindow *window,
|
|||||||
|
|
||||||
void
|
void
|
||||||
_gdk_window_impl_new (GdkWindow *window,
|
_gdk_window_impl_new (GdkWindow *window,
|
||||||
|
GdkWindow *real_parent,
|
||||||
GdkScreen *screen,
|
GdkScreen *screen,
|
||||||
GdkVisual *visual,
|
GdkVisual *visual,
|
||||||
GdkEventMask event_mask,
|
GdkEventMask event_mask,
|
||||||
@ -652,7 +653,7 @@ _gdk_window_impl_new (GdkWindow *window,
|
|||||||
private = (GdkWindowObject *) window;
|
private = (GdkWindowObject *) window;
|
||||||
|
|
||||||
screen_x11 = GDK_SCREEN_X11 (screen);
|
screen_x11 = GDK_SCREEN_X11 (screen);
|
||||||
xparent = GDK_WINDOW_XID (private->parent);
|
xparent = GDK_WINDOW_XID (real_parent);
|
||||||
|
|
||||||
impl = g_object_new (_gdk_window_impl_get_type (), NULL);
|
impl = g_object_new (_gdk_window_impl_get_type (), NULL);
|
||||||
private->impl = (GdkDrawable *)impl;
|
private->impl = (GdkDrawable *)impl;
|
||||||
|
|||||||
Reference in New Issue
Block a user