X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f2448f2110fd0fd0c71609da726e76e740f2a25e..04236b74cd5c82645aff3c99736291ebe2f52cc5:/src/gtk/filedlg.cpp?ds=sidebyside diff --git a/src/gtk/filedlg.cpp b/src/gtk/filedlg.cpp index 6260b33b8e..d7a2d8a57e 100644 --- a/src/gtk/filedlg.cpp +++ b/src/gtk/filedlg.cpp @@ -145,12 +145,12 @@ static void extra_widget_size_request(GtkWidget*, GtkRequisition* req, wxWindow* } } -static void wxInsertChildInFileDialog(wxWindow* parent, wxWindow* child) +void wxFileDialog::AddChildGTK(wxWindowGTK* child) { g_signal_connect_after(child->m_widget, "size_request", G_CALLBACK(extra_widget_size_request), child); gtk_file_chooser_set_extra_widget( - GTK_FILE_CHOOSER(parent->m_widget), child->m_widget); + GTK_FILE_CHOOSER(m_widget), child->m_widget); } //----------------------------------------------------------------------------- @@ -173,7 +173,6 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, const wxString& name) : wxFileDialogBase() { - m_insertCallback = wxInsertChildInFileDialog; parent = GetParentForModalDialog(parent); if (!wxFileDialogBase::Create(parent, message, defaultDir, defaultFileName, @@ -214,6 +213,7 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, ok_btn_stock, GTK_RESPONSE_ACCEPT, NULL); + g_object_ref(m_widget); GtkFileChooser* file_chooser = GTK_FILE_CHOOSER(m_widget); m_fc.SetWidget(file_chooser); @@ -297,6 +297,17 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, } } +wxFileDialog::~wxFileDialog() +{ + if (m_extraControl) + { + // get chooser to drop its reference right now, allowing wxWindow dtor + // to verify that ref count drops to zero + gtk_file_chooser_set_extra_widget( + GTK_FILE_CHOOSER(m_widget), NULL); + } +} + void wxFileDialog::OnFakeOk(wxCommandEvent& WXUNUSED(event)) { EndDialog(wxID_OK); @@ -323,7 +334,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