From b153a38bf41aeaefd59a62e0b3ebb535a039f813 Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Fri, 11 Feb 2022 09:20:46 +0100 Subject: 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 (cherry picked from commit 6ad6517a796cb4536d368091b647423981ad1217) --- 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 c4457cc2a..25304d48d 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++) { -- cgit v1.2.1