const wxSize& size = wxDefaultSize,
const wxString& name = wxDirDialogNameStr);
- virtual ~wxDirDialogGTK();
+ virtual ~wxDirDialogGTK() {}
public: // overrides from wxGenericDirDialog
virtual bool Show( bool show = true );
-//private: must be accessible by GTK callback
- bool m_destroyed_by_delete;
-
protected:
// override this from wxTLW since the native
// form doesn't have any m_wxwindow
long style = 0,
const wxPoint& pos = wxDefaultPosition);
- virtual ~wxFileDialog();
+ virtual ~wxFileDialog() {}
virtual wxString GetPath() const;
virtual void GetPaths(wxArrayString& paths) const;
virtual int ShowModal();
virtual bool Show( bool show = true );
-//private:
- bool m_destroyed_by_delete;
+
protected:
// override this from wxTLW since the native
if (response == GTK_RESPONSE_ACCEPT)
gtk_dirdialog_ok_callback(w, dialog);
- else if (response == GTK_RESPONSE_CANCEL)
+ else // GTK_RESPONSE_CANCEL or GTK_RESPONSE_NONE
gtk_dirdialog_cancel_callback(w, dialog);
- else // "delete"
- {
- gtk_dirdialog_cancel_callback(w, dialog);
- dialog->m_destroyed_by_delete = true;
- }
}
}
{
m_message = title;
m_needParent = false;
- m_destroyed_by_delete = false;
if (!PreCreation(parent, pos, wxDefaultSize) ||
!CreateBase(parent, wxID_ANY, pos, wxDefaultSize, style,
gtk_dialog_set_default_response(GTK_DIALOG(m_widget), GTK_RESPONSE_ACCEPT);
+ // gtk_widget_hide_on_delete is used here to avoid that Gtk automatically destroys
+ // the dialog when the user press ESC on the dialog: in that case a second call to
+ // ShowModal() would result in a bunch of Gtk-CRITICAL errors...
+ g_signal_connect (G_OBJECT(m_widget),
+ "delete_event",
+ G_CALLBACK (gtk_widget_hide_on_delete),
+ (gpointer)this);
+
// local-only property could be set to false to allow non-local files to be loaded.
// In that case get/set_uri(s) should be used instead of get/set_filename(s) everywhere
// and the GtkFileChooserDialog should probably also be created with a backend,
wxGenericDirDialog::Create(parent, title, defaultPath, style, pos, sz, name);
}
-wxDirDialogGTK::~wxDirDialogGTK()
-{
-#ifdef __WXGTK24__
- if (!gtk_check_version(2,4,0))
- {
- if (m_destroyed_by_delete)
- m_widget = NULL;
- }
-#endif
-}
-
void wxDirDialogGTK::OnFakeOk( wxCommandEvent &event )
{
#ifdef __WXGTK24__
//-----------------------------------------------------------------------------
extern "C" {
-static void gtk_filedialog_cancel_callback(GtkWidget *WXUNUSED(w),
- wxFileDialog *dialog)
+static void gtk_filedialog_cancel_callback(GtkWidget *w, wxFileDialog *dialog)
{
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
event.SetEventObject(dialog);
if (response == GTK_RESPONSE_ACCEPT)
gtk_filedialog_ok_callback(w, dialog);
- else if (response == GTK_RESPONSE_CANCEL)
+ else // GTK_RESPONSE_CANCEL or GTK_RESPONSE_NONE
gtk_filedialog_cancel_callback(w, dialog);
- else // "delete"
- {
- gtk_filedialog_cancel_callback(w, dialog);
- dialog->m_destroyed_by_delete = true;
- }
}
}
{
wxASSERT_MSG( !( (style & wxSAVE) && (style & wxMULTIPLE) ), wxT("wxFileDialog - wxMULTIPLE used on a save dialog" ) );
m_needParent = false;
- m_destroyed_by_delete = false;
if (!PreCreation(parent, pos, wxDefaultSize) ||
!CreateBase(parent, wxID_ANY, pos, wxDefaultSize, style,
if ( style & wxMULTIPLE )
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(m_widget), true);
+ // gtk_widget_hide_on_delete is used here to avoid that Gtk automatically destroys
+ // the dialog when the user press ESC on the dialog: in that case a second call to
+ // ShowModal() would result in a bunch of Gtk-CRITICAL errors...
+ g_signal_connect (G_OBJECT(m_widget),
+ "delete_event",
+ G_CALLBACK (gtk_widget_hide_on_delete),
+ (gpointer)this);
+
// local-only property could be set to false to allow non-local files to be loaded.
// In that case get/set_uri(s) should be used instead of get/set_filename(s) everywhere
// and the GtkFileChooserDialog should probably also be created with a backend,
wxGenericFileDialog::Create( parent, message, defaultDir, defaultFileName, wildCard, style, pos );
}
-wxFileDialog::~wxFileDialog()
-{
-#ifdef __WXGTK24__
- if (!gtk_check_version(2,4,0))
- {
- if (m_destroyed_by_delete)
- m_widget = NULL;
- }
-#endif
-}
-
void wxFileDialog::OnFakeOk( wxCommandEvent &event )
{
#ifdef __WXGTK24__