From 84254039f261b4c4421246ed4b90127711858af5 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 27 Nov 2009 23:44:01 -0500 Subject: [PATCH] Handle reparenting out of a socket Although it isnt' allowed by the XEMBED protocol, its possible that the plug window will be reparented out of the socket without the socket having done so. See bug 123569. Patch by David Jander. --- gtk/gtksocket-x11.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/gtk/gtksocket-x11.c b/gtk/gtksocket-x11.c index f6f3a3d48..5dbde457a 100644 --- a/gtk/gtksocket-x11.c +++ b/gtk/gtksocket-x11.c @@ -620,7 +620,24 @@ _gtk_socket_windowing_filter_func (GdkXEvent *gdk_xevent, return_val = GDK_FILTER_REMOVE; } - + else + { + if (socket->plug_window && xre->window == GDK_WINDOW_XWINDOW (socket->plug_window) && xre->parent != GDK_WINDOW_XWINDOW (widget->window)) + { + gboolean result; + + _gtk_socket_end_embedding (socket); + + g_object_ref (widget); + g_signal_emit_by_name (widget, "plug-removed", &result); + if (!result) + gtk_widget_destroy (widget); + g_object_unref (widget); + + return_val = GDK_FILTER_REMOVE; + } + } + break; } case UnmapNotify: