Index: gfx/gtk_preserve_window.cc |
diff --git a/gfx/gtk_preserve_window.cc b/gfx/gtk_preserve_window.cc |
index c49bd31531880e1f1e13a1309701bb32c182c442..20215d1b977d69eb243cdb81ad3e38e606c5418a 100644 |
--- a/gfx/gtk_preserve_window.cc |
+++ b/gfx/gtk_preserve_window.cc |
@@ -61,10 +61,13 @@ GtkWidget* gtk_preserve_window_new() { |
static void gtk_preserve_window_destroy(GtkObject* object) { |
GtkWidget* widget = reinterpret_cast<GtkWidget*>(object); |
+ GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget); |
if (widget->window) { |
gdk_window_set_user_data(widget->window, NULL); |
- gdk_window_destroy(widget->window); |
+ // If the window is preserved, someone else must destroy it. |
+ if (!priv->preserve_window) |
+ gdk_window_destroy(widget->window); |
widget->window = NULL; |
} |
@@ -167,6 +170,9 @@ void gtk_preserve_window_set_preserve(GtkPreserveWindow* window, |
attributes_mask = GDK_WA_VISUAL | GDK_WA_COLORMAP; |
widget->window = gdk_window_new( |
gdk_get_default_root_window(), &attributes, attributes_mask); |
+ } else if (!value && widget->window && !GTK_WIDGET_REALIZED(widget)) { |
+ gdk_window_destroy(widget->window); |
+ widget->window = NULL; |
} |
} |