| 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..70d0f11d31a07c7fe7bd948f56b0680fcc373787 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* gdk_window = gtk_widget_get_window(widget);
|
| + if (gdk_window) {
|
| + gdk_window_set_user_data(gdk_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(gdk_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);
|
| }
|
| }
|
|
|