]> git.saurik.com Git - wxWidgets.git/commitdiff
Trying to commit wxDirDialog patch.
authorRobert Roebling <robert@roebling.de>
Sun, 30 Apr 2006 09:44:29 +0000 (09:44 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 30 Apr 2006 09:44:29 +0000 (09:44 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38956 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/cocoa/dirdlg.h
include/wx/dirdlg.h
include/wx/generic/dirdlgg.h
include/wx/gtk/dirdlg.h [new file with mode: 0644]
include/wx/mac/carbon/dirdlg.h
include/wx/mac/classic/dirdlg.h
include/wx/msw/dirdlg.h
include/wx/os2/dirdlg.h
include/wx/palmos/dirdlg.h
src/generic/dirdlgg.cpp
src/gtk/dirdlg.cpp [new file with mode: 0644]

index a850bafa2d0df7724694fb5490f1eed9e5d23300..6b74ed026f24c9433d2e95774677988991c34b5f 100644 (file)
@@ -19,7 +19,7 @@ DECLARE_WXCOCOA_OBJC_CLASS(NSSavePanel);
 // wxDirDialog
 //-------------------------------------------------------------------------
 
-class WXDLLEXPORT wxDirDialog: public wxDialog
+class WXDLLEXPORT wxDirDialog: public wxDirDialogBase
 {
     DECLARE_DYNAMIC_CLASS(wxDirDialog)
     DECLARE_NO_COPY_CLASS(wxDirDialog)
@@ -33,8 +33,6 @@ public:
                 const wxString& name = wxDirDialogNameStr);
     ~wxDirDialog();
 
-    wxString GetMessage() const { return m_message; }
-    wxString GetPath() const { return m_path; }
     long GetStyle() const { return m_dialogStyle; }
 
     virtual int ShowModal();
@@ -43,11 +41,9 @@ public:
     {   return (WX_NSSavePanel)m_cocoaNSWindow; }
 
 protected:
-    wxString    m_message;
     long        m_dialogStyle;
     wxString    m_dir;
     wxWindow *  m_parent;
-    wxString    m_path;
     wxString    m_fileName;
 
 private:
index 2afab201592a1edd9db89fa692e69e2d7b3220a3..7a849a713a657bfe4ff02773131fdb560adaff6c 100644 (file)
@@ -33,31 +33,38 @@ extern WXDLLEXPORT_DATA(const wxChar) wxDirSelectorPromptStr[];
         (wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxDD_NEW_DIR_BUTTON)
 #endif
 
-/*
-    The interface (TODO: make the other classes really derive from it!) is
-    something like this:
+//-------------------------------------------------------------------------
+// wxDirDialogBase
+//-------------------------------------------------------------------------
 
 class WXDLLEXPORT wxDirDialogBase : public wxDialog
 {
 public:
     wxDirDialogBase(wxWindow *parent,
-                    const wxString& title = wxFileSelectorPromptStr,
+                    const wxString& title = wxDirSelectorPromptStr,
                     const wxString& defaultPath = wxEmptyString,
                     long style = wxDD_DEFAULT_STYLE,
                     const wxPoint& pos = wxDefaultPosition,
                     const wxSize& sz = wxDefaultSize,
-                    const wxString& name = _T("dirdialog"));
+                    const wxString& name = wxDirDialogNameStr)
+        : wxDialog(parent, wxID_ANY, title, pos, sz, style, name) {}
+    wxDirDialogBase() {}
 
-    void SetMessage(const wxString& message);
-    void SetPath(const wxString& path);
-    void SetStyle(long style);
+    virtual ~wxDirDialogBase() {}
 
-    wxString GetMessage() const;
-    wxString GetPath() const;
-    long GetStyle() const;
+    virtual void SetMessage(const wxString& message) { m_message = message; }
+    virtual void SetPath(const wxString& path) { m_path = path; }
+    virtual void SetStyle(long style) { SetWindowStyle(style); }
+
+    virtual wxString GetMessage() const { return m_message; }
+    virtual wxString GetPath() const { return m_path; }
+    virtual long GetStyle() const { return GetWindowStyle(); }
+
+protected:
+    wxString m_message;
+    wxString m_path;
 };
 
-*/
 
 // Universal and non-port related switches with need for generic implementation
 #if defined(__WXMSW__) && (defined(__WXUNIVERSAL__) || \
@@ -79,6 +86,12 @@ public:
 
     #include "wx/msw/dirdlg.h"
 
+// Native GTK
+#elif defined(__WXGTK__)
+
+    #include "wx/gtk/dirdlg.h"
+    #define wxDirDialog wxDirDialogGTK
+
 // Native Mac
 #elif defined(__WXMAC__)
 
@@ -91,7 +104,6 @@ public:
 
 // Other ports use generic implementation
 #elif defined(__WXMOTIF__) || \
-      defined(__WXGTK__)   || \
       defined(__WXX11__)   || \
       defined(__WXMGL__)   || \
       defined(__WXCOCOA__) || \
index 276f1299e1707c5df750e06520223556a9baa7c0..93dcac9bec3548ed486fe0d61e400e773b4f3ffd 100644 (file)
@@ -39,25 +39,31 @@ extern WXDLLEXPORT_DATA(const wxChar) wxDirSelectorPromptStr[];
 // wxGenericDirDialog
 //-----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxGenericDirDialog : public wxDialog
+class WXDLLEXPORT wxGenericDirDialog : public wxDirDialogBase
 {
 public:
-    wxGenericDirDialog() : wxDialog() { }
+    wxGenericDirDialog() : wxDirDialogBase() { }
 
     wxGenericDirDialog(wxWindow* parent,
                        const wxString& title = wxDirSelectorPromptStr,
                        const wxString& defaultPath = wxEmptyString,
                        long style = wxDD_DEFAULT_STYLE,
                        const wxPoint& pos = wxDefaultPosition,
-                       const wxSize& sz = wxSize(450, 550),
+                       const wxSize& sz = wxDefaultSize,//Size(450, 550),
+                       const wxString& name = wxDirDialogNameStr);
+
+    bool Create(wxWindow* parent,
+                const wxString& title = wxDirSelectorPromptStr,
+                const wxString& defaultPath = wxEmptyString,
+                long style = wxDD_DEFAULT_STYLE,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& sz = wxDefaultSize,//Size(450, 550),
                        const wxString& name = wxDirDialogNameStr);
 
     //// Accessors
-    void SetMessage(const wxString& message) { m_message = message; }
     void SetPath(const wxString& path);
     void SetStyle(long style) { m_dialogStyle = style; }
 
-    wxString GetMessage() const { return m_message; }
     wxString GetPath() const;
     long GetStyle() const { return m_dialogStyle; }
 
@@ -77,9 +83,7 @@ protected:
     void OnGoHome(wxCommandEvent& event);
     void OnShowHidden(wxCommandEvent& event);
 
-    wxString          m_message;
     long              m_dialogStyle;
-    wxString          m_path;
     wxGenericDirCtrl* m_dirCtrl;
     wxTextCtrl*       m_input;
 
diff --git a/include/wx/gtk/dirdlg.h b/include/wx/gtk/dirdlg.h
new file mode 100644 (file)
index 0000000..d044dee
--- /dev/null
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        dirdlg.h
+// Purpose:     wxDirDialogGTK
+// Author:      Francesco Montorsi
+// Id:          $Id$
+// Copyright:   (c) 2006 Francesco Montorsi
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef __GTKDIRDLGH__
+#define __GTKDIRDLGH__
+
+#include "wx/generic/dirdlgg.h"
+
+//-------------------------------------------------------------------------
+// wxDirDialogGTK
+//-------------------------------------------------------------------------
+
+class WXDLLIMPEXP_CORE wxDirDialogGTK : public wxGenericDirDialog
+{
+public:
+    wxDirDialogGTK() { }
+
+    wxDirDialogGTK(wxWindow *parent,
+                const wxString& message = wxDirSelectorPromptStr,
+                const wxString& defaultPath = _T(""),
+                long style = wxDD_DEFAULT_STYLE,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                const wxString& name = wxDirDialogNameStr);
+
+    virtual ~wxDirDialogGTK();
+
+
+public:     // overrides from wxGenericDirDialog
+
+    wxString GetPath() const;
+    void SetPath(const wxString& path);
+
+    virtual int ShowModal();
+    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
+    virtual void DoSetSize(int x, int y,
+                           int width, int height,
+                           int sizeFlags = wxSIZE_AUTO);
+
+
+private:
+    DECLARE_DYNAMIC_CLASS(wxDirDialogGTK)
+    DECLARE_EVENT_TABLE()
+    void OnFakeOk( wxCommandEvent &event );
+};
+
+#endif // __GTKDIRDLGH__
index 98f39ff9ad9942dfb49ec038f915d5fd5ac78252..1017750ea3d38d23a27107aeb4356b517afbbf55 100644 (file)
@@ -12,7 +12,7 @@
 #ifndef _WX_DIRDLG_H_
 #define _WX_DIRDLG_H_
 
-class WXDLLEXPORT wxDirDialog : public wxDialog
+class WXDLLEXPORT wxDirDialog : public wxDirDialogBase
 {
 public:
     wxDirDialog(wxWindow *parent,
@@ -23,21 +23,14 @@ public:
                 const wxSize& size = wxDefaultSize,
                 const wxString& name = wxDirDialogNameStr);
 
-    void SetMessage(const wxString& message) { m_message = message; }
-    void SetPath(const wxString& path) { m_path = path; }
     void SetStyle(long style) { m_dialogStyle = style; }
-
-    wxString GetMessage() const { return m_message; }
-    wxString GetPath() const { return m_path; }
     long GetStyle() const { return m_dialogStyle; }
 
     virtual int ShowModal();
 
 protected:
-    wxString    m_message;
     long        m_dialogStyle;
     wxWindow *  m_parent;
-    wxString    m_path;
 
     DECLARE_DYNAMIC_CLASS(wxDirDialog)
 };
index 98f39ff9ad9942dfb49ec038f915d5fd5ac78252..1017750ea3d38d23a27107aeb4356b517afbbf55 100644 (file)
@@ -12,7 +12,7 @@
 #ifndef _WX_DIRDLG_H_
 #define _WX_DIRDLG_H_
 
-class WXDLLEXPORT wxDirDialog : public wxDialog
+class WXDLLEXPORT wxDirDialog : public wxDirDialogBase
 {
 public:
     wxDirDialog(wxWindow *parent,
@@ -23,21 +23,14 @@ public:
                 const wxSize& size = wxDefaultSize,
                 const wxString& name = wxDirDialogNameStr);
 
-    void SetMessage(const wxString& message) { m_message = message; }
-    void SetPath(const wxString& path) { m_path = path; }
     void SetStyle(long style) { m_dialogStyle = style; }
-
-    wxString GetMessage() const { return m_message; }
-    wxString GetPath() const { return m_path; }
     long GetStyle() const { return m_dialogStyle; }
 
     virtual int ShowModal();
 
 protected:
-    wxString    m_message;
     long        m_dialogStyle;
     wxWindow *  m_parent;
-    wxString    m_path;
 
     DECLARE_DYNAMIC_CLASS(wxDirDialog)
 };
index 9800ab84f1101528aef58249c2000027c271ba69..23e416fe2ec8cdd8163f5f3a7561db1e860bd2c2 100644 (file)
@@ -12,7 +12,7 @@
 #ifndef _WX_DIRDLG_H_
 #define _WX_DIRDLG_H_
 
-class WXDLLEXPORT wxDirDialog : public wxDialog
+class WXDLLEXPORT wxDirDialog : public wxDirDialogBase
 {
 public:
     wxDirDialog(wxWindow *parent,
@@ -23,20 +23,10 @@ public:
                 const wxSize& size = wxDefaultSize,
                 const wxString& name = wxDirDialogNameStr);
 
-    void SetMessage(const wxString& message) { m_message = message; }
     void SetPath(const wxString& path);
-    void SetStyle(long style) { SetWindowStyle(style); }
-
-    wxString GetMessage() const { return m_message; }
-    wxString GetPath() const { return m_path; }
-    long GetStyle() const { return GetWindowStyle(); }
 
     virtual int ShowModal();
 
-protected:
-    wxString    m_message;
-    wxString    m_path;
-
 private:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDirDialog)
 };
index 08a393ff91bc4cbf1687dbc2ec67c2d132a4e782..9f8d900ae3e2a1f732a34da4165a99eb6a3d995a 100644 (file)
@@ -16,7 +16,7 @@
 
 WXDLLEXPORT_DATA(extern const wxChar) wxFileSelectorPromptStr[];
 
-class WXDLLEXPORT wxDirDialog: public wxDialog
+class WXDLLEXPORT wxDirDialog: public wxDirDialogBase
 {
 DECLARE_DYNAMIC_CLASS(wxDirDialog)
 public:
@@ -24,21 +24,14 @@ public:
         const wxString& defaultPath = "",
         long style = 0, const wxPoint& pos = wxDefaultPosition);
 
-    inline void SetMessage(const wxString& message) { m_message = message; }
-    inline void SetPath(const wxString& path) { m_path = path; }
     inline void SetStyle(long style) { m_dialogStyle = style; }
-
-    inline wxString GetMessage() const { return m_message; }
-    inline wxString GetPath() const { return m_path; }
     inline long GetStyle() const { return m_dialogStyle; }
 
     int ShowModal();
 
 protected:
-    wxString    m_message;
     long        m_dialogStyle;
     wxWindow *  m_parent;
-    wxString    m_path;
 };
 
 #endif
index 19d18963543e665c3a5e07289622d23ef776a756..a8ee2fcdb9c599fe5e30177d75e8e3070f366a7b 100644 (file)
@@ -12,7 +12,7 @@
 #ifndef _WX_DIRDLG_H_
 #define _WX_DIRDLG_H_
 
-class WXDLLEXPORT wxDirDialog : public wxDialog
+class WXDLLEXPORT wxDirDialog : public wxDirDialogBase
 {
 public:
     wxDirDialog(wxWindow *parent,
@@ -23,20 +23,10 @@ public:
                 const wxSize& size = wxDefaultSize,
                 const wxString& name = wxDirDialogNameStr);
 
-    void SetMessage(const wxString& message) { m_message = message; }
     void SetPath(const wxString& path);
-    void SetStyle(long style) { SetWindowStyle(style); }
-
-    wxString GetMessage() const { return m_message; }
-    wxString GetPath() const { return m_path; }
-    long GetStyle() const { return GetWindowStyle(); }
 
     virtual int ShowModal();
 
-protected:
-    wxString    m_message;
-    wxString    m_path;
-
 private:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDirDialog)
 };
