From: Jactry Zeng jzeng@codeweavers.com
--- include/shobjidl.idl | 1 + 1 file changed, 1 insertion(+)
diff --git a/include/shobjidl.idl b/include/shobjidl.idl index e213958f6e2..8aa24ea86fc 100644 --- a/include/shobjidl.idl +++ b/include/shobjidl.idl @@ -699,6 +699,7 @@ typedef char *LPVIEWSETTINGS;
typedef [v1_enum] enum FOLDERFLAGS { + FWF_NONE = 0x00000000, FWF_AUTOARRANGE = 0x00000001, FWF_ABBREVIATEDNAMES = 0x00000002, FWF_SNAPTOGRID = 0x00000004,
From: Jactry Zeng jzeng@codeweavers.com
--- dlls/shell32/shlview.c | 1 + dlls/shell32/tests/shlview.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c index 40a7d76c359..f2e8bc67267 100644 --- a/dlls/shell32/shlview.c +++ b/dlls/shell32/shlview.c @@ -3779,6 +3779,7 @@ IShellView *IShellView_Constructor(IShellFolder *folder) sv->cScrollDelay = 0; sv->ptLastMousePos.x = 0; sv->ptLastMousePos.y = 0; + sv->FolderSettings.ViewMode = FVM_TILE;
TRACE("(%p)->(%p)\n", sv, folder); return (IShellView*)&sv->IShellView3_iface; diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c index a83f3137509..d25d626f829 100644 --- a/dlls/shell32/tests/shlview.c +++ b/dlls/shell32/tests/shlview.c @@ -1094,14 +1094,20 @@ static void test_GetSetCurrentViewMode(void) hr = IShellFolder_CreateViewObject(desktop, NULL, &IID_IShellView, (void**)&sview); ok(hr == S_OK, "got (0x%08lx)\n", hr);
+ hr = IShellView_QueryInterface(sview, &IID_IFolderView, (void **)&fview); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + viewmode = 0xdeadbeef; + hr = IFolderView_GetCurrentViewMode(fview, &viewmode); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(viewmode == FVM_TILE || broken(viewmode == 0) /* pre win7 */, "Got view mode %u.\n", viewmode); + fs.ViewMode = 1; fs.fFlags = 0; browser = IShellBrowserImpl_Construct(); hr = IShellView_CreateViewWindow(sview, NULL, &fs, browser, &rc, &hwnd); ok(hr == S_OK || broken(hr == S_FALSE /*Win2k*/ ), "got (0x%08lx)\n", hr);
- hr = IShellView_QueryInterface(sview, &IID_IFolderView, (void**)&fview); - ok(hr == S_OK || broken(hr == E_NOINTERFACE), "got (0x%08lx)\n", hr); if(SUCCEEDED(hr)) { HWND hwnd_lv;
From: Jactry Zeng jzeng@codeweavers.com
--- dlls/shell32/tests/shlview.c | 76 ++++++++++++++---------------------- 1 file changed, 30 insertions(+), 46 deletions(-)
diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c index d25d626f829..9f85ba0459d 100644 --- a/dlls/shell32/tests/shlview.c +++ b/dlls/shell32/tests/shlview.c @@ -619,6 +619,22 @@ static const IShellBrowserVtbl shellbrowservtbl = {
static IShellBrowser test_shellbrowser = { &shellbrowservtbl };
+static void create_interfaces(IShellFolder **desktop, IShellView **view) +{ + HRESULT hr; + + hr = SHGetDesktopFolder(desktop); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IShellFolder_CreateViewObject(*desktop, NULL, &IID_IShellView, (void **)view); + ok(hr == S_OK, "Got hr %#lx.\n", hr); +} + +static void destroy_interfaces(IShellFolder *desktop, IShellView *view) +{ + IShellFolder_Release(desktop); + IShellView_Release(view); +} + static void test_CreateViewWindow(void) { IShellFolder *desktop; @@ -631,11 +647,7 @@ static void test_CreateViewWindow(void) ULONG ref1, ref2; IUnknown *unk;
- hr = SHGetDesktopFolder(&desktop); - ok(hr == S_OK, "got (0x%08lx)\n", hr); - - hr = IShellFolder_CreateViewObject(desktop, NULL, &IID_IShellView, (void**)&view); - ok(hr == S_OK, "got (0x%08lx)\n", hr); + create_interfaces(&desktop, &view);
hr = IShellView_QueryInterface(view, &IID_CDefView, (void **)&unk); ok(hr == S_OK, "got (0x%08lx)\n", hr); @@ -719,18 +731,13 @@ static void test_IFolderView(void) POINT pt; RECT r;
- hr = SHGetDesktopFolder(&desktop); - ok(hr == S_OK, "got (0x%08lx)\n", hr); - - hr = IShellFolder_CreateViewObject(desktop, NULL, &IID_IShellView, (void**)&view); - ok(hr == S_OK, "got (0x%08lx)\n", hr); + create_interfaces(&desktop, &view);
hr = IShellView_QueryInterface(view, &IID_IFolderView, (void**)&fv); if (hr != S_OK) { win_skip("IFolderView not supported by desktop folder\n"); - IShellView_Release(view); - IShellFolder_Release(desktop); + destroy_interfaces(desktop, view); return; }
@@ -772,8 +779,7 @@ if (0) win_skip("Failed to subclass ListView control\n"); IShellBrowser_Release(browser); IFolderView_Release(fv); - IShellView_Release(view); - IShellFolder_Release(desktop); + destroy_interfaces(desktop, view); return; }
@@ -863,8 +869,7 @@ if (0)
IShellBrowser_Release(browser); IFolderView_Release(fv); - IShellView_Release(view); - IShellFolder_Release(desktop); + destroy_interfaces(desktop, view); }
static void test_GetItemObject(void) @@ -874,11 +879,7 @@ static void test_GetItemObject(void) IUnknown *unk; HRESULT hr;
- hr = SHGetDesktopFolder(&desktop); - ok(hr == S_OK, "got (0x%08lx)\n", hr); - - hr = IShellFolder_CreateViewObject(desktop, NULL, &IID_IShellView, (void**)&view); - ok(hr == S_OK, "got (0x%08lx)\n", hr); + create_interfaces(&desktop, &view);
/* from documentation three interfaces are supported for SVGIO_BACKGROUND: IContextMenu, IDispatch, IPersistHistory */ @@ -900,8 +901,7 @@ static void test_GetItemObject(void) hr = IShellView_GetItemObject(view, SVGIO_BACKGROUND, &IID_IPersist, (void**)&unk); ok(hr == E_NOINTERFACE || broken(hr == E_NOTIMPL) /* W2K */, "got (0x%08lx)\n", hr);
- IShellView_Release(view); - IShellFolder_Release(desktop); + destroy_interfaces(desktop, view); }
static void test_IShellFolderView(void) @@ -913,18 +913,13 @@ static void test_IShellFolderView(void) UINT i; HRESULT hr;
- hr = SHGetDesktopFolder(&desktop); - ok(hr == S_OK, "got (0x%08lx)\n", hr); - - hr = IShellFolder_CreateViewObject(desktop, NULL, &IID_IShellView, (void**)&view); - ok(hr == S_OK, "got (0x%08lx)\n", hr); + create_interfaces(&desktop, &view);
hr = IShellView_QueryInterface(view, &IID_IShellFolderView, (void**)&folderview); if (hr != S_OK) { win_skip("IShellView doesn't provide IShellFolderView on this platform\n"); - IShellView_Release(view); - IShellFolder_Release(desktop); + destroy_interfaces(desktop, view); return; }
@@ -955,8 +950,7 @@ static void test_IShellFolderView(void)
IShellFolderView_Release(folderview);
- IShellView_Release(view); - IShellFolder_Release(desktop); + destroy_interfaces(desktop, view); }
static void test_IOleWindow(void) @@ -966,11 +960,7 @@ static void test_IOleWindow(void) IOleWindow *wnd; HRESULT hr;
- hr = SHGetDesktopFolder(&desktop); - ok(hr == S_OK, "got (0x%08lx)\n", hr); - - hr = IShellFolder_CreateViewObject(desktop, NULL, &IID_IShellView, (void**)&view); - ok(hr == S_OK, "got (0x%08lx)\n", hr); + create_interfaces(&desktop, &view);
hr = IShellView_QueryInterface(view, &IID_IOleWindow, (void**)&wnd); ok(hr == E_NOINTERFACE, "got (0x%08lx)\n", hr); @@ -981,8 +971,7 @@ static void test_IOleWindow(void) hr = IShellView_ContextSensitiveHelp(view, FALSE); ok(hr == E_NOTIMPL, "got (0x%08lx)\n", hr);
- IShellView_Release(view); - IShellFolder_Release(desktop); + destroy_interfaces(desktop, view); }
static const struct message folderview_setcurrentviewmode1_2_prevista[] = { @@ -1088,11 +1077,7 @@ static void test_GetSetCurrentViewMode(void) static const int vista_res[11] = {0, 1, 5, 3, 4, 5, 6, 7, 7, 0, 0}; static const int win7_res[11] = {1, 1, 1, 3, 4, 1, 6, 1, 8, 8, 8};
- hr = SHGetDesktopFolder(&desktop); - ok(hr == S_OK, "got (0x%08lx)\n", hr); - - hr = IShellFolder_CreateViewObject(desktop, NULL, &IID_IShellView, (void**)&sview); - ok(hr == S_OK, "got (0x%08lx)\n", hr); + create_interfaces(&desktop, &sview);
hr = IShellView_QueryInterface(sview, &IID_IFolderView, (void **)&fview); ok(hr == S_OK, "Got hr %#lx.\n", hr); @@ -1290,8 +1275,7 @@ static void test_GetSetCurrentViewMode(void)
IShellBrowser_Release(browser); IShellView_DestroyViewWindow(sview); - IShellView_Release(sview); - IShellFolder_Release(desktop); + destroy_interfaces(desktop, sview); }
static void test_IOleCommandTarget(void)
From: Jactry Zeng jzeng@codeweavers.com
--- dlls/shell32/tests/shlview.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c index 9f85ba0459d..71b04367398 100644 --- a/dlls/shell32/tests/shlview.c +++ b/dlls/shell32/tests/shlview.c @@ -1491,6 +1491,25 @@ static void test_newmenu(void) IUnknown_Release(unk); }
+static void test_folder_flags(void) +{ + FOLDERSETTINGS settings; + IShellFolder *desktop; + IShellView *shellview; + HRESULT hr; + + create_interfaces(&desktop, &shellview); + + hr = IShellView_GetCurrentInfo(shellview, &settings); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(settings.ViewMode == FVM_TILE || broken(!settings.ViewMode) /* pre win7 */, + "Got view mode %u.\n", settings.ViewMode); + todo_wine ok(settings.fFlags == FWF_USESEARCHFOLDER || broken(!settings.fFlags) /* pre vista */, + "Got flags %#x.\n", settings.fFlags); + + destroy_interfaces(desktop, shellview); +} + START_TEST(shlview) { OleInitialize(NULL); @@ -1507,6 +1526,7 @@ START_TEST(shlview) test_SHCreateShellFolderView(); test_SHCreateShellFolderViewEx(); test_newmenu(); + test_folder_flags();
OleUninitialize(); }
From: Jactry Zeng jzeng@codeweavers.com
--- dlls/shell32/shlview.c | 1 + dlls/shell32/tests/shlview.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c index f2e8bc67267..da60283393c 100644 --- a/dlls/shell32/shlview.c +++ b/dlls/shell32/shlview.c @@ -3780,6 +3780,7 @@ IShellView *IShellView_Constructor(IShellFolder *folder) sv->ptLastMousePos.x = 0; sv->ptLastMousePos.y = 0; sv->FolderSettings.ViewMode = FVM_TILE; + sv->FolderSettings.fFlags = FWF_USESEARCHFOLDER;
TRACE("(%p)->(%p)\n", sv, folder); return (IShellView*)&sv->IShellView3_iface; diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c index 71b04367398..0f6ad9f4158 100644 --- a/dlls/shell32/tests/shlview.c +++ b/dlls/shell32/tests/shlview.c @@ -1504,7 +1504,7 @@ static void test_folder_flags(void) ok(hr == S_OK, "Got hr %#lx.\n", hr); ok(settings.ViewMode == FVM_TILE || broken(!settings.ViewMode) /* pre win7 */, "Got view mode %u.\n", settings.ViewMode); - todo_wine ok(settings.fFlags == FWF_USESEARCHFOLDER || broken(!settings.fFlags) /* pre vista */, + ok(settings.fFlags == FWF_USESEARCHFOLDER || broken(!settings.fFlags) /* pre vista */, "Got flags %#x.\n", settings.fFlags);
destroy_interfaces(desktop, shellview);