Author: akhaldi Date: Sun Mar 5 20:57:05 2017 New Revision: 74092
URL: http://svn.reactos.org/svn/reactos?rev=74092&view=rev Log: [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.
Modified: trunk/reactos/dll/win32/comdlg32/filedlg.c trunk/reactos/dll/win32/comdlg32/filedlgbrowser.h trunk/reactos/dll/win32/comdlg32/itemdlg.c trunk/reactos/media/doc/README.WINE
Modified: trunk/reactos/dll/win32/comdlg32/filedlg.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/comdlg32/filedlg.... ============================================================================== --- trunk/reactos/dll/win32/comdlg32/filedlg.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/comdlg32/filedlg.c [iso-8859-1] Sun Mar 5 20:57:05 2017 @@ -219,14 +219,10 @@ */ 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 @@ 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)) @@ -281,9 +266,6 @@ fodInfos->HookMsg.helpmsgstring = RegisterWindowMessageW(HELPMSGSTRINGW); fodInfos->HookMsg.sharevistring = RegisterWindowMessageW(SHAREVISTRINGW); } - - /* Some shell namespace extensions depend on COM being initialized. */ - hr = OleInitialize(NULL);
if (fodInfos->unicode) lRes = DialogBoxIndirectParamW(COMDLG32_hInstance, @@ -297,10 +279,8 @@ 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) @@ -1263,7 +1243,11 @@ 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 @@
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 @@ 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 @@ 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)
Modified: trunk/reactos/dll/win32/comdlg32/filedlgbrowser.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/comdlg32/filedlgb... ============================================================================== --- trunk/reactos/dll/win32/comdlg32/filedlgbrowser.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/comdlg32/filedlgbrowser.h [iso-8859-1] Sun Mar 5 20:57:05 2017 @@ -81,6 +81,7 @@ UINT sharevistring; } HookMsg;
+ BOOL ole_initialized; } FileOpenDlgInfos;
/***********************************************************************
Modified: trunk/reactos/dll/win32/comdlg32/itemdlg.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/comdlg32/itemdlg.... ============================================================================== --- trunk/reactos/dll/win32/comdlg32/itemdlg.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/comdlg32/itemdlg.c [iso-8859-1] Sun Mar 5 20:57:05 2017 @@ -1958,7 +1958,7 @@
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 @@ 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)); }
Modified: trunk/reactos/media/doc/README.WINE URL: http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=7... ============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Sun Mar 5 20:57:05 2017 @@ -55,7 +55,7 @@ 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