]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/filepickercmn.cpp
Avoid using buffer of already deallocated string in wxHTMLDataObject.
[wxWidgets.git] / src / common / filepickercmn.cpp
index 99cbb13d115a1e8e595522452ac7fe8403b73e26..5923767f2deddfe14386100cdedb90f9b288763b 100644 (file)
@@ -44,8 +44,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 +63,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 +113,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 +146,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 +202,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 +240,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