diff --git a/widget/src/windows/nsWindow.cpp b/widget/src/windows/nsWindow.cpp index 18c6ddd0055..dde4eee8d6c 100644 --- a/widget/src/windows/nsWindow.cpp +++ b/widget/src/windows/nsWindow.cpp @@ -30,7 +30,6 @@ #include "nsGfxCIID.h" #include "resource.h" #include - #include "prtime.h" BOOL nsWindow::sIsRegistered = FALSE; @@ -1397,8 +1396,8 @@ void nsWindow::SetUpForPaint(HDC aHDC) //------------------------------------------------------------------------- PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *aRetValue) { - PRBool result = PR_FALSE; // call the default nsWindow proc - + PRBool result = PR_FALSE; // call the default nsWindow proc + nsPaletteInfo palInfo; *aRetValue = 0; @@ -1637,45 +1636,38 @@ PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT } break; } + + case WM_PALETTECHANGED: + if ((HWND)wParam == mWnd) { + // We caused the WM_PALETTECHANGED message so avoid realizing + // another foreground palette + result = PR_TRUE; + break; + } + // fall thru... + case WM_QUERYNEWPALETTE: - if (mPalette) { + mContext->GetPaletteInfo(palInfo); + if (palInfo.isPaletteDevice && palInfo.palette) { HDC hDC = ::GetDC(mWnd); - HPALETTE hOldPal = ::SelectPalette(hDC, mPalette, 0); + HPALETTE hOldPal = ::SelectPalette(hDC, (HPALETTE)palInfo.palette, FALSE); + // Realize the drawing palette int i = ::RealizePalette(hDC); - ::SelectPalette(hDC, hOldPal, 0); - ::ReleaseDC(mWnd, hDC); + // Did the realization change? + if (i > 0) { + // Yes, so repaint + ::InvalidateRect(mWnd, (LPRECT)NULL, TRUE); + } - if (i) { - ::InvalidateRect(mWnd, (LPRECT)(NULL), 1); - result = PR_TRUE; - } - else { - result = PR_FALSE; - } - } - else { - result = PR_FALSE; + ::SelectPalette(hDC, hOldPal, TRUE); + ::RealizePalette(hDC); + ::ReleaseDC(mWnd, hDC); + *aRetValue = (LRESULT)i; } + result = PR_TRUE; break; - case WM_PALETTECHANGED: - if (mPalette && (HWND)wParam != mWnd) { - HDC hDC = ::GetDC(mWnd); - HPALETTE hOldPal = ::SelectPalette(hDC, mPalette, 0); - - int i = ::RealizePalette(hDC); - - if (i) { - ::InvalidateRect(mWnd, (LPRECT)(NULL), 1); - } - - ::SelectPalette(hDC, hOldPal, 0); - ::ReleaseDC(mWnd, hDC); - } - result = PR_TRUE; - break; - } return result;