[PATCH] user.exe16: Releasing DC does not disable it.
Jeff Smith
whydoubt at gmail.com
Sun Jan 12 14:54:10 CST 2020
ReleaseDC in user32 marks cache DCs as disabled. For user.exe (the
16-bit equivalent), this causes DCs to become inaccessible after
release. On Windows, they are still accessible after release.
Work around this in user.exe by re-enabling the DC immediately after
calling the user32 ReleaseDC.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=44408
Signed-off-by: Jeff Smith <whydoubt at gmail.com>
---
Tested with the program referenced in the bug report. I also wrote
and ran some tests on WinXP to compare how user32.dll and user.exe
handle ReleaseDC.
dlls/user.exe16/window.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/dlls/user.exe16/window.c b/dlls/user.exe16/window.c
index 10f1389f0a..bf86719325 100644
--- a/dlls/user.exe16/window.c
+++ b/dlls/user.exe16/window.c
@@ -23,6 +23,7 @@
#include "user_private.h"
#include "wine/list.h"
#include "wine/server.h"
+#include "wine/gdi_driver.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(win);
@@ -675,7 +676,9 @@ HDC16 WINAPI GetWindowDC16( HWND16 hwnd )
*/
INT16 WINAPI ReleaseDC16( HWND16 hwnd, HDC16 hdc )
{
- return (INT16)ReleaseDC( WIN_Handle32(hwnd), HDC_32(hdc) );
+ INT16 ret = (INT16)ReleaseDC( WIN_Handle32(hwnd), HDC_32(hdc) );
+ SetHookFlags( HDC_32(hdc), DCHF_ENABLEDC );
+ return ret;
}
--
2.23.0
More information about the wine-devel
mailing list