[PATCH 3/6] shell32: Implement IExplorerBrowser::SetFolderSettings.

David Hedberg david.hedberg at gmail.com
Mon Aug 23 05:55:19 CDT 2010


---
 dlls/shell32/ebrowser.c       |   33 +++++++++++++++++++++++++++++++--
 dlls/shell32/tests/ebrowser.c |   16 ++++++++++++++++
 2 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/dlls/shell32/ebrowser.c b/dlls/shell32/ebrowser.c
index 2f77063..e4e132b 100644
--- a/dlls/shell32/ebrowser.c
+++ b/dlls/shell32/ebrowser.c
@@ -45,6 +45,7 @@ typedef struct _ExplorerBrowserImpl {
     HWND hwnd_sv;
 
     EXPLORER_BROWSER_OPTIONS eb_options;
+    FOLDERSETTINGS fs;
 
     IShellView *psv;
     RECT sv_rc;
@@ -70,6 +71,24 @@ static void size_panes(ExplorerBrowserImpl *This)
                TRUE);
 }
 
+static HRESULT change_viewmode(ExplorerBrowserImpl *This, UINT viewmode)
+{
+    IFolderView *pfv;
+    HRESULT hr;
+
+    if(!This->psv)
+        return E_FAIL;
+
+    hr = IShellView_QueryInterface(This->psv, &IID_IFolderView, (void*)&pfv);
+    if(SUCCEEDED(hr))
+    {
+        hr = IFolderView_SetCurrentViewMode(pfv, This->fs.ViewMode);
+        IFolderView_Release(pfv);
+    }
+
+    return hr;
+}
+
 /**************************************************************************
  * Main window related functions.
  */
@@ -210,6 +229,9 @@ static HRESULT WINAPI IExplorerBrowser_fnInitialize(IExplorerBrowser *iface,
         return E_FAIL;
     }
 
+    This->fs.ViewMode = pfs ? pfs->ViewMode : FVM_DETAILS;
+    This->fs.fFlags = pfs ? (pfs->fFlags | FWF_NOCLIENTEDGE) : FWF_NOCLIENTEDGE;
+
     return S_OK;
 }
 
@@ -275,9 +297,16 @@ static HRESULT WINAPI IExplorerBrowser_fnSetFolderSettings(IExplorerBrowser *ifa
                                                            const FOLDERSETTINGS *pfs)
 {
     ExplorerBrowserImpl *This = (ExplorerBrowserImpl*)iface;
-    FIXME("stub, %p (%p)\n", This, pfs);
+    TRACE("%p (%p)\n", This, pfs);
 
-    return E_NOTIMPL;
+    if(!pfs)
+        return E_INVALIDARG;
+
+    This->fs.ViewMode = pfs->ViewMode;
+    This->fs.fFlags = pfs->fFlags | FWF_NOCLIENTEDGE;
+
+    /* Change the settings of the current view, if any. */
+    return change_viewmode(This, This->fs.ViewMode);
 }
 
 static HRESULT WINAPI IExplorerBrowser_fnAdvise(IExplorerBrowser *iface,
diff --git a/dlls/shell32/tests/ebrowser.c b/dlls/shell32/tests/ebrowser.c
index 8486645..3397eb7 100644
--- a/dlls/shell32/tests/ebrowser.c
+++ b/dlls/shell32/tests/ebrowser.c
@@ -276,6 +276,7 @@ static void test_basics(void)
 {
     IExplorerBrowser *peb;
     IShellBrowser *psb;
+    FOLDERSETTINGS fs;
     ULONG lres;
     DWORD flags;
     HDWP hdwp;
@@ -358,6 +359,21 @@ static void test_basics(void)
     ok(hr == S_OK, "got (0x%08x)\n", hr);
 
     IExplorerBrowser_Destroy(peb);
+    IExplorerBrowser_Release(peb);
+
+    ebrowser_instantiate(&peb);
+    ebrowser_initialize(peb);
+
+    /* SetFolderSettings */
+    hr = IExplorerBrowser_SetFolderSettings(peb, NULL);
+    ok(hr == E_INVALIDARG, "got (0x%08x)\n", hr);
+    fs.ViewMode = 0; fs.fFlags = 0;
+    hr = IExplorerBrowser_SetFolderSettings(peb, &fs);
+    todo_wine ok(hr == E_INVALIDARG, "got (0x%08x)\n", hr);
+
+    /* TODO: Test after browsing somewhere. */
+
+    IExplorerBrowser_Destroy(peb);
     lres = IExplorerBrowser_Release(peb);
     ok(lres == 0, "Got %d\n", lres);
 }
-- 
1.7.2




More information about the wine-patches mailing list