]> git.eshelyaron.com Git - emacs.git/commitdiff
Return actual color cell count in x-display-color-cells
authorPo Lu <luangruo@yahoo.com>
Tue, 8 Mar 2022 06:15:01 +0000 (14:15 +0800)
committerPo Lu <luangruo@yahoo.com>
Tue, 8 Mar 2022 06:16:56 +0000 (14:16 +0800)
* src/xfns.c (Fx_display_color_cells): Return the actual amount
of color cells, or the amount of individual combinations of
components.

src/xfns.c

index 3d1fa926096fca7488ea0f99b36431f3e13ac1b3..9a445b26820477c68d0872650a15eadf68fa2259 100644 (file)
@@ -5131,14 +5131,17 @@ If omitted or nil, that stands for the selected frame's display.
 {
   struct x_display_info *dpyinfo = check_x_display_info (terminal);
 
-  int nr_planes = DisplayPlanes (dpyinfo->display,
-                                 XScreenNumberOfScreen (dpyinfo->screen));
+  if (dpyinfo->visual_info.class != TrueColor
+      && dpyinfo->visual_info.class != DirectColor)
+    return make_fixnum (dpyinfo->visual_info.colormap_size);
 
-  /* Truncate nr_planes to 24 to avoid integer overflow.
-     Some displays says 32, but only 24 bits are actually significant.
+  int nr_planes = dpyinfo->n_planes;
+
+  /* Truncate nr_planes to 24 to avoid integer overflow.  Some
+     displays says 32, but only 24 bits are actually significant.
      There are only very few and rare video cards that have more than
-     24 significant bits.  Also 24 bits is more than 16 million colors,
-     it "should be enough for everyone".  */
+     24 significant bits.  Also 24 bits is more than 16 million
+     colors, it "should be enough for everyone".  */
   if (nr_planes > 24) nr_planes = 24;
 
   return make_fixnum (1 << nr_planes);