From e3de626c1f3921439da82933cd84b2d4947a338f Mon Sep 17 00:00:00 2001 From: Moonchild Date: Thu, 14 Aug 2025 17:50:18 +0200 Subject: [PATCH] Bug 1875345 - Report 24 instead of 32 as the colorDepth (and pixelDepth) on Linux (assuming 8 of 32 bits are for the alpha channel). This now matches the logic in our equivalent Windows code, and this is also per spec ("number of bits...excluding the alpha channel"): https://drafts.csswg.org/cssom-view/#dom-screen-colordepth With this change, the WPT test starts passing on Ubuntu 22.04 (which was previously flagged as an unexpected failure). --- widget/gtk/nsScreenGtk.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/widget/gtk/nsScreenGtk.cpp b/widget/gtk/nsScreenGtk.cpp index 61e6605b76..39a0620cfd 100644 --- a/widget/gtk/nsScreenGtk.cpp +++ b/widget/gtk/nsScreenGtk.cpp @@ -97,17 +97,21 @@ NS_IMETHODIMP nsScreenGtk :: GetPixelDepth(int32_t *aPixelDepth) { GdkVisual * visual = gdk_screen_get_system_visual(gdk_screen_get_default()); - *aPixelDepth = gdk_visual_get_depth(visual); - + uint32_t pixelDepth = gdk_visual_get_depth(visual); + if (pixelDepth == 32) { + // If a device reports 32 bits per pixel, it's still only using 8 bits + // per color component, which is what our callers want to know. + // (Some devices report 32 and some devices report 24, because Linux) + pixelDepth = 24; + } + *aPixelDepth = pixelDepth; return NS_OK; - } // GetPixelDepth NS_IMETHODIMP nsScreenGtk :: GetColorDepth(int32_t *aColorDepth) { return GetPixelDepth ( aColorDepth ); - } // GetColorDepth NS_IMETHODIMP