Module: wine Branch: master Commit: 3bf279e7dabf80e2116bfd0956b390824d47394d URL: https://source.winehq.org/git/wine.git/?a=commit;h=3bf279e7dabf80e2116bfd095...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Aug 24 12:28:44 2018 +0200
user32: Switch to the window DPI awareness in SetParent().
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/user32/win.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/win.c b/dlls/user32/win.c index d9ef151..e3edbf6 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -3121,6 +3121,7 @@ HWND WINAPI SetParent( HWND hwnd, HWND parent ) BOOL was_visible; WND *wndPtr; BOOL ret; + DPI_AWARENESS_CONTEXT context; RECT window_rect, old_screen_rect, new_screen_rect;
TRACE("(%p %p)\n", hwnd, parent); @@ -3164,8 +3165,11 @@ HWND WINAPI SetParent( HWND hwnd, HWND parent ) wndPtr = WIN_GetPtr( hwnd ); if (!wndPtr || wndPtr == WND_OTHER_PROCESS || wndPtr == WND_DESKTOP) return 0;
+ context = SetThreadDpiAwarenessContext( GetWindowDpiAwarenessContext( hwnd )); WIN_GetRectangles( hwnd, COORDS_PARENT, &window_rect, NULL ); + SetThreadDpiAwarenessContext( DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ); WIN_GetRectangles( hwnd, COORDS_SCREEN, &old_screen_rect, NULL ); + SetThreadDpiAwarenessContext( context );
SERVER_START_REQ( set_parent ) { @@ -3184,6 +3188,10 @@ HWND WINAPI SetParent( HWND hwnd, HWND parent ) WIN_ReleasePtr( wndPtr ); if (!ret) return 0;
+ context = SetThreadDpiAwarenessContext( DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ); + WIN_GetRectangles( hwnd, COORDS_SCREEN, &new_screen_rect, NULL ); + SetThreadDpiAwarenessContext( GetWindowDpiAwarenessContext( hwnd )); + USER_Driver->pSetParent( full_handle, parent, old_parent );
winpos.hwnd = hwnd; @@ -3194,12 +3202,12 @@ HWND WINAPI SetParent( HWND hwnd, HWND parent ) winpos.cy = 0; winpos.flags = SWP_NOSIZE;
- WIN_GetRectangles( hwnd, COORDS_SCREEN, &new_screen_rect, NULL ); USER_SetWindowPos( &winpos, new_screen_rect.left - old_screen_rect.left, new_screen_rect.top - old_screen_rect.top );
if (was_visible) ShowWindow( hwnd, SW_SHOW );
+ SetThreadDpiAwarenessContext( context ); return old_parent; }