user32: Fix handling of NULL paint struct in BeginPaint.
This commit is contained in:
parent
c1157b79fd
commit
ab2cac4815
|
@ -893,20 +893,28 @@ static HWND fix_caret(HWND hWnd, const RECT *scroll_rect, INT dx, INT dy,
|
||||||
HDC WINAPI BeginPaint( HWND hwnd, PAINTSTRUCT *lps )
|
HDC WINAPI BeginPaint( HWND hwnd, PAINTSTRUCT *lps )
|
||||||
{
|
{
|
||||||
HRGN hrgn;
|
HRGN hrgn;
|
||||||
|
HDC hdc;
|
||||||
|
BOOL erase;
|
||||||
|
RECT rect;
|
||||||
UINT flags = UPDATE_NONCLIENT | UPDATE_ERASE | UPDATE_PAINT | UPDATE_INTERNALPAINT | UPDATE_NOCHILDREN;
|
UINT flags = UPDATE_NONCLIENT | UPDATE_ERASE | UPDATE_PAINT | UPDATE_INTERNALPAINT | UPDATE_NOCHILDREN;
|
||||||
|
|
||||||
if (!lps) return 0;
|
|
||||||
|
|
||||||
HideCaret( hwnd );
|
HideCaret( hwnd );
|
||||||
|
|
||||||
if (!(hrgn = send_ncpaint( hwnd, NULL, &flags ))) return 0;
|
if (!(hrgn = send_ncpaint( hwnd, NULL, &flags ))) return 0;
|
||||||
|
|
||||||
lps->fErase = send_erase( hwnd, flags, hrgn, &lps->rcPaint, &lps->hdc );
|
erase = send_erase( hwnd, flags, hrgn, &rect, &hdc );
|
||||||
|
|
||||||
TRACE("hdc = %p box = (%s), fErase = %d\n",
|
TRACE("hdc = %p box = (%s), fErase = %d\n", hdc, wine_dbgstr_rect(&rect), erase);
|
||||||
lps->hdc, wine_dbgstr_rect(&lps->rcPaint), lps->fErase);
|
|
||||||
|
|
||||||
return lps->hdc;
|
if (!lps)
|
||||||
|
{
|
||||||
|
release_dc( hwnd, hdc, TRUE );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
lps->fErase = erase;
|
||||||
|
lps->rcPaint = rect;
|
||||||
|
lps->hdc = hdc;
|
||||||
|
return hdc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -915,10 +923,10 @@ HDC WINAPI BeginPaint( HWND hwnd, PAINTSTRUCT *lps )
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI EndPaint( HWND hwnd, const PAINTSTRUCT *lps )
|
BOOL WINAPI EndPaint( HWND hwnd, const PAINTSTRUCT *lps )
|
||||||
{
|
{
|
||||||
if (!lps) return FALSE;
|
|
||||||
release_dc( hwnd, lps->hdc, TRUE );
|
|
||||||
ShowCaret( hwnd );
|
ShowCaret( hwnd );
|
||||||
flush_window_surfaces( FALSE );
|
flush_window_surfaces( FALSE );
|
||||||
|
if (!lps) return FALSE;
|
||||||
|
release_dc( hwnd, lps->hdc, TRUE );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9093,6 +9093,26 @@ static void test_DispatchMessage(void)
|
||||||
if (++count > 10) break;
|
if (++count > 10) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flush_sequence();
|
||||||
|
RedrawWindow( hwnd, &rect, 0, RDW_INVALIDATE|RDW_ERASE|RDW_FRAME );
|
||||||
|
count = 0;
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
|
||||||
|
{
|
||||||
|
if (msg.message != WM_PAINT) DispatchMessage( &msg );
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HDC hdc;
|
||||||
|
|
||||||
|
flush_sequence();
|
||||||
|
hdc = BeginPaint( hwnd, NULL );
|
||||||
|
ok( !hdc, "got valid hdc %p from BeginPaint\n", hdc );
|
||||||
|
ok( !EndPaint( hwnd, NULL ), "EndPaint succeeded\n" );
|
||||||
|
ok_sequence( WmDispatchPaint, "WmDispatchPaint", FALSE );
|
||||||
|
ok( !count, "Got multiple WM_PAINTs\n" );
|
||||||
|
if (++count > 10) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
DestroyWindow(hwnd);
|
DestroyWindow(hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue