+
+ wxString defaultFileNameWithExt = defaultFileName;
+ 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;
+ }
+
+
+ // if defaultDir is specified it should contain the directory and
+ // defaultFileName should contain the default name of the file, however if
+ // directory is not given, defaultFileName contains both
+ wxFileName fn;
+ if ( defaultDir.empty() )
+ fn.Assign(defaultFileNameWithExt);
+ else if ( !defaultFileNameWithExt.empty() )
+ fn.Assign(defaultDir, defaultFileNameWithExt);
+ else
+ fn.AssignDir(defaultDir);
+
+ // set the initial file name and/or directory
+ fn.MakeAbsolute(); // GTK+ needs absolute path
+ const wxString dir = fn.GetPath();
+ if ( !dir.empty() )
+ {
+ gtk_file_chooser_set_current_folder(file_chooser, wxGTK_CONV_FN(dir));
+ }
+
+ const wxString fname = fn.GetFullName();
+ if ( style & wxFD_SAVE )
+ {
+ if ( !fname.empty() )
+ {
+ gtk_file_chooser_set_current_name(file_chooser, wxGTK_CONV_FN(fname));
+ }
+
+#if GTK_CHECK_VERSION(2,7,3)
+ if ((style & wxFD_OVERWRITE_PROMPT)
+#ifndef __WXGTK3__
+ && gtk_check_version(2,7,3) == NULL
+#endif
+ )
+ {
+ gtk_file_chooser_set_do_overwrite_confirmation(file_chooser, true);
+ }
+#endif
+ }
+ else // wxFD_OPEN
+ {
+ if ( !fname.empty() )
+ {
+ gtk_file_chooser_set_filename(file_chooser,
+ wxGTK_CONV_FN(fn.GetFullPath()));
+ }
+ }
+
+ if ( style & wxFD_PREVIEW )
+ {
+ GtkWidget *previewImage = gtk_image_new();
+
+ gtk_file_chooser_set_preview_widget(file_chooser, previewImage);
+ g_signal_connect(m_widget, "update-preview",
+ G_CALLBACK(gtk_filedialog_update_preview_callback),
+ previewImage);
+ }
+
+ return true;