From cbd788ec5ae04558990467c6d2bd57228516fad3 Mon Sep 17 00:00:00 2001
From: Roderick Colenbrander <thunderbird2k@gmail.com>
Date: Thu, 10 Sep 2009 16:00:00 +0200
Subject: [PATCH] Don't set the color shifts for non-TrueColor bitmaps. This fixes a 8-bit color regression in the bitmap test.

---
 dlls/winex11.drv/bitmap.c |    4 +++-
 dlls/winex11.drv/dib.c    |    2 ++
 dlls/winex11.drv/x11drv.h |    1 +
 3 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/dlls/winex11.drv/bitmap.c b/dlls/winex11.drv/bitmap.c
index fee2dbc..b2d9504 100644
--- a/dlls/winex11.drv/bitmap.c
+++ b/dlls/winex11.drv/bitmap.c
@@ -119,7 +119,7 @@ HBITMAP CDECL X11DRV_SelectBitmap( X11DRV_PDEVICE *physDev, HBITMAP hbitmap )
         wine_tsx11_unlock();
     }
 
-    if(physDev->depth == 1)
+    if(physDev->depth == 1 || !physBitmap->trueColor)
         physDev->color_shifts = NULL;
     else
         physDev->color_shifts = &physBitmap->pixmap_color_shifts;
@@ -172,6 +172,8 @@ BOOL CDECL X11DRV_CreateBitmap( X11DRV_PDEVICE *physDev, HBITMAP hbitmap, LPVOID
     {
         physBitmap->pixmap_depth = screen_depth;
         physBitmap->pixmap_color_shifts = X11DRV_PALETTE_default_shifts;
+        if(visual->class == TrueColor)
+            physBitmap->trueColor = TRUE;
     }
     physBitmap->pixmap = XCreatePixmap(gdi_display, root_window,
                                        bitmap.bmWidth, bitmap.bmHeight, physBitmap->pixmap_depth);
diff --git a/dlls/winex11.drv/dib.c b/dlls/winex11.drv/dib.c
index 0bf2548..f939bc1 100644
--- a/dlls/winex11.drv/dib.c
+++ b/dlls/winex11.drv/dib.c
@@ -4733,6 +4733,7 @@ HBITMAP CDECL X11DRV_CreateDIBSection( X11DRV_PDEVICE *physDev, HBITMAP hbitmap,
 
     if (!(physBitmap = X11DRV_init_phys_bitmap( hbitmap ))) return 0;
     physBitmap->status = DIB_Status_None;
+    physBitmap->trueColor = TRUE;
 
     GetObjectW( hbitmap, sizeof(dib), &dib );
 
@@ -4742,6 +4743,7 @@ HBITMAP CDECL X11DRV_CreateDIBSection( X11DRV_PDEVICE *physDev, HBITMAP hbitmap,
         physBitmap->colorMap = X11DRV_DIB_BuildColorMap( physDev,
                                                          usage, dib.dsBm.bmBitsPixel, bmi,
                                                          &physBitmap->nColorMap );
+        physBitmap->trueColor = FALSE;
     }
 
     /* create pixmap and X image */
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 62b0d63..e97bbea 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -124,6 +124,7 @@ typedef struct
     XImage      *image;             /* cached XImage */
     int         *colorMap;          /* color map info */
     int          nColorMap;
+    BOOL         trueColor;
     CRITICAL_SECTION lock;          /* GDI access lock */
     enum x11drv_shm_mode shm_mode;
 #ifdef HAVE_LIBXXSHM
-- 
1.6.0.4

