emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] emacs-26 d22b8d1: Adjust for scaling for mode-line popup m


From: Robert Pluim
Subject: [Emacs-diffs] emacs-26 d22b8d1: Adjust for scaling for mode-line popup menus (Bug#31880)
Date: Fri, 22 Jun 2018 04:03:21 -0400 (EDT)

branch: emacs-26
commit d22b8d1ad12c69a2c97bb9f4c9eb4316df13429e
Author: Robert Pluim <address@hidden>
Commit: Robert Pluim <address@hidden>

    Adjust for scaling for mode-line popup menus (Bug#31880)
    
    * src/xmenu.c (menu_position_func) [HAVE_GTK3]: Take scaling
    into account when calculating screen size.
---
 src/xmenu.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/xmenu.c b/src/xmenu.c
index e7ef31a..d285e56 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -1162,11 +1162,17 @@ menu_position_func (GtkMenu *menu, gint *x, gint *y, 
gboolean *push_in, gpointer
   GtkRequisition req;
   int max_x = -1;
   int max_y = -1;
+#ifdef HAVE_GTK3
+  int scale;
+#endif
 
   Lisp_Object frame, workarea;
 
   XSETFRAME (frame, data->f);
 
+#ifdef HAVE_GTK3
+  scale = xg_get_scale (data->f);
+#endif
   /* TODO: Get the monitor workarea directly without calculating other
      items in x-display-monitor-attributes-list. */
   workarea = call3 (Qframe_monitor_workarea,
@@ -1192,11 +1198,20 @@ menu_position_func (GtkMenu *menu, gint *x, gint *y, 
gboolean *push_in, gpointer
       max_y = x_display_pixel_height (dpyinfo);
     }
 
+  /* frame-monitor-workarea and {x,y}_display_pixel_width/height all
+     return device pixels, but GTK wants scaled pixels.  The positions
+     passed in via data were already scaled for us.  */
+#ifdef HAVE_GTK3
+  max_x /= scale;
+  max_y /= scale;
+#endif
   *x = data->x;
   *y = data->y;
 
   /* Check if there is room for the menu.  If not, adjust x/y so that
-     the menu is fully visible.  */
+     the menu is fully visible.  gtk_widget_get_preferred_size returns
+     scaled pixels, so there is no need to apply the scaling
+     factor.  */
   gtk_widget_get_preferred_size (GTK_WIDGET (menu), NULL, &req);
   if (data->x + req.width > max_x)
     *x -= data->x + req.width - max_x;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]