From: David Hedberg Subject: [PATCH 3/5] comdlg32: ::SetFileTypeIndex and ::GetFileTypeIndex uses a one-based index. Message-Id: <1408840748-21728-3-git-send-email-david.hedberg@gmail.com> Date: Sun, 24 Aug 2014 02:39:06 +0200 --- dlls/comdlg32/itemdlg.c | 12 +++++++----- dlls/comdlg32/tests/itemdlg.c | 23 ++++++++++++++++++++++- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/dlls/comdlg32/itemdlg.c b/dlls/comdlg32/itemdlg.c index 1c358f5..d0188a2 100644 --- a/dlls/comdlg32/itemdlg.c +++ b/dlls/comdlg32/itemdlg.c @@ -1879,10 +1879,9 @@ static HRESULT WINAPI IFileDialog2_fnSetFileTypeIndex(IFileDialog2 *iface, UINT if(!This->filterspecs) return E_FAIL; - if(iFileType >= This->filterspec_count) - This->filetypeindex = This->filterspec_count - 1; - else - This->filetypeindex = iFileType; + iFileType = max(iFileType, 1); + iFileType = min(iFileType, This->filterspec_count); + This->filetypeindex = iFileType-1; return S_OK; } @@ -1895,7 +1894,10 @@ static HRESULT WINAPI IFileDialog2_fnGetFileTypeIndex(IFileDialog2 *iface, UINT if(!piFileType) return E_INVALIDARG; - *piFileType = This->filetypeindex; + if(This->filterspec_count == 0) + *piFileType = 0; + else + *piFileType = This->filetypeindex + 1; return S_OK; } diff --git a/dlls/comdlg32/tests/itemdlg.c b/dlls/comdlg32/tests/itemdlg.c index 5974362..b0b3d25 100644 --- a/dlls/comdlg32/tests/itemdlg.c +++ b/dlls/comdlg32/tests/itemdlg.c @@ -571,10 +571,21 @@ static void test_basics(void) ok(hr == S_OK, "got 0x%08x.\n", hr); hr = IFileOpenDialog_SetFileTypes(pfod, 0, filterspec); ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr); + hr = IFileOpenDialog_SetFileTypeIndex(pfod, -1); + ok(hr == S_OK, "got 0x%08x.\n", hr); + hr = IFileOpenDialog_GetFileTypeIndex(pfod, &filetype); + ok(hr == S_OK, "got 0x%08x.\n", hr); + ok(filetype == 1, "got %d\n", filetype); hr = IFileOpenDialog_SetFileTypeIndex(pfod, 0); ok(hr == S_OK, "got 0x%08x.\n", hr); + hr = IFileOpenDialog_GetFileTypeIndex(pfod, &filetype); + ok(hr == S_OK, "got 0x%08x.\n", hr); + ok(filetype == 1, "got %d\n", filetype); hr = IFileOpenDialog_SetFileTypeIndex(pfod, 100); ok(hr == S_OK, "got 0x%08x.\n", hr); + hr = IFileOpenDialog_GetFileTypeIndex(pfod, &filetype); + ok(hr == S_OK, "got 0x%08x.\n", hr); + ok(filetype == 1, "got %d\n", filetype); hr = IFileOpenDialog_SetFileTypes(pfod, 1, filterspec); ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr); hr = IFileOpenDialog_SetFileTypes(pfod, 1, &filterspec[1]); @@ -586,12 +597,22 @@ static void test_basics(void) ok(hr == E_FAIL, "got 0x%08x.\n", hr); hr = IFileSaveDialog_SetFileTypeIndex(pfsd, 1); ok(hr == E_FAIL, "got 0x%08x.\n", hr); - hr = IFileSaveDialog_SetFileTypes(pfsd, 1, filterspec); + hr = IFileSaveDialog_SetFileTypes(pfsd, 2, filterspec); + ok(hr == S_OK, "got 0x%08x.\n", hr); + hr = IFileSaveDialog_GetFileTypeIndex(pfsd, &filetype); ok(hr == S_OK, "got 0x%08x.\n", hr); + /* I hope noone relies on this one */ + todo_wine ok(filetype == 0, "got %d\n", filetype); hr = IFileSaveDialog_SetFileTypeIndex(pfsd, 0); ok(hr == S_OK, "got 0x%08x.\n", hr); + hr = IFileSaveDialog_GetFileTypeIndex(pfsd, &filetype); + ok(hr == S_OK, "got 0x%08x.\n", hr); + ok(filetype == 1, "got %d\n", filetype); hr = IFileSaveDialog_SetFileTypeIndex(pfsd, 100); ok(hr == S_OK, "got 0x%08x.\n", hr); + hr = IFileSaveDialog_GetFileTypeIndex(pfsd, &filetype); + ok(hr == S_OK, "got 0x%08x.\n", hr); + ok(filetype == 2, "got %d\n", filetype); hr = IFileSaveDialog_SetFileTypes(pfsd, 1, filterspec); ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr); hr = IFileSaveDialog_SetFileTypes(pfsd, 1, &filterspec[1]); -- 1.9.1