Chromium Code Reviews| Index: ui/gfx/gtk_preserve_window.cc |
| diff --git a/ui/gfx/gtk_preserve_window.cc b/ui/gfx/gtk_preserve_window.cc |
| index 32d6e351e552fa28bf672c06334b9a4404cb5ea1..59bf1e7b2718e186f03711b6175d8fa9db381d78 100644 |
| --- a/ui/gfx/gtk_preserve_window.cc |
| +++ b/ui/gfx/gtk_preserve_window.cc |
| @@ -63,12 +63,13 @@ 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); |
| + GdkWindow* window = gtk_widget_get_window(widget); |
|
tony
2012/01/04 19:08:01
Nit: Maybe call this gdk_window too?
|
| + if (window) { |
| + gdk_window_set_user_data(window, NULL); |
| // If the window is preserved, someone else must destroy it. |
| if (!priv->preserve_window) |
| - gdk_window_destroy(widget->window); |
| - widget->window = NULL; |
| + gdk_window_destroy(window); |
| + gtk_widget_set_window(widget, NULL); |
| } |
| GTK_OBJECT_CLASS(gtk_preserve_window_parent_class)->destroy(object); |
| @@ -77,27 +78,29 @@ static void gtk_preserve_window_destroy(GtkObject* object) { |
| static void gtk_preserve_window_realize(GtkWidget* widget) { |
| g_return_if_fail(GTK_IS_PRESERVE_WINDOW(widget)); |
| - if (widget->window) { |
| + GdkWindow* gdk_window = gtk_widget_get_window(widget); |
| + if (gdk_window) { |
| GtkAllocation allocation; |
| gtk_widget_get_allocation(widget, &allocation); |
| - gdk_window_reparent(widget->window, |
| + gdk_window_reparent(gdk_window, |
| gtk_widget_get_parent_window(widget), |
| allocation.x, |
| allocation.y); |
| GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget); |
| if (!priv->delegate_resize) { |
| - gdk_window_resize(gtk_widget_get_window(widget), |
| + gdk_window_resize(gdk_window, |
| allocation.width, |
| allocation.height); |
| } |
| widget->style = gtk_style_attach(widget->style, widget->window); |
| - gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL); |
| + gtk_style_set_background(gtk_widget_get_style(widget), |
| + gdk_window, GTK_STATE_NORMAL); |
| gint event_mask = gtk_widget_get_events(widget); |
| event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK; |
| - gdk_window_set_events(widget->window, (GdkEventMask) event_mask); |
| - gdk_window_set_user_data(widget->window, widget); |
| + gdk_window_set_events(gdk_window, (GdkEventMask) event_mask); |
| + gdk_window_set_user_data(gdk_window, widget); |
| // Deprecated as of GTK 2.22. Used for compatibility. |
| // It should be: gtk_widget_set_realized(widget, TRUE) |
| @@ -130,10 +133,12 @@ static void gtk_preserve_window_unrealize(GtkWidget* widget) { |
| GTK_CONTAINER(widget), FALSE, |
| reinterpret_cast<GtkCallback>(gtk_widget_unrealize), NULL); |
| + GdkWindow* gdk_window = gtk_widget_get_window(widget); |
| + |
| gtk_style_detach(widget->style); |
| - gdk_window_reparent(widget->window, gdk_get_default_root_window(), 0, 0); |
| + gdk_window_reparent(gdk_window, gdk_get_default_root_window(), 0, 0); |
| gtk_selection_remove_all(widget); |
| - gdk_window_set_user_data(widget->window, NULL); |
| + gdk_window_set_user_data(gdk_window, NULL); |
| gtk_widget_set_realized(widget, FALSE); |
| } else { |
| @@ -155,7 +160,8 @@ void gtk_preserve_window_set_preserve(GtkPreserveWindow* window, |
| priv->preserve_window = value; |
| GtkWidget* widget = GTK_WIDGET(window); |
| - if (value && !widget->window) { |
| + GdkWindow* gdk_window = gtk_widget_get_window(widget); |
| + if (value && !gdk_window) { |
| GdkWindowAttr attributes; |
| gint attributes_mask; |
| @@ -175,11 +181,12 @@ void gtk_preserve_window_set_preserve(GtkPreserveWindow* window, |
| attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK; |
| attributes_mask = GDK_WA_VISUAL | GDK_WA_COLORMAP | GDK_WA_NOREDIR; |
| - widget->window = gdk_window_new( |
| + gdk_window = gdk_window_new( |
| gdk_get_default_root_window(), &attributes, attributes_mask); |
| - } else if (!value && widget->window && !gtk_widget_get_realized(widget)) { |
| - gdk_window_destroy(widget->window); |
| - widget->window = NULL; |
| + gtk_widget_set_window(widget, gdk_window); |
| + } else if (!value && gdk_window && !gtk_widget_get_realized(widget)) { |
| + gdk_window_destroy(gdk_window); |
| + gtk_widget_set_window(widget, NULL); |
| } |
| } |
| @@ -187,15 +194,16 @@ void gtk_preserve_window_size_allocate(GtkWidget* widget, |
| GtkAllocation* allocation) { |
| g_return_if_fail(GTK_IS_PRESERVE_WINDOW(widget)); |
| - widget->allocation = *allocation; |
| + gtk_widget_set_allocation(widget, allocation); |
| if (gtk_widget_get_realized(widget)) { |
| GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget); |
| + GdkWindow* gdk_window = gtk_widget_get_window(widget); |
| if (priv->delegate_resize) { |
| - gdk_window_move(widget->window, allocation->x, allocation->y); |
| + gdk_window_move(gdk_window, allocation->x, allocation->y); |
| } else { |
| gdk_window_move_resize( |
| - widget->window, allocation->x, allocation->y, |
| + gdk_window, allocation->x, allocation->y, |
| allocation->width, allocation->height); |
| } |
| } |