]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix display-pixel-width/height to return physical pixel size.
authorYuuki Harano <masm+github@masm11.me>
Sun, 3 Jan 2021 07:26:25 +0000 (16:26 +0900)
committerYuuki Harano <masm+github@masm11.me>
Sun, 3 Jan 2021 07:26:25 +0000 (16:26 +0900)
* src/pgtkfns.c (Fx_display_pixel_width):
(Fx_display_pixel_height): Return bottom/right-most of all the monitors.

src/pgtkfns.c

index 3e55b83872b0b1481c1e498db9566c372fe87a99..7d2183d2a0a82c36c76235b7be3bed426452646a 100644 (file)
@@ -2408,8 +2408,35 @@ each physical monitor, use `display-monitor-attributes-list'.  */)
   (Lisp_Object terminal)
 {
   struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal);
+  GdkDisplay *gdpy;
+  gint n_monitors, i;
+  int width = 0;
+
+  block_input ();
+  gdpy = dpyinfo->gdpy;
+  n_monitors = gdk_display_get_n_monitors (gdpy);
+
+  for (i = 0; i < n_monitors; ++i)
+    {
+      GdkRectangle rec;
+      int scale = 1;
+
+      GdkMonitor *monitor = gdk_display_get_monitor (gdpy, i);
+      gdk_monitor_get_geometry (monitor, &rec);
+
+      /* GTK returns scaled sizes for the workareas.  */
+      scale = gdk_monitor_get_scale_factor (monitor);
+      rec.x *= scale;
+      rec.y *= scale;
+      rec.width *= scale;
+      rec.height *= scale;
+
+      width = max(width, rec.x + rec.width);
+    }
+
+  unblock_input ();
 
-  return make_fixnum (x_display_pixel_width (dpyinfo));
+  return make_fixnum (width);
 }
 
 
@@ -2425,8 +2452,35 @@ each physical monitor, use `display-monitor-attributes-list'.  */)
   (Lisp_Object terminal)
 {
   struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal);
+  GdkDisplay *gdpy;
+  gint n_monitors, i;
+  int height = 0;
+
+  block_input ();
+  gdpy = dpyinfo->gdpy;
+  n_monitors = gdk_display_get_n_monitors (gdpy);
+
+  for (i = 0; i < n_monitors; ++i)
+    {
+      GdkRectangle rec;
+      int scale = 1;
+
+      GdkMonitor *monitor = gdk_display_get_monitor (gdpy, i);
+      gdk_monitor_get_geometry (monitor, &rec);
+
+      /* GTK returns scaled sizes for the workareas.  */
+      scale = gdk_monitor_get_scale_factor (monitor);
+      rec.x *= scale;
+      rec.y *= scale;
+      rec.width *= scale;
+      rec.height *= scale;
+
+      height = max(height, rec.y + rec.height);
+    }
+
+  unblock_input ();
 
-  return make_fixnum (x_display_pixel_height (dpyinfo));
+  return make_fixnum (height);
 }
 
 DEFUN ("pgtk-display-monitor-attributes-list", Fpgtk_display_monitor_attributes_list,