user32: Disable cached DCs once they are released.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Huw Davies 2017-01-26 09:30:20 +00:00 committed by Alexandre Julliard
parent 0805b0d567
commit a60144ee74
2 changed files with 12 additions and 5 deletions

View File

@ -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 */

View File

@ -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 */