Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1113)

Side by Side Diff: ui/gfx/gtk_preserve_window.cc

Issue 9030029: GTK: A bunch more removal of deprecated raw GtkWidget access, focusing on GtkWidget->window (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: tony nits Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/gfx/gtk_preserve_window.h" 5 #include "ui/gfx/gtk_preserve_window.h"
6 6
7 #include <gdk/gdk.h> 7 #include <gdk/gdk.h>
8 #include <gtk/gtk.h> 8 #include <gtk/gtk.h>
9 9
10 #include "ui/base/gtk/gtk_compat.h" 10 #include "ui/base/gtk/gtk_compat.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 } 56 }
57 57
58 GtkWidget* gtk_preserve_window_new() { 58 GtkWidget* gtk_preserve_window_new() {
59 return GTK_WIDGET(g_object_new(GTK_TYPE_PRESERVE_WINDOW, NULL)); 59 return GTK_WIDGET(g_object_new(GTK_TYPE_PRESERVE_WINDOW, NULL));
60 } 60 }
61 61
62 static void gtk_preserve_window_destroy(GtkObject* object) { 62 static void gtk_preserve_window_destroy(GtkObject* object) {
63 GtkWidget* widget = reinterpret_cast<GtkWidget*>(object); 63 GtkWidget* widget = reinterpret_cast<GtkWidget*>(object);
64 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget); 64 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget);
65 65
66 if (widget->window) { 66 GdkWindow* gdk_window = gtk_widget_get_window(widget);
67 gdk_window_set_user_data(widget->window, NULL); 67 if (gdk_window) {
68 gdk_window_set_user_data(gdk_window, NULL);
68 // If the window is preserved, someone else must destroy it. 69 // If the window is preserved, someone else must destroy it.
69 if (!priv->preserve_window) 70 if (!priv->preserve_window)
70 gdk_window_destroy(widget->window); 71 gdk_window_destroy(gdk_window);
71 widget->window = NULL; 72 gtk_widget_set_window(widget, NULL);
72 } 73 }
73 74
74 GTK_OBJECT_CLASS(gtk_preserve_window_parent_class)->destroy(object); 75 GTK_OBJECT_CLASS(gtk_preserve_window_parent_class)->destroy(object);
75 } 76 }
76 77
77 static void gtk_preserve_window_realize(GtkWidget* widget) { 78 static void gtk_preserve_window_realize(GtkWidget* widget) {
78 g_return_if_fail(GTK_IS_PRESERVE_WINDOW(widget)); 79 g_return_if_fail(GTK_IS_PRESERVE_WINDOW(widget));
79 80
80 if (widget->window) { 81 GdkWindow* gdk_window = gtk_widget_get_window(widget);
82 if (gdk_window) {
81 GtkAllocation allocation; 83 GtkAllocation allocation;
82 gtk_widget_get_allocation(widget, &allocation); 84 gtk_widget_get_allocation(widget, &allocation);
83 85
84 gdk_window_reparent(widget->window, 86 gdk_window_reparent(gdk_window,
85 gtk_widget_get_parent_window(widget), 87 gtk_widget_get_parent_window(widget),
86 allocation.x, 88 allocation.x,
87 allocation.y); 89 allocation.y);
88 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget); 90 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget);
89 if (!priv->delegate_resize) { 91 if (!priv->delegate_resize) {
90 gdk_window_resize(gtk_widget_get_window(widget), 92 gdk_window_resize(gdk_window,
91 allocation.width, 93 allocation.width,
92 allocation.height); 94 allocation.height);
93 } 95 }
94 widget->style = gtk_style_attach(widget->style, widget->window); 96 widget->style = gtk_style_attach(widget->style, widget->window);
95 gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL); 97 gtk_style_set_background(gtk_widget_get_style(widget),
98 gdk_window, GTK_STATE_NORMAL);
96 99
97 gint event_mask = gtk_widget_get_events(widget); 100 gint event_mask = gtk_widget_get_events(widget);
98 event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK; 101 event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
99 gdk_window_set_events(widget->window, (GdkEventMask) event_mask); 102 gdk_window_set_events(gdk_window, (GdkEventMask) event_mask);
100 gdk_window_set_user_data(widget->window, widget); 103 gdk_window_set_user_data(gdk_window, widget);
101 104
102 // Deprecated as of GTK 2.22. Used for compatibility. 105 // Deprecated as of GTK 2.22. Used for compatibility.
103 // It should be: gtk_widget_set_realized(widget, TRUE) 106 // It should be: gtk_widget_set_realized(widget, TRUE)
104 GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED); 107 GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
105 } else { 108 } else {
106 GTK_WIDGET_CLASS(gtk_preserve_window_parent_class)->realize(widget); 109 GTK_WIDGET_CLASS(gtk_preserve_window_parent_class)->realize(widget);
107 } 110 }
108 } 111 }
109 112
110 static void gtk_preserve_window_unrealize(GtkWidget* widget) { 113 static void gtk_preserve_window_unrealize(GtkWidget* widget) {
(...skipping 12 matching lines...) Expand all
123 gtk_widget_set_mapped(widget, FALSE); 126 gtk_widget_set_mapped(widget, FALSE);
124 } 127 }
125 128
126 // This is the behavior from GtkWidget, inherited by GtkFixed. 129 // This is the behavior from GtkWidget, inherited by GtkFixed.
127 // It is unclear why we should not call the potentially overridden 130 // It is unclear why we should not call the potentially overridden
128 // unrealize method (via the callback), but doing so causes errors. 131 // unrealize method (via the callback), but doing so causes errors.
129 container_class->forall( 132 container_class->forall(
130 GTK_CONTAINER(widget), FALSE, 133 GTK_CONTAINER(widget), FALSE,
131 reinterpret_cast<GtkCallback>(gtk_widget_unrealize), NULL); 134 reinterpret_cast<GtkCallback>(gtk_widget_unrealize), NULL);
132 135
136 GdkWindow* gdk_window = gtk_widget_get_window(widget);
137
133 gtk_style_detach(widget->style); 138 gtk_style_detach(widget->style);
134 gdk_window_reparent(widget->window, gdk_get_default_root_window(), 0, 0); 139 gdk_window_reparent(gdk_window, gdk_get_default_root_window(), 0, 0);
135 gtk_selection_remove_all(widget); 140 gtk_selection_remove_all(widget);
136 gdk_window_set_user_data(widget->window, NULL); 141 gdk_window_set_user_data(gdk_window, NULL);
137 142
138 gtk_widget_set_realized(widget, FALSE); 143 gtk_widget_set_realized(widget, FALSE);
139 } else { 144 } else {
140 GTK_WIDGET_CLASS(gtk_preserve_window_parent_class)->unrealize(widget); 145 GTK_WIDGET_CLASS(gtk_preserve_window_parent_class)->unrealize(widget);
141 } 146 }
142 } 147 }
143 148
144 gboolean gtk_preserve_window_get_preserve(GtkPreserveWindow* window) { 149 gboolean gtk_preserve_window_get_preserve(GtkPreserveWindow* window) {
145 g_return_val_if_fail(GTK_IS_PRESERVE_WINDOW(window), FALSE); 150 g_return_val_if_fail(GTK_IS_PRESERVE_WINDOW(window), FALSE);
146 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(window); 151 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(window);
147 152
148 return priv->preserve_window; 153 return priv->preserve_window;
149 } 154 }
150 155
151 void gtk_preserve_window_set_preserve(GtkPreserveWindow* window, 156 void gtk_preserve_window_set_preserve(GtkPreserveWindow* window,
152 gboolean value) { 157 gboolean value) {
153 g_return_if_fail(GTK_IS_PRESERVE_WINDOW(window)); 158 g_return_if_fail(GTK_IS_PRESERVE_WINDOW(window));
154 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(window); 159 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(window);
155 priv->preserve_window = value; 160 priv->preserve_window = value;
156 161
157 GtkWidget* widget = GTK_WIDGET(window); 162 GtkWidget* widget = GTK_WIDGET(window);
158 if (value && !widget->window) { 163 GdkWindow* gdk_window = gtk_widget_get_window(widget);
164 if (value && !gdk_window) {
159 GdkWindowAttr attributes; 165 GdkWindowAttr attributes;
160 gint attributes_mask; 166 gint attributes_mask;
161 167
162 // We may not know the width and height, so we rely on the fact 168 // We may not know the width and height, so we rely on the fact
163 // that a size-allocation will resize it later. 169 // that a size-allocation will resize it later.
164 attributes.width = 1; 170 attributes.width = 1;
165 attributes.height = 1; 171 attributes.height = 1;
166 172
167 attributes.window_type = GDK_WINDOW_CHILD; 173 attributes.window_type = GDK_WINDOW_CHILD;
168 attributes.wclass = GDK_INPUT_OUTPUT; 174 attributes.wclass = GDK_INPUT_OUTPUT;
169 attributes.override_redirect = TRUE; 175 attributes.override_redirect = TRUE;
170 176
171 attributes.visual = gtk_widget_get_visual(widget); 177 attributes.visual = gtk_widget_get_visual(widget);
172 attributes.colormap = gtk_widget_get_colormap(widget); 178 attributes.colormap = gtk_widget_get_colormap(widget);
173 179
174 attributes.event_mask = gtk_widget_get_events(widget); 180 attributes.event_mask = gtk_widget_get_events(widget);
175 attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK; 181 attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
176 182
177 attributes_mask = GDK_WA_VISUAL | GDK_WA_COLORMAP | GDK_WA_NOREDIR; 183 attributes_mask = GDK_WA_VISUAL | GDK_WA_COLORMAP | GDK_WA_NOREDIR;
178 widget->window = gdk_window_new( 184 gdk_window = gdk_window_new(
179 gdk_get_default_root_window(), &attributes, attributes_mask); 185 gdk_get_default_root_window(), &attributes, attributes_mask);
180 } else if (!value && widget->window && !gtk_widget_get_realized(widget)) { 186 gtk_widget_set_window(widget, gdk_window);
181 gdk_window_destroy(widget->window); 187 } else if (!value && gdk_window && !gtk_widget_get_realized(widget)) {
182 widget->window = NULL; 188 gdk_window_destroy(gdk_window);
189 gtk_widget_set_window(widget, NULL);
183 } 190 }
184 } 191 }
185 192
186 void gtk_preserve_window_size_allocate(GtkWidget* widget, 193 void gtk_preserve_window_size_allocate(GtkWidget* widget,
187 GtkAllocation* allocation) { 194 GtkAllocation* allocation) {
188 g_return_if_fail(GTK_IS_PRESERVE_WINDOW(widget)); 195 g_return_if_fail(GTK_IS_PRESERVE_WINDOW(widget));
189 196
190 widget->allocation = *allocation; 197 gtk_widget_set_allocation(widget, allocation);
191 198
192 if (gtk_widget_get_realized(widget)) { 199 if (gtk_widget_get_realized(widget)) {
193 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget); 200 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget);
201 GdkWindow* gdk_window = gtk_widget_get_window(widget);
194 if (priv->delegate_resize) { 202 if (priv->delegate_resize) {
195 gdk_window_move(widget->window, allocation->x, allocation->y); 203 gdk_window_move(gdk_window, allocation->x, allocation->y);
196 } else { 204 } else {
197 gdk_window_move_resize( 205 gdk_window_move_resize(
198 widget->window, allocation->x, allocation->y, 206 gdk_window, allocation->x, allocation->y,
199 allocation->width, allocation->height); 207 allocation->width, allocation->height);
200 } 208 }
201 } 209 }
202 210
203 // Propagate resize to children 211 // Propagate resize to children
204 guint16 border_width = GTK_CONTAINER(widget)->border_width; 212 guint16 border_width = GTK_CONTAINER(widget)->border_width;
205 GList *children = GTK_FIXED(widget)->children; 213 GList *children = GTK_FIXED(widget)->children;
206 while (children) { 214 while (children) {
207 GtkFixedChild *child = reinterpret_cast<GtkFixedChild*>(children->data); 215 GtkFixedChild *child = reinterpret_cast<GtkFixedChild*>(children->data);
208 if (gtk_widget_get_visible(child->widget)) { 216 if (gtk_widget_get_visible(child->widget)) {
(...skipping 12 matching lines...) Expand all
221 } 229 }
222 } 230 }
223 231
224 void gtk_preserve_window_delegate_resize(GtkPreserveWindow* widget, 232 void gtk_preserve_window_delegate_resize(GtkPreserveWindow* widget,
225 gboolean delegate) { 233 gboolean delegate) {
226 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget); 234 GtkPreserveWindowPrivate* priv = GTK_PRESERVE_WINDOW_GET_PRIVATE(widget);
227 priv->delegate_resize = delegate; 235 priv->delegate_resize = delegate;
228 } 236 }
229 237
230 G_END_DECLS 238 G_END_DECLS
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/location_bar_view_gtk.cc ('k') | webkit/plugins/npapi/gtk_plugin_container_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698