[gtk+/wip/matthiasc/monitor] gtk: Convert to new monitor api



commit df19d99ebd95e2b4e20c59fc726c690801e8a6fe
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Apr 10 23:01:10 2016 -0400

    gtk: Convert to new monitor api
    
    Use the GdkDisplay monitor api instead of the GdkScreen one.

 gtk/gtkcombobox.c             |   62 ++++++++++-----------
 gtk/gtkentry.c                |   29 ++++-----
 gtk/gtkentrycompletion.c      |   32 +++++-----
 gtk/gtklinkbutton.c           |   19 +++---
 gtk/gtkmenubutton.c           |   40 ++++++-------
 gtk/gtkmenuitem.c             |   34 +++++------
 gtk/gtkrecentchooserdefault.c |   41 ++++++-------
 gtk/gtktextview.c             |   28 +++++-----
 gtk/gtktoolbar.c              |   36 ++++++------
 gtk/gtktooltip.c              |   39 ++++++-------
 gtk/gtktreeview.c             |    7 +--
 gtk/gtkwidget.c               |   10 ++--
 gtk/gtkwindow.c               |  123 ++++++++++++++++-------------------------
 13 files changed, 224 insertions(+), 276 deletions(-)
---
diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
index 911046b..fe21a1f 100644
--- a/gtk/gtkcombobox.c
+++ b/gtk/gtkcombobox.c
@@ -1934,9 +1934,9 @@ gtk_combo_box_menu_position_below (GtkMenu  *menu,
   gint sx, sy;
   GtkWidget *child;
   GtkRequisition req;
-  GdkScreen *screen;
-  gint monitor_num;
-  GdkRectangle monitor;
+  GdkDisplay *display;
+  GdkMonitor *monitor;
+  GdkRectangle area;
 
   /* FIXME: is using the size request here broken? */
   child = gtk_bin_get_child (GTK_BIN (combo_box));
@@ -1953,8 +1953,7 @@ gtk_combo_box_menu_position_below (GtkMenu  *menu,
       sy += child_allocation.y;
     }
 
-  gdk_window_get_root_coords (gtk_widget_get_window (child),
-                              sx, sy, &sx, &sy);
+  gdk_window_get_root_coords (gtk_widget_get_window (child), sx, sy, &sx, &sy);
 
   if (gtk_widget_get_direction (GTK_WIDGET (combo_box)) == GTK_TEXT_DIR_RTL)
     sx += (content_allocation.x - border_allocation.x);
@@ -1972,21 +1971,20 @@ gtk_combo_box_menu_position_below (GtkMenu  *menu,
     *x = sx + child_allocation.width - req.width;
   *y = sy;
 
-  screen = gtk_widget_get_screen (GTK_WIDGET (combo_box));
-  monitor_num = gdk_screen_get_monitor_at_window (screen,
-                                                  gtk_widget_get_window (GTK_WIDGET (combo_box)));
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  display = gtk_widget_get_display (GTK_WIDGET (combo_box));
+  monitor = gdk_display_get_monitor_at_window (display, gtk_widget_get_window (GTK_WIDGET (combo_box)));
+  gdk_monitor_get_workarea (monitor, &area);
 
-  if (*x < monitor.x)
-    *x = monitor.x;
-  else if (*x + req.width > monitor.x + monitor.width)
-    *x = monitor.x + monitor.width - req.width;
+  if (*x < area.x)
+    *x = area.x;
+  else if (*x + req.width > area.x + area.width)
+    *x = area.x + area.width - req.width;
 
-  if (monitor.y + monitor.height - *y - child_allocation.height >= req.height)
+  if (area.y + area.height - *y - child_allocation.height >= req.height)
     *y += child_allocation.height;
-  else if (*y - monitor.y >= req.height)
+  else if (*y - area.y >= req.height)
     *y -= req.height;
-  else if (monitor.y + monitor.height - *y - child_allocation.height > *y - monitor.y)
+  else if (area.y + area.height - *y - child_allocation.height > *y - area.y)
     *y += child_allocation.height;
   else
     *y -= req.height;
@@ -2109,9 +2107,9 @@ gtk_combo_box_list_position (GtkComboBox *combo_box,
 {
   GtkComboBoxPrivate *priv = combo_box->priv;
   GtkAllocation content_allocation;
-  GdkScreen *screen;
-  gint monitor_num;
-  GdkRectangle monitor;
+  GdkDisplay *display;
+  GdkMonitor *monitor;
+  GdkRectangle area;
   GtkRequisition popup_req;
   GtkPolicyType hpolicy, vpolicy;
   GdkWindow *window;
@@ -2162,31 +2160,31 @@ gtk_combo_box_list_position (GtkComboBox *combo_box,
 
   *height = popup_req.height;
 
-  screen = gtk_widget_get_screen (widget);
-  monitor_num = gdk_screen_get_monitor_at_window (screen, window);
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  display = gtk_widget_get_display (widget);
+  monitor = gdk_display_get_monitor_at_window (display, window);
+  gdk_monitor_get_workarea (monitor, &area);
 
   if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
     *x = *x + content_allocation.width - *width;
 
-  if (*x < monitor.x)
-    *x = monitor.x;
-  else if (*x + *width > monitor.x + monitor.width)
-    *x = monitor.x + monitor.width - *width;
+  if (*x < area.x)
+    *x = area.x;
+  else if (*x + *width > area.x + area.width)
+    *x = area.x + area.width - *width;
 
-  if (*y + content_allocation.height + *height <= monitor.y + monitor.height)
+  if (*y + content_allocation.height + *height <= area.y + area.height)
     *y += content_allocation.height;
-  else if (*y - *height >= monitor.y)
+  else if (*y - *height >= area.y)
     *y -= *height;
-  else if (monitor.y + monitor.height - (*y + content_allocation.height) > *y - monitor.y)
+  else if (area.y + area.height - (*y + content_allocation.height) > *y - area.y)
     {
       *y += content_allocation.height;
-      *height = monitor.y + monitor.height - *y;
+      *height = area.y + area.height - *y;
     }
   else
     {
-      *height = *y - monitor.y;
-      *y = monitor.y;
+      *height = *y - area.y;
+      *y = area.y;
     }
 
   if (popup_req.height > *height)
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 000322b..f46a970 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -9415,24 +9415,21 @@ popup_position_func (GtkMenu   *menu,
   GtkEntry *entry = GTK_ENTRY (user_data);
   GtkEntryPrivate *priv = entry->priv;
   GtkWidget *widget = GTK_WIDGET (entry);
-  GdkScreen *screen;
+  GdkDisplay *display;
   GtkRequisition menu_req;
-  GdkRectangle monitor;
-  gint monitor_num, strong_x, height;
- 
+  GdkMonitor *monitor;
+  GdkRectangle area;
+  gint strong_x, height;
+
   g_return_if_fail (gtk_widget_get_realized (widget));
 
   gdk_window_get_origin (priv->text_area, x, y);
 
-  screen = gtk_widget_get_screen (widget);
-  monitor_num = gdk_screen_get_monitor_at_window (screen, priv->text_area);
-  if (monitor_num < 0)
-    monitor_num = 0;
-  gtk_menu_set_monitor (menu, monitor_num);
-
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-  gtk_widget_get_preferred_size (priv->popup_menu,
-                                 &menu_req, NULL);
+  display = gtk_widget_get_display (widget);
+  monitor = gdk_display_get_monitor_at_window (display, priv->text_area);
+  gtk_menu_place_on_monitor (menu, monitor);
+  gdk_monitor_get_workarea (monitor, &area);
+  gtk_widget_get_preferred_size (priv->popup_menu, &menu_req, NULL);
   height = gdk_window_get_height (priv->text_area);
   gtk_entry_get_cursor_locations (entry, CURSOR_STANDARD, &strong_x, NULL);
 
@@ -9440,11 +9437,11 @@ popup_position_func (GtkMenu   *menu,
   if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
     *x -= menu_req.width;
 
-  if ((*y + height + menu_req.height) <= monitor.y + monitor.height)
+  if ((*y + height + menu_req.height) <= area.y + area.height)
     *y += height;
-  else if ((*y - menu_req.height) >= monitor.y)
+  else if ((*y - menu_req.height) >= area.y)
     *y -= menu_req.height;
-  else if (monitor.y + monitor.height - (*y + height) > *y)
+  else if (area.y + area.height - (*y + height) > *y)
     *y += height;
   else
     *y -= menu_req.height;
diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c
index f5fa48f..439d856 100644
--- a/gtk/gtkentrycompletion.c
+++ b/gtk/gtkentrycompletion.c
@@ -1494,10 +1494,10 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
   GtkAllocation allocation;
   gint x, y;
   gint matches, actions, items, height;
-  GdkScreen *screen;
-  gint monitor_num;
+  GdkDisplay *display;
+  GdkMonitor *monitor;
   gint vertical_separator;
-  GdkRectangle monitor;
+  GdkRectangle area;
   GdkWindow *window;
   GtkRequisition popup_req;
   GtkRequisition entry_req;
@@ -1546,16 +1546,16 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
 
   gtk_widget_realize (completion->priv->tree_view);
 
-  screen = gtk_widget_get_screen (GTK_WIDGET (completion->priv->entry));
-  monitor_num = gdk_screen_get_monitor_at_window (screen, window);
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  display = gtk_widget_get_display (GTK_WIDGET (completion->priv->entry));
+  monitor = gdk_display_get_monitor_at_window (display, window);
+  gdk_monitor_get_workarea (monitor, &area);
 
   if (height == 0)
     items = 0;
-  else if (y > monitor.height / 2)
-    items = MIN (matches, (((monitor.y + y) - (actions * action_height)) / height) - 1);
+  else if (y > area.height / 2)
+    items = MIN (matches, (((area.y + y) - (actions * action_height)) / height) - 1);
   else
-    items = MIN (matches, (((monitor.height - y) - (actions * action_height)) / height) - 1);
+    items = MIN (matches, (((area.height - y) - (actions * action_height)) / height) - 1);
 
   if (items <= 0)
     gtk_widget_hide (completion->priv->scrolled_window);
@@ -1563,7 +1563,7 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
     gtk_widget_show (completion->priv->scrolled_window);
 
   if (completion->priv->popup_set_width)
-    width = MIN (allocation.width, monitor.width);
+    width = MIN (allocation.width, area.width);
   else
     width = -1;
 
@@ -1580,13 +1580,13 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
   gtk_widget_get_preferred_size (completion->priv->popup_window,
                                  &popup_req, NULL);
 
-  if (x < monitor.x)
-    x = monitor.x;
-  else if (x + popup_req.width > monitor.x + monitor.width)
-    x = monitor.x + monitor.width - popup_req.width;
+  if (x < area.x)
+    x = area.x;
+  else if (x + popup_req.width > area.x + area.width)
+    x = area.x + area.width - popup_req.width;
 
-  if (y + entry_req.height + popup_req.height <= monitor.y + monitor.height ||
-      y - monitor.y < (monitor.y + monitor.height) - (y + entry_req.height))
+  if (y + entry_req.height + popup_req.height <= area.y + area.height ||
+      y - area.y < (area.y + area.height) - (y + entry_req.height))
     {
       y += entry_req.height;
       above = FALSE;
diff --git a/gtk/gtklinkbutton.c b/gtk/gtklinkbutton.c
index 26c6cf1..fe46867 100644
--- a/gtk/gtklinkbutton.c
+++ b/gtk/gtklinkbutton.c
@@ -346,11 +346,11 @@ popup_position_func (GtkMenu  *menu,
   GtkLinkButtonPrivate *priv = link_button->priv;
   GtkAllocation allocation;
   GtkWidget *widget = GTK_WIDGET (link_button);
-  GdkScreen *screen = gtk_widget_get_screen (widget);
+  GdkDisplay *display;
+  GdkMonitor *monitor;
   GtkRequisition req;
-  gint monitor_num;
-  GdkRectangle monitor;
-  
+  GdkRectangle area;
+
   g_return_if_fail (gtk_widget_get_realized (widget));
 
   gdk_window_get_origin (gtk_widget_get_window (widget), x, y);
@@ -361,12 +361,13 @@ popup_position_func (GtkMenu  *menu,
   *x += allocation.width / 2;
   *y += allocation.height;
 
-  monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
-  gtk_menu_set_monitor (menu, monitor_num);
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  display = gtk_widget_get_display (widget);
+  monitor = gdk_display_get_monitor_at_point (display, *x, *y);
+  gtk_menu_place_on_monitor (menu, monitor);
+  gdk_monitor_get_workarea (monitor, &area);
 
-  *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
-  *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
+  *x = CLAMP (*x, area.x, area.x + MAX (0, area.width - req.width));
+  *y = CLAMP (*y, area.y, area.y + MAX (0, area.height - req.height));
 
   *push_in = FALSE;
 }
diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c
index 79aece0..1f402fa 100644
--- a/gtk/gtkmenubutton.c
+++ b/gtk/gtkmenubutton.c
@@ -251,9 +251,9 @@ menu_position_up_down_func (GtkMenu       *menu,
   GtkWidget *widget = GTK_WIDGET (menu_button);
   GtkWidget *toplevel;
   GtkTextDirection direction;
-  GdkRectangle monitor;
-  gint monitor_num;
-  GdkScreen *screen;
+  GdkRectangle workarea;
+  GdkDisplay *display;
+  GdkMonitor *monitor;
   GdkWindow *window;
   GtkAllocation menu_allocation, allocation, arrow_allocation;
   GtkAlign align;
@@ -272,11 +272,9 @@ menu_position_up_down_func (GtkMenu       *menu,
   direction = gtk_widget_get_direction (widget);
   window = gtk_widget_get_window (priv->align_widget ? priv->align_widget : widget);
 
-  screen = gtk_widget_get_screen (GTK_WIDGET (menu));
-  monitor_num = gdk_screen_get_monitor_at_window (screen, window);
-  if (monitor_num < 0)
-    monitor_num = 0;
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  display = gtk_widget_get_display (GTK_WIDGET (menu));
+  monitor = gdk_display_get_monitor_at_window (display, window);
+  gdk_monitor_get_workarea (monitor, &workarea);
 
   gtk_widget_get_allocation (priv->align_widget ? priv->align_widget : widget, &allocation);
   gtk_widget_get_allocation (widget, &arrow_allocation);
@@ -298,17 +296,17 @@ menu_position_up_down_func (GtkMenu       *menu,
   else if (menu_allocation.width > allocation.width)
     *x -= menu_allocation.width - allocation.width;
 
-  if (priv->arrow_type == GTK_ARROW_UP && *y - menu_allocation.height >= monitor.y)
+  if (priv->arrow_type == GTK_ARROW_UP && *y - menu_allocation.height >= workarea.y)
     {
       *y -= menu_allocation.height;
     }
   else
     {
-      if ((*y + arrow_allocation.height + menu_allocation.height) <= monitor.y + monitor.height)
+      if ((*y + arrow_allocation.height + menu_allocation.height) <= workarea.y + workarea.height)
         *y += arrow_allocation.height;
-      else if ((*y - menu_allocation.height) >= monitor.y)
+      else if ((*y - menu_allocation.height) >= workarea.y)
         *y -= menu_allocation.height;
-      else if (monitor.y + monitor.height - (*y + arrow_allocation.height) > *y)
+      else if (workarea.y + workarea.height - (*y + arrow_allocation.height) > *y)
         *y += arrow_allocation.height;
       else
         *y -= menu_allocation.height;
@@ -328,9 +326,9 @@ menu_position_side_func (GtkMenu       *menu,
   GtkAllocation allocation;
   GtkAllocation menu_allocation;
   GtkWidget *widget = GTK_WIDGET (menu_button);
-  GdkRectangle monitor;
-  gint monitor_num;
-  GdkScreen *screen;
+  GdkDisplay *display;
+  GdkMonitor *monitor;
+  GdkRectangle workarea;
   GdkWindow *window;
   GtkAlign align;
   GtkTextDirection direction;
@@ -339,11 +337,9 @@ menu_position_side_func (GtkMenu       *menu,
 
   direction = gtk_widget_get_direction (widget);
   align = gtk_widget_get_valign (GTK_WIDGET (menu));
-  screen = gtk_widget_get_screen (GTK_WIDGET (menu));
-  monitor_num = gdk_screen_get_monitor_at_window (screen, window);
-  if (monitor_num < 0)
-    monitor_num = 0;
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  display = gtk_widget_get_display (GTK_WIDGET (menu));
+  monitor = gdk_display_get_monitor_at_window (display, window);
+  gdk_monitor_get_workarea (monitor, &workarea);
 
   gdk_window_get_origin (gtk_button_get_event_window (GTK_BUTTON (menu_button)), x, y);
 
@@ -354,14 +350,14 @@ menu_position_side_func (GtkMenu       *menu,
       (priv->arrow_type == GTK_ARROW_LEFT && direction == GTK_TEXT_DIR_RTL))
 
     {
-      if (*x + allocation.width + menu_allocation.width <= monitor.x + monitor.width)
+      if (*x + allocation.width + menu_allocation.width <= workarea.x + workarea.width)
         *x += allocation.width;
       else
         *x -= menu_allocation.width;
     }
   else
     {
-      if (*x - menu_allocation.width >= monitor.x)
+      if (*x - menu_allocation.width >= workarea.x)
         *x -= menu_allocation.width;
       else
         *x += allocation.width;
diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c
index 419f4c5..d55ee92 100644
--- a/gtk/gtkmenuitem.c
+++ b/gtk/gtkmenuitem.c
@@ -2099,12 +2099,12 @@ gtk_menu_item_position_menu (GtkMenu  *menu,
   GtkWidget *widget;
   GtkMenuItem *parent_menu_item;
   GtkWidget *parent;
-  GdkScreen *screen;
+  GdkDisplay *display;
   gint twidth, theight;
   gint tx, ty;
   GtkTextDirection direction;
-  GdkRectangle monitor;
-  gint monitor_num;
+  GdkMonitor *monitor;
+  GdkRectangle workarea;
   gint horizontal_offset;
   gint vertical_offset;
   gint available_left, available_right;
@@ -2125,11 +2125,9 @@ gtk_menu_item_position_menu (GtkMenu  *menu,
   twidth = gtk_widget_get_allocated_width (GTK_WIDGET (menu));
   theight = gtk_widget_get_allocated_height (GTK_WIDGET (menu));
 
-  screen = gtk_widget_get_screen (GTK_WIDGET (menu));
-  monitor_num = gdk_screen_get_monitor_at_window (screen, priv->event_window);
-  if (monitor_num < 0)
-    monitor_num = 0;
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  display = gtk_widget_get_display (GTK_WIDGET (menu));
+  monitor = gdk_display_get_monitor_at_window (display, priv->event_window);
+  gdk_monitor_get_workarea (monitor, &workarea);
 
   if (!gdk_window_get_origin (gtk_widget_get_window (widget), &tx, &ty))
     {
@@ -2144,8 +2142,8 @@ gtk_menu_item_position_menu (GtkMenu  *menu,
 
   get_offsets (menu, &horizontal_offset, &vertical_offset);
 
-  available_left = tx - monitor.x;
-  available_right = monitor.x + monitor.width - (tx + allocation.width);
+  available_left = tx - workarea.x;
+  available_right = workarea.x + workarea.width - (tx + allocation.width);
 
   parent = gtk_widget_get_parent (widget);
   priv->from_menubar = GTK_IS_MENU_BAR (parent);
@@ -2160,11 +2158,11 @@ gtk_menu_item_position_menu (GtkMenu  *menu,
           priv->submenu_direction = GTK_DIRECTION_LEFT;
           tx += allocation.width - twidth;
         }
-      if ((ty + allocation.height + theight) <= monitor.y + monitor.height)
+      if ((ty + allocation.height + theight) <= workarea.y + workarea.height)
         ty += allocation.height;
-      else if ((ty - theight) >= monitor.y)
+      else if ((ty - theight) >= workarea.y)
         ty -= theight;
-      else if (monitor.y + monitor.height - (ty + allocation.height) > ty)
+      else if (workarea.y + workarea.height - (ty + allocation.height) > ty)
         ty += allocation.height;
       else
         ty -= theight;
@@ -2194,7 +2192,7 @@ gtk_menu_item_position_menu (GtkMenu  *menu,
       switch (priv->submenu_direction)
         {
         case GTK_DIRECTION_LEFT:
-          if (tx - twidth - parent_padding.left - horizontal_offset >= monitor.x ||
+          if (tx - twidth - parent_padding.left - horizontal_offset >= workarea.x ||
               available_left >= available_right)
             tx -= twidth + parent_padding.left + horizontal_offset;
           else
@@ -2205,7 +2203,7 @@ gtk_menu_item_position_menu (GtkMenu  *menu,
           break;
 
         case GTK_DIRECTION_RIGHT:
-          if (tx + allocation.width + parent_padding.right + horizontal_offset + twidth <= monitor.x + 
monitor.width ||
+          if (tx + allocation.width + parent_padding.right + horizontal_offset + twidth <= workarea.x + 
workarea.width ||
               available_right >= available_left)
             tx += allocation.width + parent_padding.right + horizontal_offset;
           else
@@ -2219,17 +2217,17 @@ gtk_menu_item_position_menu (GtkMenu  *menu,
       ty += vertical_offset;
 
       /* If the height of the menu doesn't fit we move it upward. */
-      ty = CLAMP (ty, monitor.y, MAX (monitor.y, monitor.y + monitor.height - theight));
+      ty = CLAMP (ty, workarea.y, MAX (workarea.y, workarea.y + workarea.height - theight));
       break;
     }
 
   /* If we have negative, tx, here it is because we can't get
    * the menu all the way on screen. Favor the left portion.
    */
-  *x = CLAMP (tx, monitor.x, MAX (monitor.x, monitor.x + monitor.width - twidth));
+  *x = CLAMP (tx, workarea.x, MAX (workarea.x, workarea.x + workarea.width - twidth));
   *y = ty;
 
-  gtk_menu_set_monitor (menu, monitor_num);
+  gtk_menu_place_on_monitor (menu, monitor);
 
   if (!gtk_widget_get_visible (menu->priv->toplevel))
     {
diff --git a/gtk/gtkrecentchooserdefault.c b/gtk/gtkrecentchooserdefault.c
index f9a0a60..d1e9672 100644
--- a/gtk/gtkrecentchooserdefault.c
+++ b/gtk/gtkrecentchooserdefault.c
@@ -873,10 +873,10 @@ set_default_size (GtkRecentChooserDefault *impl)
   GtkWidget *widget;
   gint width, height;
   double font_size;
-  GdkScreen *screen;
-  gint monitor_num;
+  GdkDisplay *display;
+  GdkMonitor *monitor;
   GtkRequisition req;
-  GdkRectangle monitor;
+  GdkRectangle workarea;
   GtkStyleContext *context;
 
   widget = GTK_WIDGET (impl);
@@ -894,14 +894,12 @@ set_default_size (GtkRecentChooserDefault *impl)
   height = MAX (height, req.height);
 
   /* ... but no larger than the monitor */
-  screen = gtk_widget_get_screen (widget);
-  monitor_num = gdk_screen_get_monitor_at_window (screen,
-                                                  gtk_widget_get_window (widget));
-
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  display = gtk_widget_get_display (widget);
+  monitor = gdk_display_get_monitor_at_window (display, gtk_widget_get_window (widget));
+  gdk_monitor_get_workarea (monitor, &workarea);
 
-  width = MIN (width, monitor.width * 3 / 4);
-  height = MIN (height, monitor.height * 3 / 4);
+  width = MIN (width, workarea.width * 3 / 4);
+  height = MIN (height, workarea.height * 3 / 4);
 
   /* Set size */
   scrollw = GTK_SCROLLED_WINDOW (gtk_widget_get_parent (impl->priv->recent_view));
@@ -1739,30 +1737,29 @@ popup_position_func (GtkMenu   *menu,
 {
   GtkAllocation allocation;
   GtkWidget *widget = GTK_WIDGET (user_data);
-  GdkScreen *screen = gtk_widget_get_screen (widget);
   GtkRequisition req;
-  gint monitor_num;
-  GdkRectangle monitor;
+  GdkDisplay *display;
+  GdkMonitor *monitor;
+  GdkRectangle workarea;
 
   if (G_UNLIKELY (!gtk_widget_get_realized (widget)))
     return;
 
-  gdk_window_get_origin (gtk_widget_get_window (widget),
-                         x, y);
+  gdk_window_get_origin (gtk_widget_get_window (widget), x, y);
 
-  gtk_widget_get_preferred_size (GTK_WIDGET (menu),
-                                 &req, NULL);
+  gtk_widget_get_preferred_size (GTK_WIDGET (menu), &req, NULL);
 
   gtk_widget_get_allocation (widget, &allocation);
   *x += (allocation.width - req.width) / 2;
   *y += (allocation.height - req.height) / 2;
 
-  monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
-  gtk_menu_set_monitor (menu, monitor_num);
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  display = gtk_widget_get_display (widget);
+  monitor = gdk_display_get_monitor_at_point (display, *x, *y);
+  gtk_menu_place_on_monitor (menu, monitor);
+  gdk_monitor_get_workarea (monitor, &workarea);
 
-  *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
-  *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
+  *x = CLAMP (*x, workarea.x, workarea.x + MAX (0, workarea.width - req.width));
+  *y = CLAMP (*y, workarea.y, workarea.y + MAX (0, workarea.height - req.height));
 
   *push_in = FALSE;
 }
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index d92d1cf..cc09169 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -9356,17 +9356,17 @@ popup_position_func (GtkMenu   *menu,
   GdkRectangle onscreen_rect;
   gint root_x, root_y;
   GtkTextIter iter;
-  GtkRequisition req;      
-  GdkScreen *screen;
-  gint monitor_num;
-  GdkRectangle monitor;
-      
+  GtkRequisition req;
+  GdkDisplay *display;
+  GdkMonitor *monitor;
+  GdkRectangle workarea;
+
   text_view = GTK_TEXT_VIEW (user_data);
   widget = GTK_WIDGET (text_view);
-  
+
   g_return_if_fail (gtk_widget_get_realized (widget));
-  
-  screen = gtk_widget_get_screen (widget);
+
+  display = gtk_widget_get_display (widget);
 
   gdk_window_get_origin (gtk_widget_get_window (widget),
                          &root_x, &root_y);
@@ -9391,7 +9391,7 @@ popup_position_func (GtkMenu   *menu,
       cursor_rect.x < onscreen_rect.x + onscreen_rect.width &&
       cursor_rect.y >= onscreen_rect.y &&
       cursor_rect.y < onscreen_rect.y + onscreen_rect.height)
-    {    
+    {
       gtk_text_view_buffer_to_window_coords (text_view,
                                              GTK_TEXT_WINDOW_WIDGET,
                                              cursor_rect.x, cursor_rect.y,
@@ -9411,12 +9411,12 @@ popup_position_func (GtkMenu   *menu,
   *x = CLAMP (*x, root_x, (root_x + allocation.width));
   *y = CLAMP (*y, root_y, (root_y + allocation.height));
 
-  monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
-  gtk_menu_set_monitor (menu, monitor_num);
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  monitor = gdk_display_get_monitor_at_point (display, *x, *y);
+  gtk_menu_place_on_monitor (menu, monitor);
+  gdk_monitor_get_workarea (monitor, &workarea);
 
-  *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
-  *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
+  *x = CLAMP (*x, workarea.x, workarea.x + MAX (0, workarea.width - req.width));
+  *y = CLAMP (*y, workarea.y, workarea.y + MAX (0, workarea.height - req.height));
 
   *push_in = FALSE;
 }
diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c
index a3c7778..69b9bf1 100644
--- a/gtk/gtktoolbar.c
+++ b/gtk/gtktoolbar.c
@@ -2629,50 +2629,48 @@ menu_position_func (GtkMenu  *menu,
   GtkToolbarPrivate *priv = toolbar->priv;
   GtkRequisition req;
   GtkRequisition menu_req;
-  GdkRectangle monitor;
-  gint monitor_num;
-  GdkScreen *screen;
+  GdkRectangle workarea;
+  GdkMonitor *monitor;
+  GdkDisplay *display;
 
   gtk_widget_get_preferred_size (priv->arrow_button,
                                  &req, NULL);
   gtk_widget_get_preferred_size (GTK_WIDGET (menu),
                                  &menu_req, NULL);
 
-  screen = gtk_widget_get_screen (GTK_WIDGET (menu));
-  monitor_num = gdk_screen_get_monitor_at_window (screen,
-                                                  gtk_widget_get_window (priv->arrow_button));
-  if (monitor_num < 0)
-    monitor_num = 0;
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  display = gtk_widget_get_display (GTK_WIDGET (menu));
+  monitor = gdk_display_get_monitor_at_window (display,
+                                               gtk_widget_get_window (priv->arrow_button));
+  gdk_monitor_get_workarea (monitor, &workarea);
 
   gtk_widget_get_allocation (priv->arrow_button, &allocation);
 
   gdk_window_get_origin (gtk_button_get_event_window (GTK_BUTTON (priv->arrow_button)), x, y);
   if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
     {
-      if (gtk_widget_get_direction (GTK_WIDGET (toolbar)) == GTK_TEXT_DIR_LTR) 
+      if (gtk_widget_get_direction (GTK_WIDGET (toolbar)) == GTK_TEXT_DIR_LTR)
        *x += allocation.width - req.width;
-      else 
+      else
        *x += req.width - menu_req.width;
 
-      if ((*y + allocation.height + menu_req.height) <= monitor.y + monitor.height)
+      if ((*y + allocation.height + menu_req.height) <= workarea.y + workarea.height)
        *y += allocation.height;
-      else if ((*y - menu_req.height) >= monitor.y)
+      else if ((*y - menu_req.height) >= workarea.y)
        *y -= menu_req.height;
-      else if (monitor.y + monitor.height - (*y + allocation.height) > *y)
+      else if (workarea.y + workarea.height - (*y + allocation.height) > *y)
        *y += allocation.height;
       else
        *y -= menu_req.height;
     }
-  else 
+  else
     {
-      if (gtk_widget_get_direction (GTK_WIDGET (toolbar)) == GTK_TEXT_DIR_LTR) 
+      if (gtk_widget_get_direction (GTK_WIDGET (toolbar)) == GTK_TEXT_DIR_LTR)
        *x += allocation.width;
-      else 
+      else
        *x -= menu_req.width;
 
-      if (*y + menu_req.height > monitor.y + monitor.height &&
-         *y + allocation.height - monitor.y > monitor.y + monitor.height - *y)
+      if (*y + menu_req.height > workarea.y + workarea.height &&
+         *y + allocation.height - workarea.y > workarea.y + workarea.height - *y)
        *y += allocation.height - menu_req.height;
     }
 
diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c
index a16edaf..269425f 100644
--- a/gtk/gtktooltip.c
+++ b/gtk/gtktooltip.c
@@ -895,9 +895,8 @@ gtk_tooltip_position (GtkTooltip *tooltip,
                      GtkWidget  *new_tooltip_widget)
 {
   gint x, y, width, height;
-  GdkScreen *screen;
-  gint monitor_num;
-  GdkRectangle monitor;
+  GdkMonitor *monitor;
+  GdkRectangle workarea;
   guint cursor_size;
   GdkRectangle bounds;
   GtkBorder border;
@@ -909,17 +908,13 @@ gtk_tooltip_position (GtkTooltip *tooltip,
 
   tooltip->tooltip_widget = new_tooltip_widget;
 
-  screen = gtk_widget_get_screen (new_tooltip_widget);
-
   _gtk_window_get_shadow_width (GTK_WINDOW (tooltip->current_window), &border);
 
   width = gtk_widget_get_allocated_width (GTK_WIDGET (tooltip->current_window)) - border.left - border.right;
   height = gtk_widget_get_allocated_height (GTK_WIDGET (tooltip->current_window)) - border.top - 
border.bottom;
 
-  monitor_num = gdk_screen_get_monitor_at_point (screen,
-                                                 tooltip->last_x,
-                                                 tooltip->last_y);
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
+  monitor = gdk_display_get_monitor_at_point (display, tooltip->last_x, tooltip->last_y);
+  gdk_monitor_get_workarea (monitor, &workarea);
 
   get_bounding_box (new_tooltip_widget, &bounds);
 
@@ -931,7 +926,7 @@ gtk_tooltip_position (GtkTooltip *tooltip,
   x = bounds.x + bounds.width / 2 - width / 2;
   y = bounds.y + bounds.height + 4;
 
-  if (y + height <= monitor.y + monitor.height)
+  if (y + height <= workarea.y + workarea.height)
     {
       if (tooltip->keyboard_mode_enabled)
         goto found;
@@ -951,7 +946,7 @@ gtk_tooltip_position (GtkTooltip *tooltip,
   x = bounds.x + bounds.width / 2 - width / 2;
   y = bounds.y - height - 4;
 
-  if (y >= monitor.y)
+  if (y >= workarea.y)
     {
       if (tooltip->keyboard_mode_enabled)
         goto found;
@@ -971,7 +966,7 @@ gtk_tooltip_position (GtkTooltip *tooltip,
   x = bounds.x + bounds.width + 4;
   y = bounds.y + bounds.height / 2 - height / 2;
 
-  if (x + width <= monitor.x + monitor.width)
+  if (x + width <= workarea.x + workarea.width)
     {
       if (tooltip->keyboard_mode_enabled)
         goto found;
@@ -991,7 +986,7 @@ gtk_tooltip_position (GtkTooltip *tooltip,
   x = bounds.x - width - 4;
   y = bounds.y + bounds.height / 2 - height / 2;
 
-  if (x >= monitor.x)
+  if (x >= workarea.x)
     {
       if (tooltip->keyboard_mode_enabled)
         goto found;
@@ -1022,15 +1017,15 @@ gtk_tooltip_position (GtkTooltip *tooltip,
 
 found:
   /* Show it */
-  if (x + width > monitor.x + monitor.width)
-    x -= x - (monitor.x + monitor.width) + width;
-  else if (x < monitor.x)
-    x = monitor.x;
-
-  if (y + height > monitor.y + monitor.height)
-    y -= y - (monitor.y + monitor.height) + height;
-  else if (y < monitor.y)
-    y = monitor.y;
+  if (x + width > workarea.x + workarea.width)
+    x -= x - (workarea.x + workarea.width) + width;
+  else if (x < workarea.x)
+    x = workarea.x;
+
+  if (y + height > workarea.y + workarea.height)
+    y -= y - (workarea.y + workarea.height) + height;
+  else if (y < workarea.y)
+    y = workarea.y;
 
   if (!tooltip->keyboard_mode_enabled)
     {
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index a1a76f9..667227c 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -15038,14 +15038,9 @@ gtk_tree_view_search_position_func (GtkTreeView *tree_view,
   gint x, y;
   gint tree_x, tree_y;
   gint tree_width, tree_height;
+  GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (tree_view));
   GdkWindow *tree_window = gtk_widget_get_window (GTK_WIDGET (tree_view));
-  GdkScreen *screen = gdk_window_get_screen (tree_window);
   GtkRequisition requisition;
-  gint monitor_num;
-  GdkRectangle monitor;
-
-  monitor_num = gdk_screen_get_monitor_at_window (screen, tree_window);
-  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
 
   gtk_widget_realize (search_window);
 
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 95b8e24..52b802f 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -10838,7 +10838,8 @@ gint
 gtk_widget_get_scale_factor (GtkWidget *widget)
 {
   GtkWidget *toplevel;
-  GdkScreen *screen;
+  GdkDisplay *display;
+  GdkMonitor *monitor;
 
   g_return_val_if_fail (GTK_IS_WIDGET (widget), 1);
 
@@ -10852,11 +10853,10 @@ gtk_widget_get_scale_factor (GtkWidget *widget)
   /* else fall back to something that is more likely to be right than
    * just returning 1:
    */
-  screen = gtk_widget_get_screen (widget);
-  if (screen)
-    return gdk_screen_get_monitor_scale_factor (screen, 0);
+  display = gtk_widget_get_display (widget);
+  monitor = gdk_display_get_monitor (display, 0);
 
-  return 1;
+  return gdk_monitor_get_scale_factor (monitor);
 }
 
 /**
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 31086ed..11974d5 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -183,6 +183,7 @@ struct _GtkWindowPrivate
   GtkWindowGeometryInfo *geometry_info;
   GtkWindowGroup        *group;
   GdkScreen             *screen;
+  GdkDisplay            *display;
   GtkApplication        *application;
 
   GList                 *popovers;
@@ -6402,28 +6403,22 @@ gtk_window_guess_default_size (GtkWindow *window,
                                gint      *height)
 {
   GtkWidget *widget;
-  GdkScreen *screen;
+  GdkDisplay *display;
   GdkWindow *gdkwindow;
+  GdkMonitor *monitor;
   GdkRectangle workarea;
   int minimum, natural;
 
   widget = GTK_WIDGET (window);
-  screen = _gtk_window_get_screen (window);
+  display = gdk_screen_get_display (_gtk_window_get_screen (window));
   gdkwindow = _gtk_widget_get_window (widget);
 
   if (gdkwindow)
-    {
-      gdk_screen_get_monitor_workarea (screen,
-                                       gdk_screen_get_monitor_at_window (screen, gdkwindow),
-                                       &workarea);
-    }
+    monitor = gdk_display_get_monitor_at_window (display, gdkwindow);
   else
-    {
-      /* XXX: Figure out what screen we appear on */
-      gdk_screen_get_monitor_workarea (screen,
-                                       0,
-                                       &workarea);
-    }
+    monitor = gdk_display_get_monitor (display, 0);
+
+  gdk_monitor_get_workarea (monitor, &workarea);
 
   *width = workarea.width;
   *height = workarea.height;
@@ -9198,40 +9193,31 @@ get_effective_position (GtkWindow *window)
   return pos;
 }
 
-static int
+static GdkMonitor *
 get_center_monitor_of_window (GtkWindow *window)
 {
+  GdkDisplay *display;
+
   /* We could try to sort out the relative positions of the monitors and
    * stuff, or we could just be losers and assume you have a row
    * or column of monitors.
    */
-  return gdk_screen_get_n_monitors (gtk_window_check_screen (window)) / 2;
+  display = gdk_screen_get_display (gtk_window_check_screen (window));
+  return gdk_display_get_monitor (display, gdk_display_get_n_monitors (display) / 2);
 }
 
-static int
+static GdkMonitor *
 get_monitor_containing_pointer (GtkWindow *window)
 {
   gint px, py;
-  gint monitor_num;
-  GdkScreen *window_screen;
-  GdkScreen *pointer_screen;
   GdkDisplay *display;
   GdkDevice *pointer;
 
-  window_screen = gtk_window_check_screen (window);
-  display = gdk_screen_get_display (window_screen);
+  display = gdk_screen_get_display (gtk_window_check_screen (window));
   pointer = gdk_seat_get_pointer (gdk_display_get_default_seat (display));
+  gdk_device_get_position (pointer, NULL, &px, &py);
 
-  gdk_device_get_position (pointer,
-                           &pointer_screen,
-                           &px, &py);
-
-  if (pointer_screen == window_screen)
-    monitor_num = gdk_screen_get_monitor_at_point (pointer_screen, px, py);
-  else
-    monitor_num = -1;
-
-  return monitor_num;
+  return gdk_display_get_monitor_at_point (display, px, py);
 }
 
 static void
@@ -9241,27 +9227,26 @@ center_window_on_monitor (GtkWindow *window,
                           gint      *x,
                           gint      *y)
 {
-  GdkRectangle monitor;
-  int monitor_num;
+  GdkRectangle area;
+  GdkMonitor *monitor;
 
-  monitor_num = get_monitor_containing_pointer (window);
+  monitor = get_monitor_containing_pointer (window);
 
-  if (monitor_num == -1)
-    monitor_num = get_center_monitor_of_window (window);
+  if (monitor == NULL)
+    monitor = get_center_monitor_of_window (window);
 
-  gdk_screen_get_monitor_workarea (gtk_window_check_screen (window),
-                                    monitor_num, &monitor);
+ gdk_monitor_get_workarea (monitor, &area);
 
-  *x = (monitor.width - w) / 2 + monitor.x;
-  *y = (monitor.height - h) / 2 + monitor.y;
+  *x = (area.width - w) / 2 + area.x;
+  *y = (area.height - h) / 2 + area.y;
 
   /* Be sure we aren't off the monitor, ignoring _NET_WM_STRUT
    * and WM decorations.
    */
-  if (*x < monitor.x)
-    *x = monitor.x;
-  if (*y < monitor.y)
-    *y = monitor.y;
+  if (*x < area.x)
+    *x = area.x;
+  if (*y < area.y)
+    *y = area.y;
 }
 
 static void
@@ -9362,24 +9347,20 @@ gtk_window_compute_configure_request (GtkWindow    *window,
 
         case GTK_WIN_POS_CENTER_ON_PARENT:
           {
+            GdkDisplay *display;
             GtkAllocation allocation;
             GdkWindow *gdk_window;
-            gint monitor_num;
-            GdkRectangle monitor;
+            GdkMonitor *monitor;
+            GdkRectangle area;
             gint ox, oy;
 
             g_assert (_gtk_widget_get_mapped (parent_widget)); /* established earlier */
 
+            display = gdk_screen_get_display (screen);
             gdk_window = _gtk_widget_get_window (parent_widget);
+            monitor = gdk_display_get_monitor_at_window (display, gdk_window);
 
-            if (gdk_window != NULL)
-              monitor_num = gdk_screen_get_monitor_at_window (screen,
-                                                              gdk_window);
-            else
-              monitor_num = -1;
-
-            gdk_window_get_origin (gdk_window,
-                                   &ox, &oy);
+            gdk_window_get_origin (gdk_window, &ox, &oy);
 
             _gtk_widget_get_allocation (parent_widget, &allocation);
             x = ox + (allocation.width - w) / 2;
@@ -9389,10 +9370,10 @@ gtk_window_compute_configure_request (GtkWindow    *window,
              * WM decorations. If parent wasn't on a monitor, just
              * give up.
              */
-            if (monitor_num >= 0)
+            if (monitor != NULL)
               {
-                gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-                clamp_window_to_rectangle (&x, &y, w, h, &monitor);
+                gdk_monitor_get_geometry (monitor, &area);
+                clamp_window_to_rectangle (&x, &y, w, h, &area);
               }
           }
           break;
@@ -9401,24 +9382,17 @@ gtk_window_compute_configure_request (GtkWindow    *window,
           {
             gint screen_width = gdk_screen_get_width (screen);
             gint screen_height = gdk_screen_get_height (screen);
-            gint monitor_num;
-            GdkRectangle monitor;
+            GdkRectangle area;
             GdkDisplay *display;
             GdkDevice *pointer;
-            GdkScreen *pointer_screen;
+            GdkMonitor *monitor;
             gint px, py;
 
             display = gdk_screen_get_display (screen);
             pointer = gdk_seat_get_pointer (gdk_display_get_default_seat (display));
 
-            gdk_device_get_position (pointer,
-                                     &pointer_screen,
-                                     &px, &py);
-
-            if (pointer_screen == screen)
-              monitor_num = gdk_screen_get_monitor_at_point (screen, px, py);
-            else
-              monitor_num = -1;
+            gdk_device_get_position (pointer, NULL, &px, &py);
+            monitor = gdk_display_get_monitor_at_point (display, px, py);
 
             x = px - w / 2;
             y = py - h / 2;
@@ -9429,10 +9403,10 @@ gtk_window_compute_configure_request (GtkWindow    *window,
              * WM decorations. Don't try to figure out what's going
              * on if the mouse wasn't inside a monitor.
              */
-            if (monitor_num >= 0)
+            if (monitor != NULL)
               {
-                gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-                clamp_window_to_rectangle (&x, &y, w, h, &monitor);
+                gdk_monitor_get_geometry (monitor, &area);
+                clamp_window_to_rectangle (&x, &y, w, h, &area);
               }
           }
           break;
@@ -10534,12 +10508,11 @@ gtk_window_fullscreen_on_monitor (GtkWindow *window,
   GtkWindowPrivate *priv;
   GtkWidget *widget;
   GdkWindow *toplevel;
-  
+
   g_return_if_fail (GTK_IS_WINDOW (window));
   g_return_if_fail (GDK_IS_SCREEN (screen));
-  g_return_if_fail (monitor >= 0);
-  g_return_if_fail (monitor < gdk_screen_get_n_monitors (screen));
-  
+  g_return_if_fail (gdk_display_get_monitor (gdk_screen_get_display (screen), monitor) != NULL);
+
   priv = window->priv;
   widget = GTK_WIDGET (window);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]