From: Julian Smart Date: Thu, 24 Sep 2009 20:36:46 +0000 (+0000) Subject: Applied #10917: wxGTK wxFileDialog::SetDirectory and ::SetFilename problems X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/02a40b8af9ab429d6dbf614dceeeac3004e2f12c Applied #10917: wxGTK wxFileDialog::SetDirectory and ::SetFilename problems git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62101 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/interface/wx/filedlg.h b/interface/wx/filedlg.h index 57f09528c3..0f00fff0c5 100644 --- a/interface/wx/filedlg.h +++ b/interface/wx/filedlg.h @@ -197,6 +197,8 @@ public: /** Sets the default filename. + + In wxGTK this will have little effect unless a default directory has previously been set. */ virtual void SetFilename(const wxString& setfilename); diff --git a/src/gtk/filedlg.cpp b/src/gtk/filedlg.cpp index ff7541c6b7..b1d189e564 100644 --- a/src/gtk/filedlg.cpp +++ b/src/gtk/filedlg.cpp @@ -369,30 +369,63 @@ void wxFileDialog::SetMessage(const wxString& message) void wxFileDialog::SetPath(const wxString& path) { + wxCHECK_RET(wxIsAbsolutePath(path), " wxFileDialog::SetPath requires an absolute filepath"); m_fc.SetPath( path ); } void wxFileDialog::SetDirectory(const wxString& dir) { - m_fc.SetDirectory( dir ); + if (m_fc.SetDirectory( dir )) + { + // Cache the dir, as gtk_file_chooser_get_current_folder() + // doesn't return anything until the dialog has been shown + m_dir = dir; + } } wxString wxFileDialog::GetDirectory() const { - return m_fc.GetDirectory(); + wxString currentDir( m_fc.GetDirectory() ); + if (currentDir.empty()) + { + // m_fc.GetDirectory() will return empty until the dialog has been shown + // in which case use any previously provided value + currentDir = m_dir; + } + return currentDir; } void wxFileDialog::SetFilename(const wxString& name) { if (HasFdFlag(wxFD_SAVE)) + { gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(m_widget), wxGTK_CONV(name)); + m_fileName = name; + } + else - SetPath(wxFileName(GetDirectory(), name).GetFullPath()); + { + wxString path( GetDirectory() ); + if (path.empty()) + { + // SetPath() fires an assert if fed other than filepaths + return; + } + SetPath(wxFileName(path, name).GetFullPath()); + m_fileName = name; + } } wxString wxFileDialog::GetFilename() const { - return m_fc.GetFilename(); + wxString currentFilename( m_fc.GetFilename() ); + if (currentFilename.empty()) + { + // m_fc.GetFilename() will return empty until the dialog has been shown + // in which case use any previously provided value + currentFilename = m_fileName; + } + return currentFilename; } void wxFileDialog::SetWildcard(const wxString& wildCard)