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.
This commit is contained in:
Robert Pluim 2018-06-22 09:59:47 +02:00
parent 3d2e3dc1ca
commit d22b8d1ad1

View file

@ -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;