Transfer the Mac SDK bockbuild profiles & resources inside the Mono repository.
[mono.git] / bockbuild / mac-sdk / patches / gtk / 0004-Add-gdk_screen_get_monitor_workarea-and-use-it-all-o.patch
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
5  over the place
6
7 ---
8  gdk/gdk.symbols               |    1 +
9  gdk/gdkscreen.h               |    3 +++
10  gdk/quartz/gdkscreen-quartz.c |   30 ++++++++++++++++++++++++++++++
11  gtk/gtkcombobox.c             |    4 ++--
12  gtk/gtkentry.c                |    2 +-
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(-)
28
29 diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols
30 index d4f2072..feed787 100644
31 --- a/gdk/gdk.symbols
32 +++ b/gdk/gdk.symbols
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
43 --- a/gdk/gdkscreen.h
44 +++ b/gdk/gdkscreen.h
45 @@ -95,6 +95,9 @@ gint          gdk_screen_get_primary_monitor   (GdkScreen *screen);
46  void          gdk_screen_get_monitor_geometry  (GdkScreen *screen,
47                                                 gint       monitor_num,
48                                                 GdkRectangle *dest);
49 +void          gdk_screen_get_monitor_workarea  (GdkScreen    *screen,
50 +                                                gint          monitor_num,
51 +                                                GdkRectangle *dest);
52  gint          gdk_screen_get_monitor_at_point  (GdkScreen *screen,
53                                                 gint       x,
54                                                 gint       y);
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];
61  }
62
63 +void
64 +gdk_screen_get_monitor_workarea (GdkScreen    *screen,
65 +                                 gint          monitor_num,
66 +                                 GdkRectangle *dest)
67 +{
68 +  GdkScreenQuartz *quartz_screen;
69 +  NSArray *array;
70 +  NSScreen *nsscreen;
71 +  NSRect rect;
72 +
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);
76 +
77 +  quartz_screen = GDK_SCREEN_QUARTZ (screen);
78 +
79 +  GDK_QUARTZ_ALLOC_POOL;
80 +
81 +  array = [NSScreen screens];
82 +  nsscreen = [array objectAtIndex:monitor_num];
83 +  rect = [nsscreen visibleFrame];
84 +
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;
89 +
90 +  GDK_QUARTZ_RELEASE_POOL;
91 +}
92 +
93  gchar *
94  gdk_screen_make_display_name (GdkScreen *screen)
95  {
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);
106
107    if (*x < monitor.x)
108      *x = monitor.x;
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);
115
116    if (*x < monitor.x)
117      *x = monitor.x;
118 diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
119 index e2999a3..0d16d71 100644
120 --- a/gtk/gtkentry.c
121 +++ b/gtk/gtkentry.c
122 @@ -8614,7 +8614,7 @@ popup_position_func (GtkMenu   *menu,
123      monitor_num = 0;
124    gtk_menu_set_monitor (menu, monitor_num);
125
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);
141
142
143
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,
149
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);
154
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,
162
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);
167
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
172 --- a/gtk/gtkmenu.c
173 +++ b/gtk/gtkmenu.c
174 @@ -993,7 +993,7 @@ gtk_menu_window_size_request (GtkWidget      *window,
175        GdkScreen *screen = gtk_widget_get_screen (window);
176        GdkRectangle monitor;
177
178 -      gdk_screen_get_monitor_geometry (screen, private->monitor_num, &monitor);
179 +      gdk_screen_get_monitor_workarea (screen, private->monitor_num, &monitor);
180
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);
186
187 -      gdk_screen_get_monitor_geometry (screen, private->monitor_num, &monitor);
188 +      gdk_screen_get_monitor_workarea (screen, private->monitor_num, &monitor);
189      }
190    else
191      {
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.
195         */
196 -      gdk_screen_get_monitor_geometry (screen, private->monitor_num, &monitor);
197 +      gdk_screen_get_monitor_workarea (screen, private->monitor_num, &monitor);
198
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);
207    if (monitor_num < 0)
208      monitor_num = 0;
209 -  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
210 +  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
211
212    if (!gdk_window_get_origin (widget->window, &tx, &ty))
213      {
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);
220    if (monitor_num < 0)
221      monitor_num = 0;
222 -  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
223 +  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
224
225    if (orientation == GTK_ORIENTATION_HORIZONTAL)
226      {
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);
234
235 -  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
236 +  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
237
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,
241
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);
246
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);
259
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;
268
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,
276      monitor_num = 0;
277    gtk_menu_set_monitor (menu, monitor_num);
278
279 -  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
280 +  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
281
282    gdk_window_get_origin (widget->window, x, y);
283
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,
289
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);
294
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);
303    if (monitor_num < 0)
304      monitor_num = 0;
305 -  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
306 +  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
307
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,
315                                 &requisition);
316
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);
320
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;
329
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);
333
334    gtk_widget_realize (search_dialog);
335
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);
343
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);
347
348    *x = (monitor.width - w) / 2 + monitor.x;
349 @@ -5917,7 +5917,7 @@ gtk_window_compute_configure_request (GtkWindow    *window,
350               */
351              if (monitor_num >= 0)
352                {
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);
356                }
357            }
358 @@ -5952,7 +5952,7 @@ gtk_window_compute_configure_request (GtkWindow    *window,
359               */
360              if (monitor_num >= 0)
361                {
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);
365                }
366            }
367 --
368 1.7.10.2 (Apple Git-33)