]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/filepickercmn.cpp
Return NULL from wxWindow::GetCapture() when the capture is being lost.
[wxWidgets.git] / src / common / filepickercmn.cpp
index 99cbb13d115a1e8e595522452ac7fe8403b73e26..a58b4adfecd9c769a4b2fce1fbd75f71748bc358 100644 (file)
@@ -4,7 +4,6 @@
 // Author:      Francesco Montorsi (readapted code written by Vadim Zeitlin)
 // Modified by:
 // Created:     15/04/2006
-// RCS-ID:      $Id$
 // Copyright:   (c) Vadim Zeitlin, Francesco Montorsi
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
@@ -44,8 +43,8 @@ const char wxDirPickerWidgetNameStr[] = "dirpickerwidget";
 const char wxFilePickerWidgetLabel[] = wxTRANSLATE("Browse");
 const char wxDirPickerWidgetLabel[] = wxTRANSLATE("Browse");
 
-wxDEFINE_EVENT( wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_DIRPICKER_CHANGED,  wxFileDirPickerEvent );
+wxDEFINE_EVENT( wxEVT_FILEPICKER_CHANGED, wxFileDirPickerEvent );
+wxDEFINE_EVENT( wxEVT_DIRPICKER_CHANGED,  wxFileDirPickerEvent );
 IMPLEMENT_DYNAMIC_CLASS(wxFileDirPickerEvent, wxCommandEvent)
 
 // ----------------------------------------------------------------------------
@@ -63,8 +62,6 @@ bool wxFileDirPickerCtrlBase::CreateBase(wxWindow *parent,
                                          const wxValidator& validator,
                                          const wxString &name )
 {
-    wxASSERT_MSG(path.empty() || CheckPath(path), wxT("Invalid initial path!"));
-
     if (!wxPickerBase::CreateBase(parent, id, path, pos, size,
                                    style, validator, name))
         return false;
@@ -115,19 +112,17 @@ void wxFileDirPickerCtrlBase::UpdatePickerFromTextCtrl()
 {
     wxASSERT(m_text);
 
-    if (m_bIgnoreNextTextCtrlUpdate)
-    {
-        // ignore this update
-        m_bIgnoreNextTextCtrlUpdate = false;
-        return;
-    }
-
     // remove the eventually present path-separator from the end of the textctrl
     // string otherwise we would generate a wxFileDirPickerEvent when changing
     // from e.g. /home/user to /home/user/ and we want to avoid it !
     wxString newpath(GetTextCtrlValue());
-    if (!CheckPath(newpath))
-        return;       // invalid user input
+
+    // Notice that we use to check here whether the current path is valid, i.e.
+    // if the corresponding file or directory exists for the controls with
+    // wxFLP_FILE_MUST_EXIST or wxDIRP_DIR_MUST_EXIST flag, however we don't do
+    // this any more as we still must notify the program about any changes in
+    // the control, otherwise its view of it would be different from what is
+    // actually shown on the screen, resulting in very confusing UI.
 
     if (m_pickerIface->GetPath() != newpath)
     {
@@ -150,11 +145,10 @@ void wxFileDirPickerCtrlBase::UpdateTextCtrlFromPicker()
     if (!m_text)
         return;     // no textctrl to update
 
-    // NOTE: this SetValue() will generate an unwanted wxEVT_COMMAND_TEXT_UPDATED
-    //       which will trigger a unneeded UpdateFromTextCtrl(); thus before using
-    //       SetValue() we set the m_bIgnoreNextTextCtrlUpdate flag...
-    m_bIgnoreNextTextCtrlUpdate = true;
-    m_text->SetValue(m_pickerIface->GetPath());
+    // Take care to use ChangeValue() here and not SetValue() to avoid
+    // generating an event that would trigger UpdateTextCtrlFromPicker()
+    // resulting in infinite recursion.
+    m_text->ChangeValue(m_pickerIface->GetPath());
 }
 
 
@@ -207,15 +201,6 @@ bool wxFilePickerCtrl::Create(wxWindow *parent,
     return true;
 }
 
-bool wxFilePickerCtrl::CheckPath(const wxString& path) const
-{
-    // if wxFLP_SAVE was given or wxFLP_FILE_MUST_EXIST has NOT been given we
-    // must accept any path
-    return HasFlag(wxFLP_SAVE) ||
-            !HasFlag(wxFLP_FILE_MUST_EXIST) ||
-                wxFileName::FileExists(path);
-}
-
 wxString wxFilePickerCtrl::GetTextCtrlValue() const
 {
     // filter it through wxFileName to remove any spurious path separator
@@ -254,12 +239,6 @@ bool wxDirPickerCtrl::Create(wxWindow *parent,
     return true;
 }
 
-bool wxDirPickerCtrl::CheckPath(const wxString& path) const
-{
-    // if wxDIRP_DIR_MUST_EXIST has NOT been given we must accept any path
-    return !HasFlag(wxDIRP_DIR_MUST_EXIST) || wxFileName::DirExists(path);
-}
-
 wxString wxDirPickerCtrl::GetTextCtrlValue() const
 {
     // filter it through wxFileName to remove any spurious path separator