mirror of
https://github.com/reactos/reactos.git
synced 2024-10-06 09:24:11 +00:00
Reinstated DIALOG_get_info() based of Wine's implementation, but with some modifications. This makes us pass the last 6 failed dialog wine tests.
svn path=/trunk/; revision=33695
This commit is contained in:
parent
eaaa829ad8
commit
e1ae479d5a
|
@ -42,7 +42,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(user32);
|
||||||
#define DF_OWNERENABLED 0x0002
|
#define DF_OWNERENABLED 0x0002
|
||||||
#define CW_USEDEFAULT16 ((short)0x8000)
|
#define CW_USEDEFAULT16 ((short)0x8000)
|
||||||
#define DWLP_ROS_DIALOGINFO (DWLP_USER+sizeof(ULONG_PTR))
|
#define DWLP_ROS_DIALOGINFO (DWLP_USER+sizeof(ULONG_PTR))
|
||||||
#define GETDLGINFO(hwnd) (DIALOGINFO*)GetWindowLongPtrW((hwnd),DWLP_ROS_DIALOGINFO)
|
#define GETDLGINFO(hwnd) DIALOG_get_info(hwnd, FALSE)
|
||||||
#define SETDLGINFO(hwnd, info) SetWindowLongPtrW((hwnd), DWLP_ROS_DIALOGINFO, (LONG_PTR)(info))
|
#define SETDLGINFO(hwnd, info) SetWindowLongPtrW((hwnd), DWLP_ROS_DIALOGINFO, (LONG_PTR)(info))
|
||||||
#define GET_WORD(ptr) (*(WORD *)(ptr))
|
#define GET_WORD(ptr) (*(WORD *)(ptr))
|
||||||
#define GET_DWORD(ptr) (*(DWORD *)(ptr))
|
#define GET_DWORD(ptr) (*(DWORD *)(ptr))
|
||||||
|
@ -138,7 +138,38 @@ const struct builtin_class_descr DIALOG_builtin_class =
|
||||||
|
|
||||||
/* INTERNAL FUNCTIONS ********************************************************/
|
/* INTERNAL FUNCTIONS ********************************************************/
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
* DIALOG_get_info
|
||||||
|
*
|
||||||
|
* Get the DIALOGINFO structure of a window, allocating it if needed
|
||||||
|
* and 'create' is TRUE.
|
||||||
|
*/
|
||||||
|
DIALOGINFO * DIALOG_get_info( HWND hWnd, BOOL create )
|
||||||
|
{
|
||||||
|
PWINDOW pWindow;
|
||||||
|
DIALOGINFO* dlgInfo = (DIALOGINFO *)GetWindowLongPtrW( hWnd, DWLP_ROS_DIALOGINFO );
|
||||||
|
|
||||||
|
if(!dlgInfo && create)
|
||||||
|
{
|
||||||
|
pWindow = ValidateHwnd( hWnd );
|
||||||
|
|
||||||
|
if (pWindow && pWindow->ExtraDataSize >= DLGWINDOWEXTRA && hWnd != GetDesktopWindow())
|
||||||
|
{
|
||||||
|
if (!(dlgInfo = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*dlgInfo) )))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
SETDLGINFO( hWnd, dlgInfo );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HeapFree( GetProcessHeap(), 0, dlgInfo );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dlgInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
* DIALOG_EnableOwner
|
* DIALOG_EnableOwner
|
||||||
*
|
*
|
||||||
* Helper function for modal dialogs to enable again the
|
* Helper function for modal dialogs to enable again the
|
||||||
|
@ -802,17 +833,21 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
|
||||||
will be valid only after WM_CREATE message has been handled in DefDlgProc
|
will be valid only after WM_CREATE message has been handled in DefDlgProc
|
||||||
All the members of the structure get filled here using temp variables */
|
All the members of the structure get filled here using temp variables */
|
||||||
|
|
||||||
// dlgInfo = DIALOG_get_info( hwnd, TRUE );
|
dlgInfo = DIALOG_get_info( hwnd, TRUE );
|
||||||
|
if (dlgInfo == NULL)
|
||||||
|
{
|
||||||
|
if (hUserFont) DeleteObject( hUserFont );
|
||||||
|
if (hMenu) DestroyMenu( hMenu );
|
||||||
|
if (modal && (flags & DF_OWNERENABLED)) DIALOG_EnableOwner(owner);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(dlgInfo = HeapAlloc( GetProcessHeap(), 0, sizeof(*dlgInfo) ))) return 0;
|
// dlgInfo->hwndFocus = 0;
|
||||||
SETDLGINFO(hwnd, dlgInfo);
|
|
||||||
|
|
||||||
dlgInfo->hwndFocus = 0;
|
|
||||||
dlgInfo->hUserFont = hUserFont;
|
dlgInfo->hUserFont = hUserFont;
|
||||||
dlgInfo->hMenu = hMenu;
|
dlgInfo->hMenu = hMenu;
|
||||||
dlgInfo->xBaseUnit = xBaseUnit;
|
dlgInfo->xBaseUnit = xBaseUnit;
|
||||||
dlgInfo->yBaseUnit = yBaseUnit;
|
dlgInfo->yBaseUnit = yBaseUnit;
|
||||||
dlgInfo->idResult = 0;
|
// dlgInfo->idResult = 0;
|
||||||
dlgInfo->flags = flags;
|
dlgInfo->flags = flags;
|
||||||
// dlgInfo->hDialogHeap = 0;
|
// dlgInfo->hDialogHeap = 0;
|
||||||
|
|
||||||
|
@ -1500,7 +1535,7 @@ DefDlgProcA(
|
||||||
DIALOGINFO * dlgInfo;
|
DIALOGINFO * dlgInfo;
|
||||||
|
|
||||||
/* if there's no dialog info property then call default windows proc?? */
|
/* if there's no dialog info property then call default windows proc?? */
|
||||||
if (!(dlgInfo = GETDLGINFO(hDlg)))
|
if (!(dlgInfo = DIALOG_get_info(hDlg, TRUE)))
|
||||||
return DefWindowProcA( hDlg, Msg, wParam, lParam );
|
return DefWindowProcA( hDlg, Msg, wParam, lParam );
|
||||||
|
|
||||||
SetWindowLongPtrW( hDlg, DWLP_MSGRESULT, 0 );
|
SetWindowLongPtrW( hDlg, DWLP_MSGRESULT, 0 );
|
||||||
|
@ -1561,7 +1596,7 @@ DefDlgProcW(
|
||||||
DIALOGINFO * dlgInfo;
|
DIALOGINFO * dlgInfo;
|
||||||
|
|
||||||
/* if there's no dialog info property then call default windows proc?? */
|
/* if there's no dialog info property then call default windows proc?? */
|
||||||
if (!(dlgInfo = GETDLGINFO(hDlg)))
|
if (!(dlgInfo = DIALOG_get_info(hDlg, TRUE)))
|
||||||
return DefWindowProcW( hDlg, Msg, wParam, lParam );
|
return DefWindowProcW( hDlg, Msg, wParam, lParam );
|
||||||
|
|
||||||
SetWindowLongPtrW( hDlg, DWLP_MSGRESULT, 0 );
|
SetWindowLongPtrW( hDlg, DWLP_MSGRESULT, 0 );
|
||||||
|
|
Loading…
Reference in a new issue