From 6ad6517a796cb4536d368091b647423981ad1217 Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Fri, 11 Feb 2022 09:20:46 +0100 Subject: [PATCH] xwayland: Fix cursor color MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When using colored X11 cursors, the colors would appear wrong, yellow would show white, green would show as cyan, and blue would show black whereas red would show fine. This is because the code expanding the cursor data accounts for green for both green and blue channels. Funnily this bug has been there from the beginning. Fix the issue by correctly account for the color channels. Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1303 Signed-off-by: Olivier Fourdan Reviewed-by: Simon Ser Reviewed-by: Michel Dänzer --- hw/xwayland/xwayland-cursor.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/xwayland/xwayland-cursor.c b/hw/xwayland/xwayland-cursor.c index 16c13fb64..e3c1aaa50 100644 --- a/hw/xwayland/xwayland-cursor.c +++ b/hw/xwayland/xwayland-cursor.c @@ -54,9 +54,11 @@ expand_source_and_mask(CursorPtr cursor, CARD32 *data) p = data; fg = ((cursor->foreRed & 0xff00) << 8) | - (cursor->foreGreen & 0xff00) | (cursor->foreGreen >> 8); + (cursor->foreGreen & 0xff00) | + (cursor->foreBlue >> 8); bg = ((cursor->backRed & 0xff00) << 8) | - (cursor->backGreen & 0xff00) | (cursor->backGreen >> 8); + (cursor->backGreen & 0xff00) | + (cursor->backBlue >> 8); stride = BitmapBytePad(bits->width); for (y = 0; y < bits->height; y++) for (x = 0; x < bits->width; x++) {