Made all 16<->32 HWND conversions use explicit functions instead of
implicit type casts.
Moved a lot of 16-bit functions to the new wnd16.c file.
Changed DIALOGINFO structure handling to support 32-bit handles.
diff --git a/windows/win.c b/windows/win.c
index 5684fb9..9aa8dd3 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -34,8 +34,6 @@
/* Desktop window */
static WND *pWndDesktop = NULL;
-static HWND hwndSysModal = 0;
-
static WORD wDragWidth = 4;
static WORD wDragHeight= 3;
@@ -80,7 +78,7 @@
static WND *create_window_handle( BOOL desktop, INT size )
{
BOOL res;
- unsigned int handle = 0;
+ user_handle_t handle = 0;
WND *win = HeapAlloc( GetProcessHeap(), 0, size );
if (!win) return NULL;
@@ -111,7 +109,7 @@
return NULL;
}
user_handles[LOWORD(handle)] = win;
- win->hwndSelf = (HWND)handle;
+ win->hwndSelf = handle;
win->dwMagic = WND_MAGIC;
win->irefCount = 1;
return win;
@@ -177,9 +175,11 @@
HWND WIN_Handle32( HWND16 hwnd16 )
{
WND *ptr;
- HWND hwnd = (HWND)hwnd16;
+ HWND hwnd = (HWND)(ULONG_PTR)hwnd16;
- if (!hwnd || hwnd == HWND_BROADCAST) return hwnd;
+ if (hwnd16 <= 1 || hwnd16 == 0xffff) return hwnd;
+ /* do sign extension for -2 and -3 */
+ if (hwnd16 >= (HWND16)-3) return (HWND)(LONG_PTR)(INT16)hwnd16;
if ((ptr = get_wnd_ptr( hwnd )))
{
@@ -190,7 +190,7 @@
{
SERVER_START_REQ( get_window_info )
{
- req->handle = (user_handle_t)hwnd16;
+ req->handle = hwnd;
if (!SERVER_CALL_ERR()) hwnd = req->full_handle;
}
SERVER_END_REQ;
@@ -804,8 +804,10 @@
cbtc.lpcs = cs;
cbtc.hwndInsertAfter = hwndLinkAfter;
- ret = (type == WIN_PROC_32W) ? HOOK_CallHooksW(WH_CBT, HCBT_CREATEWND, hwnd, (LPARAM)&cbtc)
- : HOOK_CallHooksA(WH_CBT, HCBT_CREATEWND, hwnd, (LPARAM)&cbtc);
+ ret = (type == WIN_PROC_32W) ? HOOK_CallHooksW(WH_CBT, HCBT_CREATEWND,
+ (WPARAM)hwnd, (LPARAM)&cbtc)
+ : HOOK_CallHooksA(WH_CBT, HCBT_CREATEWND,
+ (WPARAM)hwnd, (LPARAM)&cbtc);
if (ret)
{
TRACE("CBT-hook returned 0\n");
@@ -915,7 +917,7 @@
/* Call WH_SHELL hook */
if (!(wndPtr->dwStyle & WS_CHILD) && !wndPtr->owner)
- HOOK_CallHooksA( WH_SHELL, HSHELL_WINDOWCREATED, hwnd, 0 );
+ HOOK_CallHooksA( WH_SHELL, HSHELL_WINDOWCREATED, (WPARAM)hwnd, 0 );
TRACE("created window %04x\n", hwnd);
end:
@@ -983,13 +985,13 @@
cs.lpCreateParams = data;
cs.hInstance = (HINSTANCE)instance;
cs.hMenu = (HMENU)menu;
- cs.hwndParent = (HWND)parent;
+ cs.hwndParent = WIN_Handle32( parent );
cs.style = style;
cs.lpszName = windowName;
cs.lpszClass = className;
cs.dwExStyle = exStyle;
- return WIN_CreateWindowEx( &cs, classAtom, WIN_PROC_16 );
+ return WIN_Handle16( WIN_CreateWindowEx( &cs, classAtom, WIN_PROC_16 ));
}
@@ -1153,15 +1155,6 @@
/***********************************************************************
- * DestroyWindow (USER.53)
- */
-BOOL16 WINAPI DestroyWindow16( HWND16 hwnd )
-{
- return DestroyWindow(hwnd);
-}
-
-
-/***********************************************************************
* DestroyWindow (USER32.@)
*/
BOOL WINAPI DestroyWindow( HWND hwnd )
@@ -1190,12 +1183,12 @@
/* Call hooks */
- if( HOOK_CallHooksA( WH_CBT, HCBT_DESTROYWND, hwnd, 0L) ) return FALSE;
+ if( HOOK_CallHooksA( WH_CBT, HCBT_DESTROYWND, (WPARAM)hwnd, 0L) ) return FALSE;
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE;
if (!(wndPtr->dwStyle & WS_CHILD) && !wndPtr->owner)
{
- HOOK_CallHooksA( WH_SHELL, HSHELL_WINDOWDESTROYED, hwnd, 0L );
+ HOOK_CallHooksA( WH_SHELL, HSHELL_WINDOWDESTROYED, (WPARAM)hwnd, 0L );
/* FIXME: clean up palette - see "Internals" p.352 */
}
@@ -1293,15 +1286,6 @@
/***********************************************************************
- * CloseWindow (USER.43)
- */
-BOOL16 WINAPI CloseWindow16( HWND16 hwnd )
-{
- return CloseWindow( hwnd );
-}
-
-
-/***********************************************************************
* CloseWindow (USER32.@)
*/
BOOL WINAPI CloseWindow( HWND hwnd )
@@ -1324,15 +1308,6 @@
/***********************************************************************
- * OpenIcon (USER.44)
- */
-BOOL16 WINAPI OpenIcon16( HWND16 hwnd )
-{
- return OpenIcon( hwnd );
-}
-
-
-/***********************************************************************
* OpenIcon (USER32.@)
*/
BOOL WINAPI OpenIcon( HWND hwnd )
@@ -1399,24 +1374,6 @@
/***********************************************************************
- * FindWindow (USER.50)
- */
-HWND16 WINAPI FindWindow16( LPCSTR className, LPCSTR title )
-{
- return FindWindowA( className, title );
-}
-
-
-/***********************************************************************
- * FindWindowEx (USER.427)
- */
-HWND16 WINAPI FindWindowEx16( HWND16 parent, HWND16 child, LPCSTR className, LPCSTR title )
-{
- return FindWindowExA( parent, child, className, title );
-}
-
-
-/***********************************************************************
* FindWindowA (USER32.@)
*/
HWND WINAPI FindWindowA( LPCSTR className, LPCSTR title )
@@ -1487,15 +1444,6 @@
/**********************************************************************
- * GetDesktopWindow (USER.286)
- */
-HWND16 WINAPI GetDesktopWindow16(void)
-{
- return (HWND16)pWndDesktop->hwndSelf;
-}
-
-
-/**********************************************************************
* GetDesktopWindow (USER32.@)
*/
HWND WINAPI GetDesktopWindow(void)
@@ -1507,27 +1455,6 @@
}
-/**********************************************************************
- * GetDesktopHwnd (USER.278)
- *
- * Exactly the same thing as GetDesktopWindow(), but not documented.
- * Don't ask me why...
- */
-HWND16 WINAPI GetDesktopHwnd16(void)
-{
- return (HWND16)pWndDesktop->hwndSelf;
-}
-
-
-/*******************************************************************
- * EnableWindow (USER.34)
- */
-BOOL16 WINAPI EnableWindow16( HWND16 hwnd, BOOL16 enable )
-{
- return EnableWindow( hwnd, enable );
-}
-
-
/*******************************************************************
* EnableWindow (USER32.@)
*/
@@ -1571,15 +1498,6 @@
/***********************************************************************
- * IsWindowEnabled (USER.35)
- */
-BOOL16 WINAPI IsWindowEnabled16(HWND16 hWnd)
-{
- return IsWindowEnabled(hWnd);
-}
-
-
-/***********************************************************************
* IsWindowEnabled (USER32.@)
*/
BOOL WINAPI IsWindowEnabled(HWND hWnd)
@@ -1611,15 +1529,6 @@
/**********************************************************************
- * GetWindowWord (USER.133)
- */
-WORD WINAPI GetWindowWord16( HWND16 hwnd, INT16 offset )
-{
- return GetWindowWord( hwnd, offset );
-}
-
-
-/**********************************************************************
* GetWindowWord (USER32.@)
*/
WORD WINAPI GetWindowWord( HWND hwnd, INT offset )
@@ -1633,44 +1542,29 @@
{
WARN("Invalid offset %d\n", offset );
retvalue = 0;
- goto end;
}
- retvalue = *(WORD *)(((char *)wndPtr->wExtra) + offset);
- goto end;
+ else retvalue = *(WORD *)(((char *)wndPtr->wExtra) + offset);
+ WIN_ReleaseWndPtr(wndPtr);
+ return retvalue;
}
+
+ WIN_ReleaseWndPtr(wndPtr);
switch(offset)
{
- case GWW_ID:
- if (HIWORD(wndPtr->wIDmenu))
- WARN("GWW_ID: discards high bits of 0x%08x!\n",
- wndPtr->wIDmenu);
- retvalue = (WORD)wndPtr->wIDmenu;
- goto end;
- case GWW_HWNDPARENT:
- retvalue = GetParent(hwnd);
- goto end;
- case GWW_HINSTANCE:
- if (HIWORD(wndPtr->hInstance))
- WARN("GWW_HINSTANCE: discards high bits of 0x%08x!\n",
- wndPtr->hInstance);
- retvalue = (WORD)wndPtr->hInstance;
- goto end;
+ case GWL_HWNDPARENT:
+ return GetWindowLongW( hwnd, offset );
+ case GWL_ID:
+ case GWL_HINSTANCE:
+ {
+ LONG ret = GetWindowLongW( hwnd, offset );
+ if (HIWORD(ret))
+ WARN("%d: discards high bits of 0x%08lx!\n", offset, ret );
+ return LOWORD(ret);
+ }
default:
WARN("Invalid offset %d\n", offset );
- retvalue = 0;
- goto end;
+ return 0;
}
-end:
- WIN_ReleaseWndPtr(wndPtr);
- return retvalue;
-}
-
-/**********************************************************************
- * SetWindowWord (USER.134)
- */
-WORD WINAPI SetWindowWord16( HWND16 hwnd, INT16 offset, WORD newval )
-{
- return SetWindowWord( hwnd, offset, newval );
}
@@ -1687,27 +1581,27 @@
if (offset + sizeof(WORD) > wndPtr->cbWndExtra)
{
WARN("Invalid offset %d\n", offset );
- retval = 0;
- goto end;
+ WIN_ReleaseWndPtr(wndPtr);
+ return 0;
}
ptr = (WORD *)(((char *)wndPtr->wExtra) + offset);
+ retval = *ptr;
+ *ptr = newval;
+ WIN_ReleaseWndPtr(wndPtr);
+ return retval;
}
- else switch(offset)
- {
- case GWW_ID: ptr = (WORD *)&wndPtr->wIDmenu; break;
- case GWW_HINSTANCE: ptr = (WORD *)&wndPtr->hInstance; break;
- case GWW_HWNDPARENT: retval = SetParent( hwnd, newval );
- goto end;
- default:
- WARN("Invalid offset %d\n", offset );
- retval = 0;
- goto end;
- }
- retval = *ptr;
- *ptr = newval;
-end:
+
WIN_ReleaseWndPtr(wndPtr);
- return retval;
+ switch(offset)
+ {
+ case GWL_ID:
+ case GWL_HINSTANCE:
+ case GWL_HWNDPARENT:
+ return SetWindowLongW( hwnd, offset, (UINT)newval );
+ default:
+ WARN("Invalid offset %d\n", offset );
+ return 0;
+ }
}
@@ -1751,7 +1645,7 @@
case GWL_WNDPROC: retvalue = (LONG)WINPROC_GetProc( wndPtr->winproc,
type );
goto end;
- case GWL_HWNDPARENT: retvalue = GetParent(hwnd);
+ case GWL_HWNDPARENT: retvalue = (LONG)GetParent(hwnd);
goto end;
case GWL_HINSTANCE: retvalue = wndPtr->hInstance;
goto end;
@@ -1870,7 +1764,7 @@
*/
LONG WINAPI GetWindowLong16( HWND16 hwnd, INT16 offset )
{
- return WIN_GetWindowLong( (HWND)hwnd, offset, WIN_PROC_16 );
+ return WIN_GetWindowLong( WIN_Handle32(hwnd), offset, WIN_PROC_16 );
}
@@ -1897,7 +1791,7 @@
*/
LONG WINAPI SetWindowLong16( HWND16 hwnd, INT16 offset, LONG newval )
{
- return WIN_SetWindowLong( hwnd, offset, newval, WIN_PROC_16 );
+ return WIN_SetWindowLong( WIN_Handle32(hwnd), offset, newval, WIN_PROC_16 );
}
@@ -1995,15 +1889,6 @@
/*******************************************************************
- * GetWindowText (USER.36)
- */
-INT16 WINAPI GetWindowText16( HWND16 hwnd, SEGPTR lpString, INT16 nMaxCount )
-{
- return (INT16)SendMessage16(hwnd, WM_GETTEXT, nMaxCount, (LPARAM)lpString);
-}
-
-
-/*******************************************************************
* GetWindowTextA (USER32.@)
*/
INT WINAPI GetWindowTextA( HWND hwnd, LPSTR lpString, INT nMaxCount )
@@ -2037,15 +1922,6 @@
/*******************************************************************
- * SetWindowText (USER.37)
- */
-BOOL16 WINAPI SetWindowText16( HWND16 hwnd, SEGPTR lpString )
-{
- return (BOOL16)SendMessage16( hwnd, WM_SETTEXT, 0, (LPARAM)lpString );
-}
-
-
-/*******************************************************************
* SetWindowText (USER32.@)
* SetWindowTextA (USER32.@)
*/
@@ -2065,15 +1941,6 @@
/*******************************************************************
- * GetWindowTextLength (USER.38)
- */
-INT16 WINAPI GetWindowTextLength16( HWND16 hwnd )
-{
- return (INT16)GetWindowTextLengthA( hwnd );
-}
-
-
-/*******************************************************************
* GetWindowTextLengthA (USER32.@)
*/
INT WINAPI GetWindowTextLengthA( HWND hwnd )
@@ -2091,16 +1958,6 @@
/*******************************************************************
- * IsWindow (USER.47)
- */
-BOOL16 WINAPI IsWindow16( HWND16 hwnd )
-{
- CURRENT_STACK16->es = USER_HeapSel;
- return IsWindow( hwnd );
-}
-
-
-/*******************************************************************
* IsWindow (USER32.@)
*/
BOOL WINAPI IsWindow( HWND hwnd )
@@ -2167,15 +2024,6 @@
/*****************************************************************
- * GetParent (USER.46)
- */
-HWND16 WINAPI GetParent16( HWND16 hwnd )
-{
- return (HWND16)GetParent( hwnd );
-}
-
-
-/*****************************************************************
* GetParent (USER32.@)
*/
HWND WINAPI GetParent( HWND hwnd )
@@ -2234,15 +2082,6 @@
/*****************************************************************
- * SetParent (USER.233)
- */
-HWND16 WINAPI SetParent16( HWND16 hwndChild, HWND16 hwndNewParent )
-{
- return SetParent( hwndChild, hwndNewParent );
-}
-
-
-/*****************************************************************
* SetParent (USER32.@)
*/
HWND WINAPI SetParent( HWND hwnd, HWND parent )
@@ -2302,15 +2141,6 @@
/*******************************************************************
- * IsChild (USER.48)
- */
-BOOL16 WINAPI IsChild16( HWND16 parent, HWND16 child )
-{
- return IsChild(parent,child);
-}
-
-
-/*******************************************************************
* IsChild (USER32.@)
*/
BOOL WINAPI IsChild( HWND parent, HWND child )
@@ -2329,15 +2159,6 @@
/***********************************************************************
- * IsWindowVisible (USER.49)
- */
-BOOL16 WINAPI IsWindowVisible16( HWND16 hwnd )
-{
- return IsWindowVisible(hwnd);
-}
-
-
-/***********************************************************************
* IsWindowVisible (USER32.@)
*/
BOOL WINAPI IsWindowVisible( HWND hwnd )
@@ -2384,15 +2205,6 @@
/*******************************************************************
- * GetTopWindow (USER.229)
- */
-HWND16 WINAPI GetTopWindow16( HWND16 hwnd )
-{
- return GetTopWindow(hwnd);
-}
-
-
-/*******************************************************************
* GetTopWindow (USER32.@)
*/
HWND WINAPI GetTopWindow( HWND hwnd )
@@ -2403,15 +2215,6 @@
/*******************************************************************
- * GetWindow (USER.262)
- */
-HWND16 WINAPI GetWindow16( HWND16 hwnd, WORD rel )
-{
- return GetWindow( hwnd,rel );
-}
-
-
-/*******************************************************************
* GetWindow (USER32.@)
*/
HWND WINAPI GetWindow( HWND hwnd, WORD rel )
@@ -2484,15 +2287,6 @@
}
-/*******************************************************************
- * GetNextWindow (USER.230)
- */
-HWND16 WINAPI GetNextWindow16( HWND16 hwnd, WORD flag )
-{
- if ((flag != GW_HWNDNEXT) && (flag != GW_HWNDPREV)) return 0;
- return GetWindow16( hwnd, flag );
-}
-
/***********************************************************************
* WIN_InternalShowOwnedPopups
*
@@ -2558,15 +2352,6 @@
}
/*******************************************************************
- * ShowOwnedPopups (USER.265)
- */
-void WINAPI ShowOwnedPopups16( HWND16 owner, BOOL16 fShow )
-{
- ShowOwnedPopups( owner, fShow );
-}
-
-
-/*******************************************************************
* ShowOwnedPopups (USER32.@)
*/
BOOL WINAPI ShowOwnedPopups( HWND owner, BOOL fShow )
@@ -2618,14 +2403,6 @@
/*******************************************************************
- * GetLastActivePopup (USER.287)
- */
-HWND16 WINAPI GetLastActivePopup16( HWND16 hwnd )
-{
- return GetLastActivePopup( hwnd );
-}
-
-/*******************************************************************
* GetLastActivePopup (USER32.@)
*/
HWND WINAPI GetLastActivePopup( HWND hwnd )
@@ -2873,15 +2650,6 @@
/*******************************************************************
- * FlashWindow (USER.105)
- */
-BOOL16 WINAPI FlashWindow16( HWND16 hWnd, BOOL16 bInvert )
-{
- return FlashWindow( hWnd, bInvert );
-}
-
-
-/*******************************************************************
* FlashWindow (USER32.@)
*/
BOOL WINAPI FlashWindow( HWND hWnd, BOOL bInvert )
@@ -2927,27 +2695,6 @@
/*******************************************************************
- * SetSysModalWindow (USER.188)
- */
-HWND16 WINAPI SetSysModalWindow16( HWND16 hWnd )
-{
- HWND hWndOldModal = hwndSysModal;
- hwndSysModal = hWnd;
- FIXME("EMPTY STUB !! SetSysModalWindow(%04x) !\n", hWnd);
- return hWndOldModal;
-}
-
-
-/*******************************************************************
- * GetSysModalWindow (USER.189)
- */
-HWND16 WINAPI GetSysModalWindow16(void)
-{
- return hwndSysModal;
-}
-
-
-/*******************************************************************
* GetWindowContextHelpId (USER32.@)
*/
DWORD WINAPI GetWindowContextHelpId( HWND hwnd )
@@ -3044,16 +2791,6 @@
/*******************************************************************
- * DragDetect (USER.465)
- */
-BOOL16 WINAPI DragDetect16( HWND16 hWnd, POINT16 pt )
-{
- POINT pt32;
- CONV_POINT16TO32( &pt, &pt32 );
- return DragDetect( hWnd, pt32 );
-}
-
-/*******************************************************************
* DragDetect (USER32.@)
*/
BOOL WINAPI DragDetect( HWND hWnd, POINT pt )