From: Vadim Zeitlin Date: Sun, 25 Jul 2004 15:24:17 +0000 (+0000) Subject: don't crash if we delete the item being edited (replaces patch 979733) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/eb7f24c1b54564d27e2a8b15526bdda91859495f?ds=inline don't crash if we delete the item being edited (replaces patch 979733) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28472 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index 69094f0757..dd4fdecff9 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -88,11 +88,25 @@ class WXDLLEXPORT wxTreeTextCtrl: public wxTextCtrl public: wxTreeTextCtrl(wxGenericTreeCtrl *owner, wxGenericTreeItem *item); + // wxGenericTreeCtrl can use this one to abandon editing the given item, + // it's not an error to call it if this item is not being edited + void StopEditing(wxGenericTreeItem *item) + { + if ( item == m_itemEdited ) + DoStopEditing(); + } + protected: void OnChar( wxKeyEvent &event ); void OnKeyUp( wxKeyEvent &event ); void OnKillFocus( wxFocusEvent &event ); + void DoStopEditing() + { + Finish(); + m_owner->OnRenameCancelled(m_itemEdited); + } + bool AcceptChanges(); void Finish(); @@ -413,12 +427,10 @@ void wxTreeTextCtrl::OnChar( wxKeyEvent &event ) Finish(); } // else do nothing, do not accept and do not close - break; case WXK_ESCAPE: - Finish(); - m_owner->OnRenameCancelled(m_itemEdited); + DoStopEditing(); break; default: @@ -1295,7 +1307,7 @@ wxTreeItemId wxGenericTreeCtrl::GetPrevVisible(const wxTreeItemId& item) const // called by wxTextTreeCtrl when it marks itself for deletion void wxGenericTreeCtrl::ResetTextControl() { - m_textCtrl = NULL; + m_textCtrl = NULL; } // find the first item starting with the given prefix after the given item @@ -1495,6 +1507,12 @@ void wxGenericTreeCtrl::Delete(const wxTreeItemId& itemId) wxGenericTreeItem *item = (wxGenericTreeItem*) itemId.m_pItem; + if ( m_textCtrl ) + { + // can't delete the item being edited, cancel editing it first + m_textCtrl->StopEditing(item); + } + wxGenericTreeItem *parent = item->GetParent(); // don't keep stale pointers around! @@ -2866,6 +2884,8 @@ void wxGenericTreeCtrl::Edit( const wxTreeItemId& item ) return; } + m_itemEdited = itemEdit; + // We have to call this here because the label in // question might just have been added and no screen // update taken place. @@ -2913,9 +2933,6 @@ void wxGenericTreeCtrl::OnRenameCancelled(wxGenericTreeItem *item) GetEventHandler()->ProcessEvent( le ); } - - - void wxGenericTreeCtrl::OnRenameTimer() { Edit( m_current );