diff --git a/src/gtk/filepicker.cpp b/src/gtk/filepicker.cpp index 104d7d5d92..bebcf84931 100644 --- a/src/gtk/filepicker.cpp +++ b/src/gtk/filepicker.cpp @@ -103,7 +103,18 @@ bool wxFileButton::Create( wxWindow *parent, wxWindowID id, wxFileButton::~wxFileButton() { - delete m_dialog; + if ( m_dialog ) + { + // We need to delete the C++ dialog object here but we shouldn't delete + // its widget which is used by our GtkFileChooserButton and will be + // deleted by it when it is itself destroyed in our base class dtor. So + // take the widget ownership away from the dialog to avoid GTK+ errors + // that would happen if GtkFileChooserButton tried to access the + // already destroyed dialog widget. + g_object_unref(m_dialog->m_widget); + m_dialog->m_widget = NULL; + delete m_dialog; + } } void wxFileButton::OnDialogOK(wxCommandEvent& ev)