diff --git a/graphics/x11drv/dib.c b/graphics/x11drv/dib.c index 789ba03425ef976719ae673f1f184b16ced07008..2ebc269d72653cf38011222f0e166ad8cebcf6aa 100644 --- a/graphics/x11drv/dib.c +++ b/graphics/x11drv/dib.c @@ -4023,8 +4023,16 @@ UINT X11DRV_DIB_SetDIBColorTable(BITMAPOBJ *bmp, DC *dc, UINT start, UINT count, X11DRV_DIBSECTION *dib = (X11DRV_DIBSECTION *) bmp->dib; if (dib && dib->colorMap) { - X11DRV_DIB_GenColorMap( dc, dib->colorMap, DIB_RGB_COLORS, dib->dibSection.dsBm.bmBitsPixel, + /* + * Changing color table might change the mapping between + * DIB colors and X11 colors and thus alter the visible state + * of the bitmap object. + */ + X11DRV_DIB_Lock(bmp, DIB_Status_AppMod, FALSE); + X11DRV_DIB_GenColorMap( dc, dib->colorMap, DIB_RGB_COLORS, + dib->dibSection.dsBm.bmBitsPixel, TRUE, colors, start, count + start ); + X11DRV_DIB_Unlock(bmp, TRUE); return count; } return 0;