From 20380343684f83760933a77c826c2a371da5d375 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Fri, 29 Aug 2008 13:57:03 +0000 Subject: [PATCH] Fix #9917: File save dialog does not honor file extension on GTK git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55350 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/filectrl.h | 6 ++++++ src/gtk/filectrl.cpp | 8 ++++++++ src/gtk/filedlg.cpp | 16 +++++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/include/wx/gtk/filectrl.h b/include/wx/gtk/filectrl.h index d5a462ef81..e194bfc49f 100644 --- a/include/wx/gtk/filectrl.h +++ b/include/wx/gtk/filectrl.h @@ -48,8 +48,14 @@ public: void SetWildcard( const wxString& wildCard ); void SetFilterIndex( int filterIndex ); + wxString GetCurrentWildCard() const + { return m_wildcards[GetFilterIndex()]; } + private: GtkFileChooser *m_widget; + // First wildcard in filter, to be used when the user + // saves a file without giving an extension. + wxArrayString m_wildcards; }; #if wxUSE_FILECTRL diff --git a/src/gtk/filectrl.cpp b/src/gtk/filectrl.cpp index dace1751e7..d4ff4dcdf9 100644 --- a/src/gtk/filectrl.cpp +++ b/src/gtk/filectrl.cpp @@ -111,6 +111,8 @@ wxString wxGtkFileChooser::GetFilename() const void wxGtkFileChooser::SetWildcard( const wxString& wildCard ) { + m_wildcards.Empty(); + // parse filters wxArrayString wildDescriptions, wildFilters; @@ -144,10 +146,16 @@ void wxGtkFileChooser::SetWildcard( const wxString& wildCard ) gtk_file_filter_set_name( filter, wxGTK_CONV_SYS( wildDescriptions[n] ) ); wxStringTokenizer exttok( wildFilters[n], wxT( ";" ) ); + + int n = 1; while ( exttok.HasMoreTokens() ) { wxString token = exttok.GetNextToken(); gtk_file_filter_add_pattern( filter, wxGTK_CONV_SYS( token ) ); + + if (n == 1) + m_wildcards.Add( token ); // Only add first pattern to list, used later when saving + n++; } gtk_file_chooser_add_filter( chooser, filter ); diff --git a/src/gtk/filedlg.cpp b/src/gtk/filedlg.cpp index e8906dfd4f..a472332a8b 100644 --- a/src/gtk/filedlg.cpp +++ b/src/gtk/filedlg.cpp @@ -335,7 +335,21 @@ void wxFileDialog::OnSize(wxSizeEvent&) wxString wxFileDialog::GetPath() const { - return m_fc.GetPath(); + wxFileName fn = m_fc.GetPath(); + + if (HasFdFlag(wxFD_SAVE)) + { + // add extension + if (!fn.HasExt()) + { + wxFileName wildcard( "/dummy", m_fc.GetCurrentWildCard() ); + wxString ext = wildcard.GetExt(); + if (!ext.empty() && (ext.Find('?') == wxNOT_FOUND) && (ext.Find('*') == wxNOT_FOUND)) + fn.SetExt( ext ); + } + } + + return fn.GetFullPath(); } void wxFileDialog::GetFilenames(wxArrayString& files) const -- 2.45.2