]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/filedlg.cpp
make sure theme font info is reset if anything is changed
[wxWidgets.git] / src / gtk / filedlg.cpp
index 6260b33b8e265bb0eeb5a9b8565d42ea38a17abd..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,
@@ -214,6 +213,7 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message,
                    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                    ok_btn_stock, GTK_RESPONSE_ACCEPT,
                    NULL);
+    g_object_ref(m_widget);
     GtkFileChooser* file_chooser = GTK_FILE_CHOOSER(m_widget);
 
     m_fc.SetWidget(file_chooser);
@@ -297,6 +297,17 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message,
     }
 }
 
+wxFileDialog::~wxFileDialog()
+{
+    if (m_extraControl)
+    {
+        // get chooser to drop its reference right now, allowing wxWindow dtor
+        // to verify that ref count drops to zero
+        gtk_file_chooser_set_extra_widget(
+            GTK_FILE_CHOOSER(m_widget), NULL);
+    }
+}
+
 void wxFileDialog::OnFakeOk(wxCommandEvent& WXUNUSED(event))
 {
     EndDialog(wxID_OK);
@@ -323,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