X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/268331f0db16ca664a591357e10438500b87ee20..6ed612f498a5e1cef8867d8a49d84499b1dd3145:/src/gtk/filedlg.cpp diff --git a/src/gtk/filedlg.cpp b/src/gtk/filedlg.cpp index a2f0712854..6d36d6364e 100644 --- a/src/gtk/filedlg.cpp +++ b/src/gtk/filedlg.cpp @@ -116,6 +116,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 +258,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 +268,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 +481,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