Desktop window is repainted on WM_ERASEBKGND, it must never get a

WM_PAINT.
This commit is contained in:
Alexandre Julliard 2005-01-11 15:15:11 +00:00
parent e2a7181069
commit 56206376b8
3 changed files with 13 additions and 6 deletions

View File

@ -265,7 +265,7 @@ static BOOL send_erase( HWND hwnd, UINT flags, HRGN client_rgn,
} }
if (!hdc_ret) if (!hdc_ret)
{ {
if (need_erase) /* FIXME: mark it as needing erase again */ if (need_erase && hwnd != GetDesktopWindow()) /* FIXME: mark it as needing erase again */
RedrawWindow( hwnd, NULL, client_rgn, RDW_INVALIDATE | RDW_ERASE | RDW_NOCHILDREN ); RedrawWindow( hwnd, NULL, client_rgn, RDW_INVALIDATE | RDW_ERASE | RDW_NOCHILDREN );
ReleaseDC( hwnd, hdc ); ReleaseDC( hwnd, hdc );
} }
@ -282,7 +282,7 @@ static BOOL send_erase( HWND hwnd, UINT flags, HRGN client_rgn,
* *
* Implementation of RDW_ERASENOW behavior. * Implementation of RDW_ERASENOW behavior.
*/ */
void erase_now( HWND hwnd, UINT rdw_flags ) static void erase_now( HWND hwnd, UINT rdw_flags )
{ {
HWND child; HWND child;
HRGN hrgn; HRGN hrgn;
@ -324,10 +324,13 @@ void erase_now( HWND hwnd, UINT rdw_flags )
* HIWORD(lParam) = hwndSkip (not used; always NULL) * HIWORD(lParam) = hwndSkip (not used; always NULL)
* *
*/ */
void update_now( HWND hwnd, UINT rdw_flags ) static void update_now( HWND hwnd, UINT rdw_flags )
{ {
HWND child; HWND child;
/* desktop window never gets WM_PAINT, only WM_ERASEBKGND */
if (hwnd == GetDesktopWindow()) erase_now( hwnd, rdw_flags | RDW_NOCHILDREN );
/* loop while we find a child to repaint */ /* loop while we find a child to repaint */
for (;;) for (;;)
{ {

View File

@ -44,8 +44,7 @@ static LRESULT WINAPI desktop_winproc( HWND hwnd, UINT message, WPARAM wParam, L
case WM_ERASEBKGND: case WM_ERASEBKGND:
PaintDesktop( (HDC)wParam ); PaintDesktop( (HDC)wParam );
ValidateRect( hwnd, NULL ); return TRUE;
break;
case WM_SYSCOMMAND: case WM_SYSCOMMAND:
if ((wParam & 0xfff0) == SC_CLOSE) ExitWindows( 0, 0 ); if ((wParam & 0xfff0) == SC_CLOSE) ExitWindows( 0, 0 );

View File

@ -1660,7 +1660,12 @@ DECL_HANDLER(get_update_region)
else else
{ {
if (reply->flags & UPDATE_NONCLIENT) validate_non_client( win ); if (reply->flags & UPDATE_NONCLIENT) validate_non_client( win );
if (reply->flags & UPDATE_ERASE) win->paint_flags &= ~PAINT_ERASE; if (reply->flags & UPDATE_ERASE)
{
win->paint_flags &= ~PAINT_ERASE;
/* desktop window only gets erased, not repainted */
if (win == top_window) validate_whole_window( win );
}
} }
} }