[PATCH 6/8] comdlg32: Improve handling of file extension changes in the Item Dialog.

David Hedberg david.hedberg at gmail.com
Tue May 24 14:09:51 CDT 2011


---
 dlls/comdlg32/itemdlg.c |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/dlls/comdlg32/itemdlg.c b/dlls/comdlg32/itemdlg.c
index 80b0d86..11db9c9 100644
--- a/dlls/comdlg32/itemdlg.c
+++ b/dlls/comdlg32/itemdlg.c
@@ -872,16 +872,39 @@ static LRESULT on_command_filetype(FileDialogImpl *This, WPARAM wparam, LPARAM l
     {
         IShellView *psv;
         HRESULT hr;
+        LPWSTR filename;
+        UINT prev_index = This->filetypeindex;
 
         This->filetypeindex = SendMessageW((HWND)lparam, CB_GETCURSEL, 0, 0);
         TRACE("File type selection changed to %d.\n", This->filetypeindex);
 
+        if(prev_index == This->filetypeindex)
+            return FALSE;
+
         hr = IExplorerBrowser_GetCurrentView(This->peb, &IID_IShellView, (void**)&psv);
         if(SUCCEEDED(hr))
         {
             IShellView_Refresh(psv);
             IShellView_Release(psv);
         }
+
+        if(This->dlg_type == ITEMDLG_TYPE_SAVE && get_file_name(This, &filename))
+        {
+            WCHAR buf[MAX_PATH], extbuf[MAX_PATH], *ext;
+
+            ext = get_first_ext_from_spec(extbuf, This->filterspecs[This->filetypeindex].pszSpec);
+            if(ext)
+            {
+                lstrcpyW(buf, filename);
+
+                if(PathMatchSpecW(buf, This->filterspecs[prev_index].pszSpec))
+                    PathRemoveExtensionW(buf);
+
+                lstrcatW(buf, ext);
+                set_file_name(This, buf);
+            }
+            CoTaskMemFree(filename);
+        }
     }
 
     return FALSE;
-- 
1.7.5.rc3




More information about the wine-patches mailing list