+#include "wx/modalhook.h"
+
+//-----------------------------------------------------------------------------
+// "clicked" for OK-button
+//-----------------------------------------------------------------------------
+
+extern "C" {
+static void gtk_filedialog_ok_callback(GtkWidget *widget, wxFileDialog *dialog)
+{
+ int style = dialog->GetWindowStyle();
+ wxGtkString filename(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)));
+
+ // gtk version numbers must be identical with the one in ctor (that calls set_do_overwrite_confirmation)
+#ifndef __WXGTK3__
+#if GTK_CHECK_VERSION(2,7,3)
+ if (gtk_check_version(2, 7, 3) != NULL)
+#endif
+ {
+ if ((style & wxFD_SAVE) && (style & wxFD_OVERWRITE_PROMPT))
+ {
+ if ( g_file_test(filename, G_FILE_TEST_EXISTS) )
+ {
+ wxString msg;
+
+ msg.Printf(
+ _("File '%s' already exists, do you really want to overwrite it?"),
+ wxString::FromUTF8(filename));
+
+ wxMessageDialog dlg(dialog, msg, _("Confirm"),
+ wxYES_NO | wxICON_QUESTION);
+ if (dlg.ShowModal() != wxID_YES)
+ return;
+ }
+ }
+ }
+#endif
+
+ if (style & wxFD_FILE_MUST_EXIST)
+ {
+ if ( !g_file_test(filename, G_FILE_TEST_EXISTS) )
+ {
+ wxMessageDialog dlg( dialog, _("Please choose an existing file."),
+ _("Error"), wxOK| wxICON_ERROR);
+ dlg.ShowModal();
+ return;
+ }
+ }
+
+ // change to the directory where the user went if asked
+ if (style & wxFD_CHANGE_DIR)
+ {
+ // Use chdir to not care about filename encodings
+ wxGtkString folder(g_path_get_dirname(filename));
+ chdir(folder);
+ }
+
+ wxCommandEvent event(wxEVT_BUTTON, wxID_OK);
+ event.SetEventObject(dialog);
+ dialog->HandleWindowEvent(event);
+}
+}
+
+//-----------------------------------------------------------------------------
+// "clicked" for Cancel-button
+//-----------------------------------------------------------------------------