]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/filepicker.cpp
no real changes, just use IsSingle/MultiLine() insteadof testing m_windowStyle directly
[wxWidgets.git] / src / gtk / filepicker.cpp
index f6dc7254df429f83351c6e43412655cf55ab4a75..6779e751117164ef3de7ba3cc8aa2b5e703d253a 100644 (file)
 #if wxUSE_FILEPICKERCTRL && defined(__WXGTK26__)
 
 #include "wx/filepicker.h"
+#include "wx/tooltip.h"
 
-#include "wx/gtk/private.h"
-
-#if wxUSE_TOOLTIPS
-    #include "wx/tooltip.h"
-#endif
-
-#include <gdk/gdk.h>
 #include <gtk/gtk.h>
 
-#include <unistd.h> // chdir
 
 
 // ============================================================================
@@ -52,10 +45,11 @@ bool wxFileButton::Create( wxWindow *parent, wxWindowID id,
 {
     if (!gtk_check_version(2,6,0))
     {
-        // VERY IMPORTANT: this code is identic to relative code in wxFileButton;
-        //                 if you find a problem here, fix it also in wxFileButton !
+        // VERY IMPORTANT: this code is identic to relative code in wxDirButton;
+        //                 if you find a problem here, fix it also in wxDirButton !
 
         m_needParent = true;
+        m_acceptsFocus = true;
 
         if (!PreCreation( parent, pos, size ) ||
             !wxControl::CreateBase(parent, id, pos, size, style & wxWINDOW_STYLE_MASK,
@@ -134,6 +128,12 @@ void wxFileButton::OnDialogOK(wxCommandEvent& ev)
     }
 }
 
+void wxFileButton::SetPath(const wxString &str)
+{
+    m_path = str;
+    UpdateDialogPath(m_dialog);
+}
+
 #endif      // wxUSE_FILEPICKERCTRL && defined(__WXGTK26__)
 
 
@@ -141,6 +141,8 @@ void wxFileButton::OnDialogOK(wxCommandEvent& ev)
 
 #if wxUSE_DIRPICKERCTRL && defined(__WXGTK26__)
 
+#include <unistd.h> // chdir
+
 //-----------------------------------------------------------------------------
 // "current-folder-changed"
 //-----------------------------------------------------------------------------
@@ -150,6 +152,12 @@ static void gtk_dirbutton_currentfolderchanged_callback(GtkFileChooserButton *wi
                                                         wxDirButton *p)
 {
     // update the m_path member of the wxDirButtonGTK
+    // unless the path was changed by wxDirButton::SetPath()
+    if (p->m_bIgnoreNextChange)
+    {
+        p->m_bIgnoreNextChange=false;
+        return;
+    }
     wxASSERT(p);
 
     // NB: it's important to use gtk_file_chooser_get_filename instead of
@@ -192,6 +200,7 @@ bool wxDirButton::Create( wxWindow *parent, wxWindowID id,
         //                 if you find a problem here, fix it also in wxFileButton !
 
         m_needParent = true;
+        m_acceptsFocus = true;
 
         if (!PreCreation( parent, pos, size ) ||
             !wxControl::CreateBase(parent, id, pos, size, style & wxWINDOW_STYLE_MASK,
@@ -207,6 +216,7 @@ bool wxDirButton::Create( wxWindow *parent, wxWindowID id,
         m_wildcard = wildcard;
         if ((m_dialog = CreateDialog()) == NULL)
             return false;
+        SetPath(path);
 
         // little trick used to avoid problems when there are other GTK windows 'grabbed':
         // GtkFileChooserDialog won't be responsive to user events if there is another
@@ -251,4 +261,18 @@ wxDirButton::~wxDirButton()
     m_dialog->m_widget = NULL;
 }
 
+void wxDirButton::SetPath(const wxString &str)
+{
+    m_path = str;
+
+    // wxDirButton uses the "current-folder-changed" signal which is triggered also
+    // when we set the path on the dialog associated with this button; thus we need
+    // to set the following flag to avoid sending a wxFileDirPickerEvent from this
+    // function (which would be inconsistent with wxFileButton's behaviour and in
+    // general with all wxWidgets control-manipulation functions which do not send events).
+    m_bIgnoreNextChange = true;
+
+    UpdateDialogPath(m_dialog);
+}
+
 #endif      // wxUSE_DIRPICKERCTRL && defined(__WXGTK26__)