| 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;
|
| }
|
| }
|
|
|
|
|