From: Andrew Wesie Subject: [2/3] user32: Implement GetWindowDisplayAffinity. Message-Id: <1498258914-10786-2-git-send-email-awesie@gmail.com> Date: Fri, 23 Jun 2017 16:01:53 -0700 In-Reply-To: <1498258914-10786-1-git-send-email-awesie@gmail.com> References: <1498258914-10786-1-git-send-email-awesie@gmail.com> Signed-off-by: Andrew Wesie --- dlls/user32/user32.spec | 2 ++ dlls/user32/win.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ include/winuser.h | 6 ++++++ 3 files changed, 56 insertions(+) diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec index 4514877..65e6296 100644 --- a/dlls/user32/user32.spec +++ b/dlls/user32/user32.spec @@ -385,6 +385,7 @@ @ stdcall GetWindow(long long) @ stdcall GetWindowContextHelpId(long) @ stdcall GetWindowDC(long) +@ stdcall GetWindowDisplayAffinity(long ptr) @ stdcall GetWindowInfo(long ptr) @ stdcall GetWindowLongA(long long) @ stdcall -arch=win64 GetWindowLongPtrA(long long) @@ -688,6 +689,7 @@ @ stdcall SetUserObjectSecurity(long ptr ptr) @ stdcall SetWinEventHook(long long long ptr long long long) @ stdcall SetWindowContextHelpId(long long) +@ stdcall SetWindowDisplayAffinity(long long) @ stub SetWindowFullScreenState @ stdcall SetWindowLongA(long long long) @ stdcall -arch=win64 SetWindowLongPtrA(long long long) diff --git a/dlls/user32/win.c b/dlls/user32/win.c index cbf2237..f530158 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -3986,3 +3986,51 @@ BOOL WINAPI RegisterTouchWindow(HWND hwnd, ULONG flags) SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; } + +/***************************************************************************** + * GetWindowDisplayAffinity (USER32.@) + */ +BOOL WINAPI GetWindowDisplayAffinity(HWND hwnd, DWORD *affinity) +{ + BOOL ret; + + SERVER_START_REQ( set_window_info ) + { + req->handle = wine_server_user_handle( hwnd ); + req->flags = 0; /* don't set anything, just retrieve */ + req->extra_offset = -1; + if ((ret = !wine_server_call_err( req ))) + { + *affinity = reply->old_affinity; + } + } + SERVER_END_REQ; + + return ret; +} + +/***************************************************************************** + * SetWindowDisplayAffinity (USER32.@) + */ +BOOL WINAPI SetWindowDisplayAffinity(HWND hwnd, DWORD affinity) +{ + BOOL ret; + + if (affinity & ~WDA_MONITOR) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + SERVER_START_REQ( set_window_info ) + { + req->handle = wine_server_user_handle( hwnd ); + req->flags = SET_WIN_AFFINITY; + req->affinity = affinity; + req->extra_offset = -1; + ret = !wine_server_call_err( req ); + } + SERVER_END_REQ; + + return ret; +} diff --git a/include/winuser.h b/include/winuser.h index 0d6c5d6..d5c8af5 100644 --- a/include/winuser.h +++ b/include/winuser.h @@ -3304,6 +3304,10 @@ typedef enum ORIENTATION_PREFERENCE { ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED = 0x8 } ORIENTATION_PREFERENCE; +/* GetWindowDisplayAffinity flags */ +#define WDA_NONE 0x00000000 +#define WDA_MONITOR 0x00000001 + #if defined(_WINGDI_) && !defined(NOGDI) WINUSERAPI LONG WINAPI ChangeDisplaySettingsA(LPDEVMODEA,DWORD); WINUSERAPI LONG WINAPI ChangeDisplaySettingsW(LPDEVMODEW,DWORD); @@ -3728,6 +3732,7 @@ WINUSERAPI BOOL WINAPI GetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION WINUSERAPI HWND WINAPI GetWindow(HWND,UINT); WINUSERAPI DWORD WINAPI GetWindowContextHelpId(HWND); WINUSERAPI HDC WINAPI GetWindowDC(HWND); +WINUSERAPI BOOL WINAPI GetWindowDisplayAffinity(HWND,DWORD*); WINUSERAPI BOOL WINAPI GetWindowInfo(HWND, PWINDOWINFO); WINUSERAPI LONG WINAPI GetWindowLongA(HWND,INT); WINUSERAPI LONG WINAPI GetWindowLongW(HWND,INT); @@ -4022,6 +4027,7 @@ WINUSERAPI BOOL WINAPI SetUserObjectInformationW(HANDLE,INT,LPVOID,DWORD) #define SetUserObjectInformation WINELIB_NAME_AW(SetUserObjectInformation) WINUSERAPI BOOL WINAPI SetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR); WINUSERAPI BOOL WINAPI SetWindowContextHelpId(HWND,DWORD); +WINUSERAPI BOOL WINAPI SetWindowDisplayAffinity(HWND,DWORD); WINUSERAPI LONG WINAPI SetWindowLongA(HWND,INT,LONG); WINUSERAPI LONG WINAPI SetWindowLongW(HWND,INT,LONG); #define SetWindowLong WINELIB_NAME_AW(SetWindowLong) -- 2.7.4