mirror of
https://github.com/reactos/wine.git
synced 2024-11-25 12:49:45 +00:00
user32: Use the generic handle functions for windows too.
This commit is contained in:
parent
da3c4c995a
commit
4bb95f4d0f
@ -533,17 +533,17 @@ static LRESULT NC_DoNCHitTest (WND *wndPtr, POINT pt )
|
||||
RECT rect, rcClient;
|
||||
POINT ptClient;
|
||||
|
||||
TRACE("hwnd=%p pt=%d,%d\n", wndPtr->hwndSelf, pt.x, pt.y );
|
||||
TRACE("hwnd=%p pt=%d,%d\n", wndPtr->obj.handle, pt.x, pt.y );
|
||||
|
||||
GetWindowRect(wndPtr->hwndSelf, &rect );
|
||||
GetWindowRect(wndPtr->obj.handle, &rect );
|
||||
if (!PtInRect( &rect, pt )) return HTNOWHERE;
|
||||
|
||||
if (wndPtr->dwStyle & WS_MINIMIZE) return HTCAPTION;
|
||||
|
||||
/* Check client area */
|
||||
ptClient = pt;
|
||||
ScreenToClient( wndPtr->hwndSelf, &ptClient );
|
||||
GetClientRect( wndPtr->hwndSelf, &rcClient );
|
||||
ScreenToClient( wndPtr->obj.handle, &ptClient );
|
||||
GetClientRect( wndPtr->obj.handle, &rcClient );
|
||||
if (PtInRect( &rcClient, ptClient )) return HTCLIENT;
|
||||
|
||||
/* Check borders */
|
||||
@ -606,7 +606,7 @@ static LRESULT NC_DoNCHitTest (WND *wndPtr, POINT pt )
|
||||
/* Check system menu */
|
||||
if ((wndPtr->dwStyle & WS_SYSMENU) && !(wndPtr->dwExStyle & WS_EX_TOOLWINDOW))
|
||||
{
|
||||
if (NC_IconForWindow(wndPtr->hwndSelf))
|
||||
if (NC_IconForWindow(wndPtr->obj.handle))
|
||||
rect.left += GetSystemMetrics(SM_CYCAPTION) - 1;
|
||||
}
|
||||
if (pt.x < rect.left) return HTSYSMENU;
|
||||
|
@ -250,12 +250,12 @@ static WND *create_window_handle( HWND parent, HWND owner, LPCWSTR name,
|
||||
index = USER_HANDLE_TO_INDEX(handle);
|
||||
assert( index < NB_USER_HANDLES );
|
||||
user_handles[index] = win;
|
||||
win->hwndSelf = handle;
|
||||
win->obj.handle = handle;
|
||||
win->obj.type = USER_WINDOW;
|
||||
win->parent = full_parent;
|
||||
win->owner = full_owner;
|
||||
win->class = class;
|
||||
win->winproc = get_class_winproc( class );
|
||||
win->dwMagic = WND_MAGIC;
|
||||
win->cbWndExtra = extra_bytes;
|
||||
if (WINPROC_IsUnicode( win->winproc, unicode )) win->flags |= WIN_ISUNICODE;
|
||||
return win;
|
||||
@ -267,31 +267,23 @@ static WND *create_window_handle( HWND parent, HWND owner, LPCWSTR name,
|
||||
*
|
||||
* Free a window handle.
|
||||
*/
|
||||
static WND *free_window_handle( HWND hwnd )
|
||||
static void free_window_handle( HWND hwnd )
|
||||
{
|
||||
WND *ptr;
|
||||
struct user_object *ptr;
|
||||
WORD index = USER_HANDLE_TO_INDEX(hwnd);
|
||||
|
||||
if (index >= NB_USER_HANDLES) return NULL;
|
||||
USER_Lock();
|
||||
if ((ptr = user_handles[index]))
|
||||
if ((ptr = get_user_handle_ptr( hwnd, USER_WINDOW )) && ptr != OBJ_OTHER_PROCESS)
|
||||
{
|
||||
SERVER_START_REQ( destroy_window )
|
||||
{
|
||||
req->handle = wine_server_user_handle( hwnd );
|
||||
if (!wine_server_call_err( req ))
|
||||
{
|
||||
user_handles[index] = NULL;
|
||||
ptr->dwMagic = 0;
|
||||
}
|
||||
else
|
||||
ptr = NULL;
|
||||
if (!wine_server_call_err( req )) user_handles[index] = NULL;
|
||||
else ptr = NULL;
|
||||
}
|
||||
SERVER_END_REQ;
|
||||
release_user_handle_ptr( ptr );
|
||||
HeapFree( GetProcessHeap(), 0, ptr );
|
||||
}
|
||||
USER_Unlock();
|
||||
HeapFree( GetProcessHeap(), 0, ptr );
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
@ -494,22 +486,12 @@ BOOL is_desktop_window( HWND hwnd )
|
||||
*/
|
||||
WND *WIN_GetPtr( HWND hwnd )
|
||||
{
|
||||
WND * ptr;
|
||||
WORD index = USER_HANDLE_TO_INDEX(hwnd);
|
||||
WND *ptr;
|
||||
|
||||
if (index >= NB_USER_HANDLES) return NULL;
|
||||
|
||||
USER_Lock();
|
||||
if ((ptr = user_handles[index]))
|
||||
if ((ptr = get_user_handle_ptr( hwnd, USER_WINDOW )) == WND_OTHER_PROCESS)
|
||||
{
|
||||
if (ptr->dwMagic == WND_MAGIC &&
|
||||
(hwnd == ptr->hwndSelf || !HIWORD(hwnd) || HIWORD(hwnd) == 0xffff))
|
||||
return ptr;
|
||||
ptr = NULL;
|
||||
if (is_desktop_window( hwnd )) ptr = WND_DESKTOP;
|
||||
}
|
||||
else if (is_desktop_window( hwnd )) ptr = WND_DESKTOP;
|
||||
else ptr = WND_OTHER_PROCESS;
|
||||
USER_Unlock();
|
||||
return ptr;
|
||||
}
|
||||
|
||||
@ -525,7 +507,7 @@ HWND WIN_IsCurrentProcess( HWND hwnd )
|
||||
HWND ret;
|
||||
|
||||
if (!(ptr = WIN_GetPtr( hwnd )) || ptr == WND_OTHER_PROCESS || ptr == WND_DESKTOP) return 0;
|
||||
ret = ptr->hwndSelf;
|
||||
ret = ptr->obj.handle;
|
||||
WIN_ReleasePtr( ptr );
|
||||
return ret;
|
||||
}
|
||||
@ -542,7 +524,7 @@ HWND WIN_IsCurrentThread( HWND hwnd )
|
||||
HWND ret = 0;
|
||||
|
||||
if (!(ptr = WIN_GetPtr( hwnd )) || ptr == WND_OTHER_PROCESS || ptr == WND_DESKTOP) return 0;
|
||||
if (ptr->tid == GetCurrentThreadId()) ret = ptr->hwndSelf;
|
||||
if (ptr->tid == GetCurrentThreadId()) ret = ptr->obj.handle;
|
||||
WIN_ReleasePtr( ptr );
|
||||
return ret;
|
||||
}
|
||||
@ -572,7 +554,7 @@ HWND WIN_Handle32( HWND16 hwnd16 )
|
||||
|
||||
if (ptr != WND_OTHER_PROCESS)
|
||||
{
|
||||
hwnd = ptr->hwndSelf;
|
||||
hwnd = ptr->obj.handle;
|
||||
WIN_ReleasePtr( ptr );
|
||||
}
|
||||
else /* may belong to another process */
|
||||
@ -832,7 +814,6 @@ static void destroy_thread_window( HWND hwnd )
|
||||
sys_menu = wndPtr->hSysMenu;
|
||||
free_dce( wndPtr->dce, hwnd );
|
||||
user_handles[index] = NULL;
|
||||
wndPtr->dwMagic = 0;
|
||||
}
|
||||
USER_Unlock();
|
||||
|
||||
@ -1219,7 +1200,7 @@ static HWND WIN_CreateWindowEx( CREATESTRUCTA *cs, LPCWSTR className, UINT flags
|
||||
|
||||
if (!(wndPtr = create_window_handle( parent, owner, className, cs->hInstance, unicode )))
|
||||
return 0;
|
||||
hwnd = wndPtr->hwndSelf;
|
||||
hwnd = wndPtr->obj.handle;
|
||||
|
||||
/* Fill the window structure */
|
||||
|
||||
@ -3305,7 +3286,7 @@ BOOL WINAPI FlashWindow( HWND hWnd, BOOL bInvert )
|
||||
|
||||
wndPtr = WIN_GetPtr(hWnd);
|
||||
if (!wndPtr || wndPtr == WND_OTHER_PROCESS || wndPtr == WND_DESKTOP) return FALSE;
|
||||
hWnd = wndPtr->hwndSelf; /* make it a full handle */
|
||||
hWnd = wndPtr->obj.handle; /* make it a full handle */
|
||||
|
||||
if (bInvert) wparam = !(wndPtr->flags & WIN_NCACTIVATED);
|
||||
else wparam = (hWnd == GetForegroundWindow());
|
||||
|
@ -28,20 +28,19 @@
|
||||
#include <winuser.h>
|
||||
#include <wine/windef16.h>
|
||||
|
||||
#define WND_MAGIC 0x444e4957 /* 'WIND' */
|
||||
#include "user_private.h"
|
||||
|
||||
struct tagCLASS;
|
||||
struct tagDIALOGINFO;
|
||||
|
||||
typedef struct tagWND
|
||||
{
|
||||
HWND hwndSelf; /* Handle of this window */
|
||||
struct user_object obj; /* object header */
|
||||
HWND parent; /* Window parent */
|
||||
HWND owner; /* Window owner */
|
||||
struct tagCLASS *class; /* Window class */
|
||||
struct dce *dce; /* DCE pointer */
|
||||
WNDPROC winproc; /* Window procedure */
|
||||
DWORD dwMagic; /* Magic number (must be WND_MAGIC) */
|
||||
DWORD tid; /* Owner thread id */
|
||||
HINSTANCE hInstance; /* Window hInstance (from CreateWindow) */
|
||||
RECT rectClient; /* Client area rel. to parent client area */
|
||||
|
@ -1790,7 +1790,7 @@ static BOOL fixup_flags( WINDOWPOS *winpos )
|
||||
SetLastError( ERROR_INVALID_WINDOW_HANDLE );
|
||||
return FALSE;
|
||||
}
|
||||
winpos->hwnd = wndPtr->hwndSelf; /* make it a full handle */
|
||||
winpos->hwnd = wndPtr->obj.handle; /* make it a full handle */
|
||||
|
||||
/* Finally make sure that all coordinates are valid */
|
||||
if (winpos->x < -32768) winpos->x = -32768;
|
||||
|
Loading…
Reference in New Issue
Block a user