]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/filedlg.cpp
Fix checking for GTK+ 3.0 in configure.
[wxWidgets.git] / src / msw / filedlg.cpp
index 27dfd888e5c4f4da3e17ee7bc5a3c78eca3f2da8..fd71dc6b9c81a3d1088f2a2dcee775801b28ed62 100644 (file)
@@ -47,7 +47,7 @@
 #include "wx/filename.h"
 #include "wx/scopeguard.h"
 #include "wx/tokenzr.h"
-#include "wx/testing.h"
+#include "wx/modalhook.h"
 
 // ----------------------------------------------------------------------------
 // constants
@@ -173,13 +173,23 @@ wxFileDialogHookFunction(HWND      hDlg,
 
         case WM_NOTIFY:
             {
-                OFNOTIFY *pNotifyCode = reinterpret_cast<OFNOTIFY *>(lParam);
-                if ( pNotifyCode->hdr.code == CDN_INITDONE )
+                OFNOTIFY* const
+                    pNotifyCode = reinterpret_cast<OFNOTIFY *>(lParam);
+                wxFileDialog* const
+                    dialog = reinterpret_cast<wxFileDialog *>(
+                                    pNotifyCode->lpOFN->lCustData
+                                );
+
+                switch ( pNotifyCode->hdr.code )
                 {
-                    reinterpret_cast<wxFileDialog *>(
-                                        pNotifyCode->lpOFN->lCustData)
-                        ->MSWOnInitDone((WXHWND)hDlg);
-                 }
+                    case CDN_INITDONE:
+                        dialog->MSWOnInitDone((WXHWND)hDlg);
+                        break;
+
+                    case CDN_SELCHANGE:
+                        dialog->MSWOnSelChange((WXHWND)hDlg);
+                        break;
+                }
             }
             break;
 
@@ -323,10 +333,29 @@ void wxFileDialog::MSWOnInitDone(WXHWND hDlg)
         SetPosition(gs_rectDialog.GetPosition());
     }
 
+    // Call selection change handler so that update handler will be
+    // called once with no selection.
+    MSWOnSelChange(hDlg);
+
     // we shouldn't destroy this HWND
     SetHWND(NULL);
 }
 
+void wxFileDialog::MSWOnSelChange(WXHWND hDlg)
+{
+    TCHAR buf[MAX_PATH];
+    LRESULT len = SendMessage(::GetParent(hDlg), CDM_GETFILEPATH,
+                              MAX_PATH, reinterpret_cast<LPARAM>(buf));
+
+    if ( len > 0 )
+        m_currentlySelectedFilename = buf;
+    else
+        m_currentlySelectedFilename.clear();
+
+    if ( m_extraControl )
+        m_extraControl->UpdateWindowUI(wxUPDATE_UI_RECURSE);
+}
+
 // helper used below in ShowCommFileDialog(): style is used to determine
 // whether to show the "Save file" dialog (if it contains wxFD_SAVE bit) or
 // "Open file" one; returns true on success or false on failure in which case
@@ -450,7 +479,7 @@ void wxFileDialog::MSWOnInitDialogHook(WXHWND hwnd)
 
 int wxFileDialog::ShowModal()
 {
-    WX_TESTING_SHOW_MODAL_HOOK();
+    WX_HOOK_MODAL_DIALOG();
 
     HWND hWnd = 0;
     if (m_parent) hWnd = (HWND) m_parent->GetHWND();