]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/filedlg.cpp
don't leak memory if exceptions are thrown during a new wxDocument creation
[wxWidgets.git] / src / gtk / filedlg.cpp
index e8906dfd4feab3be5e413f36ad8c770df496c39f..d7a2d8a57e663aeaf1d48044df60b2f4de0e56f9 100644 (file)
@@ -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,
@@ -335,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