From a60144ee74e1db170f04edeb8cfd3a5a17d36d46 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Thu, 26 Jan 2017 09:30:20 +0000 Subject: [PATCH] user32: Disable cached DCs once they are released. Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/user32/painting.c | 13 ++++++++++--- dlls/user32/tests/dce.c | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/dlls/user32/painting.c b/dlls/user32/painting.c index 622dcad845f..7a6b0dc9b55 100644 --- a/dlls/user32/painting.c +++ b/dlls/user32/painting.c @@ -476,7 +476,11 @@ static INT release_dc( HWND hwnd, HDC hdc, BOOL end_paint ) { if (!(dce->flags & DCX_NORESETATTRS)) SetHookFlags( dce->hdc, DCHF_RESETDC ); if (end_paint || (dce->flags & DCX_CACHE)) delete_clip_rgn( dce ); - if (dce->flags & DCX_CACHE) dce->count = 0; + if (dce->flags & DCX_CACHE) + { + dce->count = 0; + SetHookFlags( dce->hdc, DCHF_DISABLEDC ); + } ret = TRUE; } USER_Unlock(); @@ -1007,8 +1011,11 @@ HDC WINAPI GetDCEx( HWND hwnd, HRGN hrgnClip, DWORD flags ) if (!found && count >= DCE_CACHE_SIZE) found = dceUnused; dce = found; - if (dce) dce->count = 1; - + if (dce) + { + dce->count = 1; + SetHookFlags( dce->hdc, DCHF_ENABLEDC ); + } USER_Unlock(); /* if there's no dce empty or unused, allocate a new one */ diff --git a/dlls/user32/tests/dce.c b/dlls/user32/tests/dce.c index b5f972212c3..382d10a43ab 100644 --- a/dlls/user32/tests/dce.c +++ b/dlls/user32/tests/dce.c @@ -112,9 +112,9 @@ static void test_dc_attributes(void) /* Released cache DCs are 'disabled' */ rop = SetROP2( old_hdc, R2_BLACK ); - todo_wine ok( rop == 0, "got %d\n", rop ); + ok( rop == 0, "got %d\n", rop ); rop = GetROP2( old_hdc ); - todo_wine ok( rop == 0, "got %d\n", rop ); + ok( rop == 0, "got %d\n", rop ); /* test own DC */