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;
|
RECT rect, rcClient;
|
||||||
POINT ptClient;
|
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 (!PtInRect( &rect, pt )) return HTNOWHERE;
|
||||||
|
|
||||||
if (wndPtr->dwStyle & WS_MINIMIZE) return HTCAPTION;
|
if (wndPtr->dwStyle & WS_MINIMIZE) return HTCAPTION;
|
||||||
|
|
||||||
/* Check client area */
|
/* Check client area */
|
||||||
ptClient = pt;
|
ptClient = pt;
|
||||||
ScreenToClient( wndPtr->hwndSelf, &ptClient );
|
ScreenToClient( wndPtr->obj.handle, &ptClient );
|
||||||
GetClientRect( wndPtr->hwndSelf, &rcClient );
|
GetClientRect( wndPtr->obj.handle, &rcClient );
|
||||||
if (PtInRect( &rcClient, ptClient )) return HTCLIENT;
|
if (PtInRect( &rcClient, ptClient )) return HTCLIENT;
|
||||||
|
|
||||||
/* Check borders */
|
/* Check borders */
|
||||||
@ -606,7 +606,7 @@ static LRESULT NC_DoNCHitTest (WND *wndPtr, POINT pt )
|
|||||||
/* Check system menu */
|
/* Check system menu */
|
||||||
if ((wndPtr->dwStyle & WS_SYSMENU) && !(wndPtr->dwExStyle & WS_EX_TOOLWINDOW))
|
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;
|
rect.left += GetSystemMetrics(SM_CYCAPTION) - 1;
|
||||||
}
|
}
|
||||||
if (pt.x < rect.left) return HTSYSMENU;
|
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);
|
index = USER_HANDLE_TO_INDEX(handle);
|
||||||
assert( index < NB_USER_HANDLES );
|
assert( index < NB_USER_HANDLES );
|
||||||
user_handles[index] = win;
|
user_handles[index] = win;
|
||||||
win->hwndSelf = handle;
|
win->obj.handle = handle;
|
||||||
|
win->obj.type = USER_WINDOW;
|
||||||
win->parent = full_parent;
|
win->parent = full_parent;
|
||||||
win->owner = full_owner;
|
win->owner = full_owner;
|
||||||
win->class = class;
|
win->class = class;
|
||||||
win->winproc = get_class_winproc( class );
|
win->winproc = get_class_winproc( class );
|
||||||
win->dwMagic = WND_MAGIC;
|
|
||||||
win->cbWndExtra = extra_bytes;
|
win->cbWndExtra = extra_bytes;
|
||||||
if (WINPROC_IsUnicode( win->winproc, unicode )) win->flags |= WIN_ISUNICODE;
|
if (WINPROC_IsUnicode( win->winproc, unicode )) win->flags |= WIN_ISUNICODE;
|
||||||
return win;
|
return win;
|
||||||
@ -267,31 +267,23 @@ static WND *create_window_handle( HWND parent, HWND owner, LPCWSTR name,
|
|||||||
*
|
*
|
||||||
* Free a window handle.
|
* 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);
|
WORD index = USER_HANDLE_TO_INDEX(hwnd);
|
||||||
|
|
||||||
if (index >= NB_USER_HANDLES) return NULL;
|
if ((ptr = get_user_handle_ptr( hwnd, USER_WINDOW )) && ptr != OBJ_OTHER_PROCESS)
|
||||||
USER_Lock();
|
|
||||||
if ((ptr = user_handles[index]))
|
|
||||||
{
|
{
|
||||||
SERVER_START_REQ( destroy_window )
|
SERVER_START_REQ( destroy_window )
|
||||||
{
|
{
|
||||||
req->handle = wine_server_user_handle( hwnd );
|
req->handle = wine_server_user_handle( hwnd );
|
||||||
if (!wine_server_call_err( req ))
|
if (!wine_server_call_err( req )) user_handles[index] = NULL;
|
||||||
{
|
else ptr = NULL;
|
||||||
user_handles[index] = NULL;
|
|
||||||
ptr->dwMagic = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ptr = NULL;
|
|
||||||
}
|
}
|
||||||
SERVER_END_REQ;
|
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 *WIN_GetPtr( HWND hwnd )
|
||||||
{
|
{
|
||||||
WND * ptr;
|
WND *ptr;
|
||||||
WORD index = USER_HANDLE_TO_INDEX(hwnd);
|
|
||||||
|
|
||||||
if (index >= NB_USER_HANDLES) return NULL;
|
if ((ptr = get_user_handle_ptr( hwnd, USER_WINDOW )) == WND_OTHER_PROCESS)
|
||||||
|
|
||||||
USER_Lock();
|
|
||||||
if ((ptr = user_handles[index]))
|
|
||||||
{
|
{
|
||||||
if (ptr->dwMagic == WND_MAGIC &&
|
if (is_desktop_window( hwnd )) ptr = WND_DESKTOP;
|
||||||
(hwnd == ptr->hwndSelf || !HIWORD(hwnd) || HIWORD(hwnd) == 0xffff))
|
|
||||||
return ptr;
|
|
||||||
ptr = NULL;
|
|
||||||
}
|
}
|
||||||
else if (is_desktop_window( hwnd )) ptr = WND_DESKTOP;
|
|
||||||
else ptr = WND_OTHER_PROCESS;
|
|
||||||
USER_Unlock();
|
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -525,7 +507,7 @@ HWND WIN_IsCurrentProcess( HWND hwnd )
|
|||||||
HWND ret;
|
HWND ret;
|
||||||
|
|
||||||
if (!(ptr = WIN_GetPtr( hwnd )) || ptr == WND_OTHER_PROCESS || ptr == WND_DESKTOP) return 0;
|
if (!(ptr = WIN_GetPtr( hwnd )) || ptr == WND_OTHER_PROCESS || ptr == WND_DESKTOP) return 0;
|
||||||
ret = ptr->hwndSelf;
|
ret = ptr->obj.handle;
|
||||||
WIN_ReleasePtr( ptr );
|
WIN_ReleasePtr( ptr );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -542,7 +524,7 @@ HWND WIN_IsCurrentThread( HWND hwnd )
|
|||||||
HWND ret = 0;
|
HWND ret = 0;
|
||||||
|
|
||||||
if (!(ptr = WIN_GetPtr( hwnd )) || ptr == WND_OTHER_PROCESS || ptr == WND_DESKTOP) return 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 );
|
WIN_ReleasePtr( ptr );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -572,7 +554,7 @@ HWND WIN_Handle32( HWND16 hwnd16 )
|
|||||||
|
|
||||||
if (ptr != WND_OTHER_PROCESS)
|
if (ptr != WND_OTHER_PROCESS)
|
||||||
{
|
{
|
||||||
hwnd = ptr->hwndSelf;
|
hwnd = ptr->obj.handle;
|
||||||
WIN_ReleasePtr( ptr );
|
WIN_ReleasePtr( ptr );
|
||||||
}
|
}
|
||||||
else /* may belong to another process */
|
else /* may belong to another process */
|
||||||
@ -832,7 +814,6 @@ static void destroy_thread_window( HWND hwnd )
|
|||||||
sys_menu = wndPtr->hSysMenu;
|
sys_menu = wndPtr->hSysMenu;
|
||||||
free_dce( wndPtr->dce, hwnd );
|
free_dce( wndPtr->dce, hwnd );
|
||||||
user_handles[index] = NULL;
|
user_handles[index] = NULL;
|
||||||
wndPtr->dwMagic = 0;
|
|
||||||
}
|
}
|
||||||
USER_Unlock();
|
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 )))
|
if (!(wndPtr = create_window_handle( parent, owner, className, cs->hInstance, unicode )))
|
||||||
return 0;
|
return 0;
|
||||||
hwnd = wndPtr->hwndSelf;
|
hwnd = wndPtr->obj.handle;
|
||||||
|
|
||||||
/* Fill the window structure */
|
/* Fill the window structure */
|
||||||
|
|
||||||
@ -3305,7 +3286,7 @@ BOOL WINAPI FlashWindow( HWND hWnd, BOOL bInvert )
|
|||||||
|
|
||||||
wndPtr = WIN_GetPtr(hWnd);
|
wndPtr = WIN_GetPtr(hWnd);
|
||||||
if (!wndPtr || wndPtr == WND_OTHER_PROCESS || wndPtr == WND_DESKTOP) return FALSE;
|
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);
|
if (bInvert) wparam = !(wndPtr->flags & WIN_NCACTIVATED);
|
||||||
else wparam = (hWnd == GetForegroundWindow());
|
else wparam = (hWnd == GetForegroundWindow());
|
||||||
|
@ -28,20 +28,19 @@
|
|||||||
#include <winuser.h>
|
#include <winuser.h>
|
||||||
#include <wine/windef16.h>
|
#include <wine/windef16.h>
|
||||||
|
|
||||||
#define WND_MAGIC 0x444e4957 /* 'WIND' */
|
#include "user_private.h"
|
||||||
|
|
||||||
struct tagCLASS;
|
struct tagCLASS;
|
||||||
struct tagDIALOGINFO;
|
struct tagDIALOGINFO;
|
||||||
|
|
||||||
typedef struct tagWND
|
typedef struct tagWND
|
||||||
{
|
{
|
||||||
HWND hwndSelf; /* Handle of this window */
|
struct user_object obj; /* object header */
|
||||||
HWND parent; /* Window parent */
|
HWND parent; /* Window parent */
|
||||||
HWND owner; /* Window owner */
|
HWND owner; /* Window owner */
|
||||||
struct tagCLASS *class; /* Window class */
|
struct tagCLASS *class; /* Window class */
|
||||||
struct dce *dce; /* DCE pointer */
|
struct dce *dce; /* DCE pointer */
|
||||||
WNDPROC winproc; /* Window procedure */
|
WNDPROC winproc; /* Window procedure */
|
||||||
DWORD dwMagic; /* Magic number (must be WND_MAGIC) */
|
|
||||||
DWORD tid; /* Owner thread id */
|
DWORD tid; /* Owner thread id */
|
||||||
HINSTANCE hInstance; /* Window hInstance (from CreateWindow) */
|
HINSTANCE hInstance; /* Window hInstance (from CreateWindow) */
|
||||||
RECT rectClient; /* Client area rel. to parent client area */
|
RECT rectClient; /* Client area rel. to parent client area */
|
||||||
|
@ -1790,7 +1790,7 @@ static BOOL fixup_flags( WINDOWPOS *winpos )
|
|||||||
SetLastError( ERROR_INVALID_WINDOW_HANDLE );
|
SetLastError( ERROR_INVALID_WINDOW_HANDLE );
|
||||||
return FALSE;
|
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 */
|
/* Finally make sure that all coordinates are valid */
|
||||||
if (winpos->x < -32768) winpos->x = -32768;
|
if (winpos->x < -32768) winpos->x = -32768;
|
||||||
|
Loading…
Reference in New Issue
Block a user