diff --git a/include/wx/generic/filepickerg.h b/include/wx/generic/filepickerg.h index 203bd6e682..9e18e495a2 100644 --- a/include/wx/generic/filepickerg.h +++ b/include/wx/generic/filepickerg.h @@ -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) }; diff --git a/src/generic/filepickerg.cpp b/src/generic/filepickerg.cpp index 3d5b975a9a..a33a965db0 100644 --- a/src/generic/filepickerg.cpp +++ b/src/generic/filepickerg.cpp @@ -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() - ); + // 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; - // 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; + return new wxFileDialog + ( + GetDialogParent(), + m_message, + initialDir, + fn.GetFullName(), + m_wildcard, + GetDialogStyle() + ); } // ---------------------------------------------------------------------------- diff --git a/src/gtk/filepicker.cpp b/src/gtk/filepicker.cpp index 213b1e1a8e..f93d3428f2 100644 --- a/src/gtk/filepicker.cpp +++ b/src/gtk/filepicker.cpp @@ -131,7 +131,15 @@ void wxFileButton::SetPath(const wxString &str) void wxFileButton::SetInitialDirectory(const wxString& dir) { if (m_dialog) - DoSetInitialDirectory(static_cast(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(m_dialog)->SetDirectory(dir); + } + } else wxGenericFileButton::SetInitialDirectory(dir); }