From 06a419244f6c8b84ddccd2f49c9af942fe1602f0 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 9 Sep 2012 13:34:49 +0000 Subject: [PATCH] Simplify and correct setting of initial directory for wxFilePickerCtrl. 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 | 4 --- src/generic/filepickerg.cpp | 54 +++++++++++--------------------- src/gtk/filepicker.cpp | 10 +++++- 3 files changed, 27 insertions(+), 41 deletions(-) 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() - ); - - // 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() + ); } // ---------------------------------------------------------------------------- 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); } -- 2.47.2