mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 12:23:31 +00:00
[COMDLG32] Sync with Wine Staging 2.2. CORE-12823
e07d20f comdlg32: Don't crash if an IShellFolder could not be created. bd1b3c1 comdlg32: Use localized "Path does not exist" string. 1707df3 comdlg32: Delay OleInitialize() until after file dialog window is created. 6c4aaf7 comdlg32: Always use original Open File dialog template. eff2ecc comdlg32: Avoid some superfluous pointer casts. svn path=/trunk/; revision=74092
This commit is contained in:
@@ -219,14 +219,10 @@ static BOOL BrowseSelectedFolder(HWND hwnd);
|
||||
*/
|
||||
static BOOL GetFileName95(FileOpenDlgInfos *fodInfos)
|
||||
{
|
||||
|
||||
LRESULT lRes;
|
||||
LPCVOID origTemplate;
|
||||
DWORD dwSize;
|
||||
LPDLGTEMPLATEW template;
|
||||
void *template;
|
||||
HRSRC hRes;
|
||||
HANDLE hDlgTmpl = 0;
|
||||
HRESULT hr;
|
||||
|
||||
/* test for missing functionality */
|
||||
if (fodInfos->ofnInfos->Flags & UNIMPLEMENTED_FLAGS)
|
||||
@@ -242,36 +238,25 @@ static BOOL GetFileName95(FileOpenDlgInfos *fodInfos)
|
||||
COMDLG32_SetCommDlgExtendedError(CDERR_FINDRESFAILURE);
|
||||
return FALSE;
|
||||
}
|
||||
if (!(dwSize = SizeofResource(COMDLG32_hInstance, hRes)) ||
|
||||
!(hDlgTmpl = LoadResource(COMDLG32_hInstance, hRes)) ||
|
||||
!(origTemplate = LockResource(hDlgTmpl)))
|
||||
if (!(hDlgTmpl = LoadResource(COMDLG32_hInstance, hRes )) ||
|
||||
!(template = LockResource( hDlgTmpl )))
|
||||
{
|
||||
COMDLG32_SetCommDlgExtendedError(CDERR_LOADRESFAILURE);
|
||||
return FALSE;
|
||||
}
|
||||
if (!(template = HeapAlloc(GetProcessHeap(), 0, dwSize)))
|
||||
{
|
||||
COMDLG32_SetCommDlgExtendedError(CDERR_MEMALLOCFAILURE);
|
||||
return FALSE;
|
||||
}
|
||||
memcpy(template, origTemplate, dwSize);
|
||||
|
||||
/* msdn: explorer style dialogs permit sizing by default.
|
||||
* The OFN_ENABLESIZING flag is only needed when a hook or
|
||||
* custom tmeplate is provided */
|
||||
* custom template is provided */
|
||||
if( (fodInfos->ofnInfos->Flags & OFN_EXPLORER) &&
|
||||
!(fodInfos->ofnInfos->Flags & ( OFN_ENABLEHOOK | OFN_ENABLETEMPLATE | OFN_ENABLETEMPLATEHANDLE)))
|
||||
fodInfos->ofnInfos->Flags |= OFN_ENABLESIZING;
|
||||
|
||||
if (fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)
|
||||
{
|
||||
template->style |= WS_SIZEBOX;
|
||||
fodInfos->sizedlg.cx = fodInfos->sizedlg.cy = 0;
|
||||
fodInfos->initial_size.x = fodInfos->initial_size.y = 0;
|
||||
}
|
||||
else
|
||||
template->style &= ~WS_SIZEBOX;
|
||||
|
||||
|
||||
/* old style hook messages */
|
||||
if (IsHooked(fodInfos))
|
||||
@@ -282,9 +267,6 @@ static BOOL GetFileName95(FileOpenDlgInfos *fodInfos)
|
||||
fodInfos->HookMsg.sharevistring = RegisterWindowMessageW(SHAREVISTRINGW);
|
||||
}
|
||||
|
||||
/* Some shell namespace extensions depend on COM being initialized. */
|
||||
hr = OleInitialize(NULL);
|
||||
|
||||
if (fodInfos->unicode)
|
||||
lRes = DialogBoxIndirectParamW(COMDLG32_hInstance,
|
||||
template,
|
||||
@@ -297,11 +279,9 @@ static BOOL GetFileName95(FileOpenDlgInfos *fodInfos)
|
||||
fodInfos->ofnInfos->hwndOwner,
|
||||
FileOpenDlgProc95,
|
||||
(LPARAM) fodInfos);
|
||||
if (SUCCEEDED(hr))
|
||||
if (fodInfos->ole_initialized)
|
||||
OleUninitialize();
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, template);
|
||||
|
||||
/* Unable to create the dialog */
|
||||
if( lRes == -1)
|
||||
return FALSE;
|
||||
@@ -1263,7 +1243,11 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
|
||||
int gripx = GetSystemMetrics( SM_CYHSCROLL);
|
||||
int gripy = GetSystemMetrics( SM_CYVSCROLL);
|
||||
|
||||
/* Adds the FileOpenDlgInfos in the property list of the dialog
|
||||
/* Some shell namespace extensions depend on COM being initialized. */
|
||||
if (SUCCEEDED(OleInitialize(NULL)))
|
||||
fodInfos->ole_initialized = TRUE;
|
||||
|
||||
/* Adds the FileOpenDlgInfos in the property list of the dialog
|
||||
so it will be easily accessible through a GetPropA(...) */
|
||||
SetPropA(hwnd, FileOpenDlgInfosStr, fodInfos);
|
||||
|
||||
@@ -1271,7 +1255,31 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
|
||||
|
||||
if (fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)
|
||||
{
|
||||
GetWindowRect( hwnd, &rc);
|
||||
DWORD style = GetWindowLongW(hwnd, GWL_STYLE);
|
||||
DWORD ex_style = GetWindowLongW(hwnd, GWL_EXSTYLE);
|
||||
RECT client, client_adjusted;
|
||||
|
||||
if (fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)
|
||||
{
|
||||
style |= WS_SIZEBOX;
|
||||
ex_style |= WS_EX_WINDOWEDGE;
|
||||
}
|
||||
else
|
||||
style &= ~WS_SIZEBOX;
|
||||
SetWindowLongW(hwnd, GWL_STYLE, style);
|
||||
SetWindowLongW(hwnd, GWL_EXSTYLE, ex_style);
|
||||
|
||||
GetClientRect( hwnd, &client );
|
||||
GetClientRect( hwnd, &client_adjusted );
|
||||
AdjustWindowRectEx( &client_adjusted, style, FALSE, ex_style );
|
||||
|
||||
GetWindowRect( hwnd, &rc );
|
||||
rc.right += client_adjusted.right - client.right;
|
||||
rc.bottom += client_adjusted.bottom - client.bottom;
|
||||
SetWindowPos(hwnd, 0, 0, 0, rc.right - rc.left, rc.bottom - rc.top, SWP_FRAMECHANGED | SWP_NOACTIVATE |
|
||||
SWP_NOZORDER | SWP_NOMOVE);
|
||||
|
||||
GetWindowRect( hwnd, &rc );
|
||||
fodInfos->DlgInfos.hwndGrip =
|
||||
CreateWindowExA( 0, "SCROLLBAR", NULL,
|
||||
WS_CHILD | WS_GROUP | WS_VISIBLE | WS_CLIPSIBLINGS |
|
||||
@@ -2911,7 +2919,8 @@ static void FILEDLG95_SHELL_Clean(HWND hwnd)
|
||||
IShellView_DestroyViewWindow(fodInfos->Shell.FOIShellView);
|
||||
IShellView_Release(fodInfos->Shell.FOIShellView);
|
||||
}
|
||||
IShellFolder_Release(fodInfos->Shell.FOIShellFolder);
|
||||
if (fodInfos->Shell.FOIShellFolder)
|
||||
IShellFolder_Release(fodInfos->Shell.FOIShellFolder);
|
||||
IShellBrowser_Release(fodInfos->Shell.FOIShellBrowser);
|
||||
if (fodInfos->Shell.FOIDataObject)
|
||||
IDataObject_Release(fodInfos->Shell.FOIDataObject);
|
||||
@@ -3987,9 +3996,9 @@ static BOOL BrowseSelectedFolder(HWND hwnd)
|
||||
if ( FAILED( IShellBrowser_BrowseObject( fodInfos->Shell.FOIShellBrowser,
|
||||
pidlSelection, SBSP_RELATIVE ) ) )
|
||||
{
|
||||
static const WCHAR notexist[] = {'P','a','t','h',' ','d','o','e','s',
|
||||
' ','n','o','t',' ','e','x','i','s','t',0};
|
||||
MessageBoxW( hwnd, notexist, fodInfos->title, MB_OK | MB_ICONEXCLAMATION );
|
||||
WCHAR buf[64];
|
||||
LoadStringW( COMDLG32_hInstance, IDS_PATHNOTEXISTING, buf, sizeof(buf)/sizeof(WCHAR) );
|
||||
MessageBoxW( hwnd, buf, fodInfos->title, MB_OK | MB_ICONEXCLAMATION );
|
||||
}
|
||||
bBrowseSelFolder = TRUE;
|
||||
if(fodInfos->ofnInfos->Flags & OFN_EXPLORER)
|
||||
|
||||
@@ -81,6 +81,7 @@ typedef struct
|
||||
UINT sharevistring;
|
||||
} HookMsg;
|
||||
|
||||
BOOL ole_initialized;
|
||||
} FileOpenDlgInfos;
|
||||
|
||||
/***********************************************************************
|
||||
|
||||
@@ -1958,7 +1958,7 @@ static LRESULT CALLBACK dropdown_subclass_proc(HWND hwnd, UINT umessage, WPARAM
|
||||
|
||||
if (umessage == WM_LBUTTONDOWN)
|
||||
{
|
||||
FileDialogImpl *This = (FileDialogImpl*)GetPropW(hwnd, prop_this);
|
||||
FileDialogImpl *This = GetPropW(hwnd, prop_this);
|
||||
|
||||
SendMessageW(hwnd, BM_SETCHECK, BST_CHECKED, 0);
|
||||
show_opendropdown(This);
|
||||
@@ -2051,7 +2051,7 @@ static LRESULT on_wm_initdialog(HWND hwnd, LPARAM lParam)
|
||||
SendMessageW(dropdown_hwnd, WM_SETFONT, (LPARAM)This->hfont_opendropdown, 0);
|
||||
|
||||
/* Subclass button so we can handle LBUTTONDOWN */
|
||||
SetPropW(dropdown_hwnd, prop_this, (HANDLE)This);
|
||||
SetPropW(dropdown_hwnd, prop_this, This);
|
||||
SetPropW(dropdown_hwnd, prop_oldwndproc,
|
||||
(HANDLE)SetWindowLongPtrW(dropdown_hwnd, GWLP_WNDPROC, (LONG_PTR)dropdown_subclass_proc));
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ reactos/dll/win32/cabinet # Synced to WineStaging-2.2
|
||||
reactos/dll/win32/clusapi # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/comcat # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/comctl32 # Synced to WineStaging-2.2
|
||||
reactos/dll/win32/comdlg32 # Synced to WineStaging-1.9.23
|
||||
reactos/dll/win32/comdlg32 # Synced to WineStaging-2.2
|
||||
reactos/dll/win32/compstui # Synced to WineStaging-2.2
|
||||
reactos/dll/win32/credui # Synced to WineStaging-2.2
|
||||
reactos/dll/win32/crypt32 # Synced to WineStaging-1.9.23
|
||||
|
||||
Reference in New Issue
Block a user