1 From 8636b3d980cdef4c12f53779f708cc4a674d1054 Mon Sep 17 00:00:00 2001
2 From: Michael Natterer <mitch@gimp.org>
3 Date: Fri, 23 Nov 2012 15:24:36 +0100
4 Subject: [PATCH 04/68] Add gdk_screen_get_monitor_workarea() and use it all
9 gdk/gdkscreen.h | 3 +++
10 gdk/quartz/gdkscreen-quartz.c | 30 ++++++++++++++++++++++++++++++
11 gtk/gtkcombobox.c | 4 ++--
13 gtk/gtkentrycompletion.c | 2 +-
14 gtk/gtkfilechooserdefault.c | 2 +-
15 gtk/gtklinkbutton.c | 2 +-
16 gtk/gtkmenu.c | 6 +++---
17 gtk/gtkmenuitem.c | 2 +-
18 gtk/gtkmenutoolbutton.c | 2 +-
19 gtk/gtkrecentchooserdefault.c | 4 ++--
20 gtk/gtkscalebutton.c | 2 +-
21 gtk/gtkstatusicon.c | 4 ++--
22 gtk/gtktextview.c | 2 +-
23 gtk/gtktoolbar.c | 2 +-
24 gtk/gtktooltip.c | 2 +-
25 gtk/gtktreeview.c | 2 +-
26 gtk/gtkwindow.c | 6 +++---
27 19 files changed, 57 insertions(+), 23 deletions(-)
29 diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols
30 index d4f2072..feed787 100644
33 @@ -1169,6 +1169,7 @@ gdk_screen_get_default_colormap
34 gdk_screen_set_default_colormap
35 gdk_screen_get_n_monitors
36 gdk_screen_get_monitor_geometry
37 +gdk_screen_get_monitor_workarea
38 gdk_screen_get_monitor_width_mm
39 gdk_screen_get_monitor_height_mm
40 gdk_screen_get_monitor_plug_name
41 diff --git a/gdk/gdkscreen.h b/gdk/gdkscreen.h
42 index 418cecf..d3d4fe9 100644
45 @@ -95,6 +95,9 @@ gint gdk_screen_get_primary_monitor (GdkScreen *screen);
46 void gdk_screen_get_monitor_geometry (GdkScreen *screen,
49 +void gdk_screen_get_monitor_workarea (GdkScreen *screen,
51 + GdkRectangle *dest);
52 gint gdk_screen_get_monitor_at_point (GdkScreen *screen,
55 diff --git a/gdk/quartz/gdkscreen-quartz.c b/gdk/quartz/gdkscreen-quartz.c
56 index 796fcb5..4bb573b 100644
57 --- a/gdk/quartz/gdkscreen-quartz.c
58 +++ b/gdk/quartz/gdkscreen-quartz.c
59 @@ -464,6 +464,36 @@ gdk_screen_get_monitor_geometry (GdkScreen *screen,
60 *dest = GDK_SCREEN_QUARTZ (screen)->screen_rects[monitor_num];
64 +gdk_screen_get_monitor_workarea (GdkScreen *screen,
68 + GdkScreenQuartz *quartz_screen;
73 + g_return_if_fail (GDK_IS_SCREEN (screen));
74 + g_return_if_fail (monitor_num < gdk_screen_get_n_monitors (screen));
75 + g_return_if_fail (monitor_num >= 0);
77 + quartz_screen = GDK_SCREEN_QUARTZ (screen);
79 + GDK_QUARTZ_ALLOC_POOL;
81 + array = [NSScreen screens];
82 + nsscreen = [array objectAtIndex:monitor_num];
83 + rect = [nsscreen visibleFrame];
85 + dest->x = rect.origin.x - quartz_screen->min_x;
86 + dest->y = quartz_screen->height - (rect.origin.y + rect.size.height) + quartz_screen->min_y;
87 + dest->width = rect.size.width;
88 + dest->height = rect.size.height;
90 + GDK_QUARTZ_RELEASE_POOL;
94 gdk_screen_make_display_name (GdkScreen *screen)
96 diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
97 index dc912a3..d997d0d 100644
98 --- a/gtk/gtkcombobox.c
99 +++ b/gtk/gtkcombobox.c
100 @@ -1667,7 +1667,7 @@ gtk_combo_box_menu_position_below (GtkMenu *menu,
101 screen = gtk_widget_get_screen (GTK_WIDGET (combo_box));
102 monitor_num = gdk_screen_get_monitor_at_window (screen,
103 GTK_WIDGET (combo_box)->window);
104 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
105 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
109 @@ -1836,7 +1836,7 @@ gtk_combo_box_list_position (GtkComboBox *combo_box,
110 screen = gtk_widget_get_screen (GTK_WIDGET (combo_box));
111 monitor_num = gdk_screen_get_monitor_at_window (screen,
112 GTK_WIDGET (combo_box)->window);
113 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
114 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
118 diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
119 index e2999a3..0d16d71 100644
122 @@ -8614,7 +8614,7 @@ popup_position_func (GtkMenu *menu,
124 gtk_menu_set_monitor (menu, monitor_num);
126 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
127 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
128 gtk_widget_size_request (entry->popup_menu, &menu_req);
129 height = gdk_window_get_height (entry->text_area);
130 gtk_entry_get_cursor_locations (entry, CURSOR_STANDARD, &strong_x, NULL);
131 diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c
132 index 2fa7b56..a8deace 100644
133 --- a/gtk/gtkentrycompletion.c
134 +++ b/gtk/gtkentrycompletion.c
135 @@ -1409,7 +1409,7 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
136 screen = gtk_widget_get_screen (GTK_WIDGET (completion->priv->entry));
137 monitor_num = gdk_screen_get_monitor_at_window (screen,
138 GTK_WIDGET (completion->priv->entry)->window);
139 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
140 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
144 diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
145 index 2a75365..f94f4d6 100644
146 --- a/gtk/gtkfilechooserdefault.c
147 +++ b/gtk/gtkfilechooserdefault.c
148 @@ -4100,7 +4100,7 @@ popup_position_func (GtkMenu *menu,
150 monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
151 gtk_menu_set_monitor (menu, monitor_num);
152 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
153 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
155 *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
156 *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
157 diff --git a/gtk/gtklinkbutton.c b/gtk/gtklinkbutton.c
158 index bae8ec3..45d64b2 100644
159 --- a/gtk/gtklinkbutton.c
160 +++ b/gtk/gtklinkbutton.c
161 @@ -374,7 +374,7 @@ popup_position_func (GtkMenu *menu,
163 monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
164 gtk_menu_set_monitor (menu, monitor_num);
165 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
166 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
168 *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
169 *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
170 diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
171 index fc25098..44972b2 100644
174 @@ -993,7 +993,7 @@ gtk_menu_window_size_request (GtkWidget *window,
175 GdkScreen *screen = gtk_widget_get_screen (window);
176 GdkRectangle monitor;
178 - gdk_screen_get_monitor_geometry (screen, private->monitor_num, &monitor);
179 + gdk_screen_get_monitor_workarea (screen, private->monitor_num, &monitor);
181 if (private->y + requisition->height > monitor.y + monitor.height)
182 requisition->height = monitor.y + monitor.height - private->y;
183 @@ -4231,7 +4231,7 @@ gtk_menu_position (GtkMenu *menu)
184 if (private->monitor_num < 0)
185 private->monitor_num = gdk_screen_get_monitor_at_point (screen, x, y);
187 - gdk_screen_get_monitor_geometry (screen, private->monitor_num, &monitor);
188 + gdk_screen_get_monitor_workarea (screen, private->monitor_num, &monitor);
192 @@ -4260,7 +4260,7 @@ gtk_menu_position (GtkMenu *menu)
193 * Positioning in the vertical direction is similar: first try below
194 * mouse cursor, then above.
196 - gdk_screen_get_monitor_geometry (screen, private->monitor_num, &monitor);
197 + gdk_screen_get_monitor_workarea (screen, private->monitor_num, &monitor);
199 space_left = x - monitor.x;
200 space_right = monitor.x + monitor.width - x - 1;
201 diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c
202 index 8f23b75..ffc2db6 100644
203 --- a/gtk/gtkmenuitem.c
204 +++ b/gtk/gtkmenuitem.c
205 @@ -1717,7 +1717,7 @@ gtk_menu_item_position_menu (GtkMenu *menu,
206 monitor_num = gdk_screen_get_monitor_at_window (screen, menu_item->event_window);
209 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
210 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
212 if (!gdk_window_get_origin (widget->window, &tx, &ty))
214 diff --git a/gtk/gtkmenutoolbutton.c b/gtk/gtkmenutoolbutton.c
215 index 0c464e8..e254e1b 100644
216 --- a/gtk/gtkmenutoolbutton.c
217 +++ b/gtk/gtkmenutoolbutton.c
218 @@ -287,7 +287,7 @@ menu_position_func (GtkMenu *menu,
219 monitor_num = gdk_screen_get_monitor_at_window (screen, widget->window);
222 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
223 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
225 if (orientation == GTK_ORIENTATION_HORIZONTAL)
227 diff --git a/gtk/gtkrecentchooserdefault.c b/gtk/gtkrecentchooserdefault.c
228 index 1ab48e2..fe2a772 100644
229 --- a/gtk/gtkrecentchooserdefault.c
230 +++ b/gtk/gtkrecentchooserdefault.c
231 @@ -951,7 +951,7 @@ set_default_size (GtkRecentChooserDefault *impl)
232 screen = gtk_widget_get_screen (widget);
233 monitor_num = gdk_screen_get_monitor_at_window (screen, widget->window);
235 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
236 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
238 width = MIN (width, monitor.width * 3 / 4);
239 height = MIN (height, monitor.height * 3 / 4);
240 @@ -1849,7 +1849,7 @@ popup_position_func (GtkMenu *menu,
242 monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
243 gtk_menu_set_monitor (menu, monitor_num);
244 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
245 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
247 *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
248 *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
249 diff --git a/gtk/gtkscalebutton.c b/gtk/gtkscalebutton.c
250 index df9b574..3c6fc85 100644
251 --- a/gtk/gtkscalebutton.c
252 +++ b/gtk/gtkscalebutton.c
253 @@ -1000,7 +1000,7 @@ gtk_scale_popup (GtkWidget *widget,
254 monitor = gdk_screen_get_monitor_at_point (screen,
255 button_event->x_root,
256 button_event->y_root);
257 - gdk_screen_get_monitor_geometry (screen, monitor, &rect);
258 + gdk_screen_get_monitor_workarea (screen, monitor, &rect);
260 if (priv->orientation == GTK_ORIENTATION_VERTICAL)
261 y += button_event->y;
262 diff --git a/gtk/gtkstatusicon.c b/gtk/gtkstatusicon.c
263 index 77d93da..c6d3097 100644
264 --- a/gtk/gtkstatusicon.c
265 +++ b/gtk/gtkstatusicon.c
266 @@ -648,7 +648,7 @@ build_button_event (GtkStatusIconPrivate *priv,
267 GdkRectangle monitor0;
269 /* We know that gdk/win32 puts the primary monitor at index 0 */
270 - gdk_screen_get_monitor_geometry (gdk_screen_get_default (), 0, &monitor0);
271 + gdk_screen_get_monitor_workarea (gdk_screen_get_default (), 0, &monitor0);
272 e->window = g_object_ref (gdk_get_default_root_window ());
273 e->send_event = TRUE;
274 e->time = GetTickCount ();
275 @@ -2512,7 +2512,7 @@ gtk_status_icon_position_menu (GtkMenu *menu,
277 gtk_menu_set_monitor (menu, monitor_num);
279 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
280 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
282 gdk_window_get_origin (widget->window, x, y);
284 diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
285 index 9ddddec..419cced 100644
286 --- a/gtk/gtktextview.c
287 +++ b/gtk/gtktextview.c
288 @@ -7845,7 +7845,7 @@ popup_position_func (GtkMenu *menu,
290 monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
291 gtk_menu_set_monitor (menu, monitor_num);
292 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
293 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
295 *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
296 *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
297 diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c
298 index b2c4b15..fc1e588 100644
299 --- a/gtk/gtktoolbar.c
300 +++ b/gtk/gtktoolbar.c
301 @@ -2618,7 +2618,7 @@ menu_position_func (GtkMenu *menu,
302 monitor_num = gdk_screen_get_monitor_at_window (screen, priv->arrow_button->window);
305 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
306 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
308 gdk_window_get_origin (GTK_BUTTON (priv->arrow_button)->event_window, x, y);
309 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
310 diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c
311 index 9918165..fb6e869 100644
312 --- a/gtk/gtktooltip.c
313 +++ b/gtk/gtktooltip.c
314 @@ -1139,7 +1139,7 @@ gtk_tooltip_position (GtkTooltip *tooltip,
317 monitor_num = gdk_screen_get_monitor_at_point (screen, x, y);
318 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
319 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
321 if (x + requisition.width > monitor.x + monitor.width)
322 x -= x - (monitor.x + monitor.width) + requisition.width;
323 diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
324 index eccd20c..cca1d3d 100644
325 --- a/gtk/gtktreeview.c
326 +++ b/gtk/gtktreeview.c
327 @@ -14251,7 +14251,7 @@ gtk_tree_view_search_position_func (GtkTreeView *tree_view,
328 GdkRectangle monitor;
330 monitor_num = gdk_screen_get_monitor_at_window (screen, tree_window);
331 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
332 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
334 gtk_widget_realize (search_dialog);
336 diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
337 index 8f174c6..7094eb6 100644
338 --- a/gtk/gtkwindow.c
339 +++ b/gtk/gtkwindow.c
340 @@ -5771,7 +5771,7 @@ center_window_on_monitor (GtkWindow *window,
341 if (monitor_num == -1)
342 monitor_num = get_center_monitor_of_window (window);
344 - gdk_screen_get_monitor_geometry (gtk_window_check_screen (window),
345 + gdk_screen_get_monitor_workarea (gtk_window_check_screen (window),
346 monitor_num, &monitor);
348 *x = (monitor.width - w) / 2 + monitor.x;
349 @@ -5917,7 +5917,7 @@ gtk_window_compute_configure_request (GtkWindow *window,
351 if (monitor_num >= 0)
353 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
354 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
355 clamp_window_to_rectangle (&x, &y, w, h, &monitor);
358 @@ -5952,7 +5952,7 @@ gtk_window_compute_configure_request (GtkWindow *window,
360 if (monitor_num >= 0)
362 - gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
363 + gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
364 clamp_window_to_rectangle (&x, &y, w, h, &monitor);
368 1.7.10.2 (Apple Git-33)