Module: wine Branch: master Commit: a60144ee74e1db170f04edeb8cfd3a5a17d36d46 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a60144ee74e1db170f04edeb8c...
Author: Huw Davies huw@codeweavers.com Date: Thu Jan 26 09:30:20 2017 +0000
user32: Disable cached DCs once they are released.
Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 622dcad..7a6b0dc 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 b5f9722..382d10a 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 */