X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/268331f0db16ca664a591357e10438500b87ee20..d9dd0c95df369be61d3dfa9314e87b589e50526a:/src/gtk/filedlg.cpp diff --git a/src/gtk/filedlg.cpp b/src/gtk/filedlg.cpp index a2f0712854..ce41843b03 100644 --- a/src/gtk/filedlg.cpp +++ b/src/gtk/filedlg.cpp @@ -2,7 +2,6 @@ // Name: src/gtk/filedlg.cpp // Purpose: native implementation of wxFileDialog // Author: Robert Roebling, Zbigniew Zagorski, Mart Raudsepp -// Id: $Id$ // Copyright: (c) 1998 Robert Roebling, 2004 Zbigniew Zagorski, 2005 Mart Raudsepp // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -116,6 +115,15 @@ static void gtk_filedialog_response_callback(GtkWidget *w, gtk_filedialog_cancel_callback(w, dialog); } +static void gtk_filedialog_selchanged_callback(GtkFileChooser *chooser, + wxFileDialog *dialog) +{ + wxGtkString filename(gtk_file_chooser_get_preview_filename(chooser)); + + dialog->GTKSelectionChanged(wxString::FromUTF8(filename)); +} + + static void gtk_filedialog_update_preview_callback(GtkFileChooser *chooser, gpointer user_data) { @@ -249,6 +257,8 @@ bool wxFileDialog::Create(wxWindow *parent, const wxString& message, g_signal_connect (m_widget, "response", G_CALLBACK (gtk_filedialog_response_callback), this); + g_signal_connect (m_widget, "selection-changed", + G_CALLBACK (gtk_filedialog_selchanged_callback), this); // deal with extensions/filters SetWildcard(wildCard); @@ -257,11 +267,18 @@ bool wxFileDialog::Create(wxWindow *parent, const wxString& message, if ( !wildCard.empty() && !defaultFileName.empty() && !wxFileName(defaultFileName).HasExt() ) { - // append the default extension to the initial file name: GTK won't do - // it for us by default (unlike e.g. MSW) - const wxString defaultExt = m_fc.GetCurrentWildCard().AfterFirst('.'); - if ( defaultExt.find_first_of("?*") == wxString::npos ) - defaultFileNameWithExt += "." + defaultExt; + // append the default extension, if any, to the initial file name: GTK + // won't do it for us by default (unlike e.g. MSW) + const wxFileName fnWC(m_fc.GetCurrentWildCard()); + if ( fnWC.HasExt() ) + { + // Notice that we shouldn't append the extension if it's a wildcard + // because this is not useful: the user would need to change it to use + // some fixed extension anyhow. + const wxString& ext = fnWC.GetExt(); + if ( ext.find_first_of("?*") == wxString::npos ) + defaultFileNameWithExt << "." << ext; + } } @@ -463,4 +480,12 @@ int wxFileDialog::GetFilterIndex() const return m_fc.GetFilterIndex(); } +void wxFileDialog::GTKSelectionChanged(const wxString& filename) +{ + m_currentlySelectedFilename = filename; + + if (m_extraControl) + m_extraControl->UpdateWindowUI(wxUPDATE_UI_RECURSE); +} + #endif // wxUSE_FILEDLG