]> git.saurik.com Git - wxWidgets.git/commitdiff
Simplify and correct setting of initial directory for wxFilePickerCtrl.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 9 Sep 2012 13:34:49 +0000 (13:34 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 9 Sep 2012 13:34:49 +0000 (13:34 +0000)
Create wxFileDialog with correct initial directory and default file name from
the very beginning instead of updating it later. This makes the code simpler
and also actually makes it work as the initial directory setting was
overwritten by setting the default path later even if it didn't contain any
directory component.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72451 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/filepickerg.h
src/generic/filepickerg.cpp
src/gtk/filepicker.cpp

index 203bd6e682af944e7652d7009bac6c422177c37c..9e18e495a2b2a02a7d973ff5a60b5104bc2b06ad 100644 (file)
@@ -156,10 +156,6 @@ protected:
     void UpdatePathFromDialog(wxDialog *p)
         { m_path = wxStaticCast(p, wxFileDialog)->GetPath(); }
 
-    // Set the initial directory for the dialog but without overriding the
-    // directory of the currently selected file, if any.
-    void DoSetInitialDirectory(wxFileDialog* dialog, const wxString& dir);
-
 private:
     DECLARE_DYNAMIC_CLASS(wxGenericFileButton)
 };
index 3d5b975a9a17a05c901515e6cfc0a97f834a6191..a33a965db0f52f103185f7989731e33adfd994cc 100644 (file)
@@ -113,46 +113,28 @@ void wxGenericFileDirButton::SetInitialDirectory(const wxString& dir)
 }
 
 // ----------------------------------------------------------------------------
-// wxGenericFileutton
+// wxGenericFileButton
 // ----------------------------------------------------------------------------
 
-void
-wxGenericFileButton::DoSetInitialDirectory(wxFileDialog* dialog,
-                                           const wxString& dir)
-{
-    if ( m_path.find_first_of(wxFileName::GetPathSeparators()) ==
-            wxString::npos )
-    {
-        dialog->SetDirectory(dir);
-    }
-}
-
 wxDialog *wxGenericFileButton::CreateDialog()
 {
-    wxFileDialog* const dialog = new wxFileDialog
-                                     (
-                                        GetDialogParent(),
-                                        m_message,
-                                        wxEmptyString,
-                                        wxEmptyString,
-                                        m_wildcard,
-                                        GetDialogStyle()
-                                     );
-
-    // If there is no default file or if it doesn't have any path, use the
-    // explicitly set initial directory.
-    //
-    // Notice that it is important to call this before SetPath() below as if we
-    // do have m_initialDir and no directory in m_path, we need to interpret
-    // the path as being relative with respect to m_initialDir.
-    if ( !m_initialDir.empty() )
-        DoSetInitialDirectory(dialog, m_initialDir);
-
-    // This sets both the default file name and the default directory of the
-    // dialog if m_path contains directory part.
-    dialog->SetPath(m_path);
-
-    return dialog;
+    // Determine the initial directory for the dialog: it comes either from the
+    // default path, if it has it, or from the separately specified initial
+    // directory that can be set even if the path is e.g. empty.
+    wxFileName fn(m_path);
+    wxString initialDir = fn.GetPath();
+    if ( initialDir.empty() )
+        initialDir = m_initialDir;
+
+    return new wxFileDialog
+               (
+                    GetDialogParent(),
+                    m_message,
+                    initialDir,
+                    fn.GetFullName(),
+                    m_wildcard,
+                    GetDialogStyle()
+               );
 }
 
 // ----------------------------------------------------------------------------
index 213b1e1a8eb2f2015acb9d168a5f2d728b1bfe37..f93d3428f29658c09f992daa7543b077aea3d813 100644 (file)
@@ -131,7 +131,15 @@ void wxFileButton::SetPath(const wxString &str)
 void wxFileButton::SetInitialDirectory(const wxString& dir)
 {
     if (m_dialog)
-        DoSetInitialDirectory(static_cast<wxFileDialog*>(m_dialog), dir);
+    {
+        // Only change the directory if the default file name doesn't have any
+        // directory in it, otherwise it takes precedence.
+        if ( m_path.find_first_of(wxFileName::GetPathSeparators()) ==
+                wxString::npos )
+        {
+            static_cast<wxFileDialog*>(m_dialog)->SetDirectory(dir);
+        }
+    }
     else
         wxGenericFileButton::SetInitialDirectory(dir);
 }