[gtk+/wip/matthiasc/monitor] combobox: Stop using screen width/height



commit a1f86d087881eb8a459044a01e702e58b92f078c
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Apr 10 23:42:57 2016 -0400

    combobox: Stop using screen width/height
    
    Popups should always be placed relative to a monitor.

 gtk/gtkcombobox.c |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
index fe21a1f..481c180 100644
--- a/gtk/gtkcombobox.c
+++ b/gtk/gtkcombobox.c
@@ -2007,10 +2007,12 @@ gtk_combo_box_menu_position_over (GtkMenu  *menu,
   GtkAllocation       content_allocation;
   GtkAllocation       child_allocation;
   GList              *children;
-  gint                screen_width;
   gint                menu_xpos;
   gint                menu_ypos;
   gint                menu_width;
+  GdkDisplay *display;
+  GdkMonitor *monitor;
+  GdkRectangle workarea;
 
   active = gtk_menu_get_active (GTK_MENU (priv->popup_widget));
 
@@ -2056,12 +2058,14 @@ gtk_combo_box_menu_position_over (GtkMenu  *menu,
                               &menu_xpos, &menu_ypos);
 
   /* Clamp the position on screen */
-  screen_width = gdk_screen_get_width (gtk_widget_get_screen (widget));
-  
-  if (menu_xpos < 0)
-    menu_xpos = 0;
-  else if ((menu_xpos + menu_width) > screen_width)
-    menu_xpos -= ((menu_xpos + menu_width) - screen_width);
+  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);
+
+  if (menu_xpos < workarea.x)
+    menu_xpos = workarea.x;
+  else if ((menu_xpos + menu_width) > workarea.x + workarea.width)
+    menu_xpos -= (menu_xpos + menu_width) - (workarea.x + workarea.width);
 
   *x = menu_xpos;
   *y = menu_ypos;


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