index 5c5ca450872d4585b1ff634fe658135bee3f998f..e52fea9d913527cc81627e9631def6c34314d382 100644 (file)
@@ -79,7 +79,15 @@ wxGenericDirDialog::wxGenericDirDialog(wxWindow* parent, const wxString& title,
                                        const wxString& defaultPath, long style,
                                        const wxPoint& pos, const wxSize& sz,
                                        const wxString& name):
-                wxDialog(parent, ID_DIRCTRL, title, pos, sz, style, name)
+                wxDirDialogBase(parent, title, defaultPath, style, pos, sz, name)
+{
+    Create(parent, title, defaultPath, style, pos, sz, name);
+}
+
+bool wxGenericDirDialog::Create(wxWindow* parent, const wxString& title,
+                                       const wxString& defaultPath, long style,
+                                       const wxPoint& pos, const wxSize& sz,
+                                       const wxString& name)
 {
     wxBusyCursor cursor;
 
@@ -197,6 +205,8 @@ wxGenericDirDialog::wxGenericDirDialog(wxWindow* parent, const wxString& title,
     topsizer->Fit( this );
 
     Centre( wxBOTH );
+
+    return true;
 }
 
 void wxGenericDirDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
diff --git a/src/gtk/dirdlg.cpp b/src/gtk/dirdlg.cpp
new file mode 100644 (file)
index 0000000..29dba78
--- /dev/null
@@ -0,0 +1,272 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/gtk/dirdlg.cpp
+// Purpose:     native implementation of wxDirDialog
+// Author:      Robert Roebling, Zbigniew Zagorski, Mart Raudsepp, Francesco Montorsi
+// Id:          $Id$
+// Copyright:   (c) 1998 Robert Roebling, 2004 Zbigniew Zagorski, 2005 Mart Raudsepp
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+
+
+/*
+  NOTE: the GtkFileChooser interface can be used both for wxFileDialog and for wxDirDialog.
+        Thus following code is very similar (even if not identic) to src/gtk/filedlg.cpp
+        If you find a problem in this code, remember to check also that file !
+*/
+
+
+
+#if wxUSE_DIRDLG
+
+#include "wx/dirdlg.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/intl.h"
+#endif
+
+#ifdef __WXGTK24__
+
+#include <gtk/gtk.h>
+#include "wx/gtk/private.h"
+
+#include <unistd.h> // chdir
+
+#include "wx/filename.h" // wxFilename
+#include "wx/tokenzr.h" // wxStringTokenizer
+#include "wx/filefn.h" // ::wxGetCwd
+#include "wx/msgdlg.h" // wxMessageDialog
+
+//-----------------------------------------------------------------------------
+// idle system
+//-----------------------------------------------------------------------------
+
+extern void wxapp_install_idle_handler();
+
+//-----------------------------------------------------------------------------
+// "clicked" for OK-button
+//-----------------------------------------------------------------------------
+
+extern "C" {
+static void gtk_filedialog_ok_callback(GtkWidget *widget, wxDirDialog *dialog)
+{
+    int style = dialog->GetStyle();
+    gchar* 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)
+#if GTK_CHECK_VERSION(2,7,3)
+    if(gtk_check_version(2,7,3) != NULL)
+#endif
+    if ((style & wxSAVE) && (style & wxOVERWRITE_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(wxConvFileName->cMB2WX(filename)).c_str());
+
+            wxMessageDialog dlg(dialog, msg, _("Confirm"),
+                               wxYES_NO | wxICON_QUESTION);
+            if (dlg.ShowModal() != wxID_YES)
+                return;
+        }
+    }
+
+    // change to the directory where the user went if asked
+    if (style & wxCHANGE_DIR)
+    {
+        // Use chdir to not care about filename encodings
+        gchar* folder = g_path_get_dirname(filename);
+        chdir(folder);
+        g_free(folder);
+    }
+
+    g_free(filename);
+
+    wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
+    event.SetEventObject(dialog);
+    dialog->GetEventHandler()->ProcessEvent(event);
+}
+}
+
+//-----------------------------------------------------------------------------
+// "clicked" for Cancel-button
+//-----------------------------------------------------------------------------
+
+extern "C" {
+static void gtk_filedialog_cancel_callback(GtkWidget *WXUNUSED(w),
+                                           wxDirDialog *dialog)
+{
+    wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
+    event.SetEventObject(dialog);
+    dialog->GetEventHandler()->ProcessEvent(event);
+}
+}
+
+extern "C" {
+static void gtk_filedialog_response_callback(GtkWidget *w,
+                                             gint response,
+                                             wxDirDialog *dialog)
+{
+    wxapp_install_idle_handler();
+
+    if (response == GTK_RESPONSE_ACCEPT)
+        gtk_filedialog_ok_callback(w, dialog);
+    else if (response == GTK_RESPONSE_CANCEL)
+        gtk_filedialog_cancel_callback(w, dialog);
+    else // "delete"
+    {
+        gtk_filedialog_cancel_callback(w, dialog);
+        dialog->m_destroyed_by_delete = true;
+    }
+}
+}
+
+#endif // __WXGTK24__
+
+//-----------------------------------------------------------------------------
+// wxDirDialog
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxDirDialog,wxGenericDirDialog)
+
+BEGIN_EVENT_TABLE(wxDirDialog,wxGenericDirDialog)
+    EVT_BUTTON(wxID_OK, wxDirDialog::OnFakeOk)
+END_EVENT_TABLE()
+
+wxDirDialog::wxDirDialog(wxWindow* parent, const wxString& title,
+                        const wxString& defaultPath, long style,
+                        const wxPoint& pos, const wxSize& sz,
+                        const wxString& name)
+{
+#ifdef __WXGTK24__
+    if (!gtk_check_version(2,4,0))
+    {
+        m_message = title;
+        m_needParent = false;
+        m_destroyed_by_delete = false;
+
+        if (!PreCreation(parent, pos, wxDefaultSize) ||
+            !CreateBase(parent, wxID_ANY, pos, wxDefaultSize, style,
+                    wxDefaultValidator, wxT("filedialog")))
+        {
+            wxFAIL_MSG( wxT("wxDirDialog creation failed") );
+            return;
+        }
+
+        GtkFileChooserAction gtk_action;
+        GtkWindow* gtk_parent = NULL;
+        if (parent)
+            gtk_parent = GTK_WINDOW( gtk_widget_get_toplevel(parent->m_widget) );
+
+        gtk_action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
+        if (style & wxDD_NEW_DIR_BUTTON)
+            gtk_action = GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
+
+        m_widget = gtk_file_chooser_dialog_new(
+                       wxGTK_CONV(m_message),
+                       gtk_parent,
+                       gtk_action,
+                       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                       GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+                       NULL);
+
+        // 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,
+        // e.g "gnome-vfs", "default", ... (gtk_file_chooser_dialog_new_with_backend).
+        // Currently local-only is kept as the default - true:
+        // gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(m_widget), true);
+
+        g_signal_connect(G_OBJECT(m_widget), "response",
+            GTK_SIGNAL_FUNC(gtk_filedialog_response_callback), (gpointer)this);
+
+        if ( !defaultPath.empty() )
+            gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(m_widget),
+                    wxConvFileName->cWX2MB(defaultPath) );
+    }
+    else
+#endif
+        wxGenericDirDialog::Create(parent, title, defaultPath, style, pos, sz, name);
+}
+
+wxDirDialog::~wxDirDialog()
+{
+#ifdef __WXGTK24__
+    if (!gtk_check_version(2,4,0))
+    {
+        if (m_destroyed_by_delete)
+            m_widget = NULL;
+    }
+#endif
+}
+
+void wxDirDialog::OnFakeOk( wxCommandEvent &event )
+{
+#ifdef __WXGTK24__
+    if (!gtk_check_version(2,4,0))
+        wxDialog::OnOK( event );
+    else
+#endif
+        wxGenericDirDialog::OnOK( event );
+}
+
+int wxDirDialog::ShowModal()
+{
+#ifdef __WXGTK24__
+    if (!gtk_check_version(2,4,0))
+        return wxDialog::ShowModal();
+    else
+#endif
+        return wxGenericDirDialog::ShowModal();
+}
+
+bool wxDirDialog::Show( bool show )
+{
+#ifdef __WXGTK24__
+    if (!gtk_check_version(2,4,0))
+        return wxDialog::Show( show );
+    else
+#endif
+        return wxGenericDirDialog::Show( show );
+}
+
+void wxDirDialog::DoSetSize(int x, int y, int width, int height, int sizeFlags )
+{
+    if (!m_wxwindow)
+        return;
+    else
+        wxGenericDirDialog::DoSetSize( x, y, width, height, sizeFlags );
+}
+
+void wxDirDialog::SetPath(const wxString& dir)
+{
+#ifdef __WXGTK24__
+    if (!gtk_check_version(2,4,0))
+    {
+        if (wxDirExists(dir))
+        {
+            gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(m_widget), wxConvFileName->cWX2MB(dir));
+        }
+    }
+    else
+#endif
+        wxGenericDirDialog::SetPath( dir );
+}
+
+wxString wxDirDialog::GetPath() const
+{
+#ifdef __WXGTK24__
+    if (!gtk_check_version(2,4,0))
+        return wxConvFileName->cMB2WX( gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(m_widget) ) );
+    else
+#endif
+        return wxGenericDirDialog::GetPath();
+}
+
+#endif // wxUSE_DIRDLG