]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/treebase.cpp
fixing overrelease and out-of-bounds write, fixes #13725
[wxWidgets.git] / src / common / treebase.cpp
index 483360b4724a6e8401625c5ca14113b6cb9b8781..f831b489adf30e4aa3c9d1e2bd49f4ce16ff0ecb 100644 (file)
@@ -167,6 +167,22 @@ wxTreeEvent::wxTreeEvent(const wxTreeEvent & event)
 // wxTreeCtrlBase
 // ----------------------------------------------------------------------------
 
+wxTreeCtrlBase::wxTreeCtrlBase()
+{
+    m_imageListNormal =
+    m_imageListState = NULL;
+    m_ownsImageListNormal =
+    m_ownsImageListState = false;
+
+    // arbitrary default
+    m_spacing = 18;
+
+    // quick DoGetBestSize calculation
+    m_quickBestSize = true;
+
+    Connect(wxEVT_CHAR_HOOK, wxKeyEventHandler(wxTreeCtrlBase::OnCharHook));
+}
+
 wxTreeCtrlBase::~wxTreeCtrlBase()
 {
     if (m_ownsImageListNormal)
@@ -335,4 +351,26 @@ bool wxTreeCtrlBase::IsEmpty() const
     return !GetRootItem().IsOk();
 }
 
+void wxTreeCtrlBase::OnCharHook(wxKeyEvent& event)
+{
+    if ( GetEditControl() )
+    {
+        bool discardChanges = false;
+        switch ( event.GetKeyCode() )
+        {
+            case WXK_ESCAPE:
+                discardChanges = true;
+                // fall through
+
+            case WXK_RETURN:
+                EndEditLabel(GetFocusedItem(), discardChanges);
+
+                // Do not call Skip() below.
+                return;
+        }
+    }
+
+    event.Skip();
+}
+
 #endif // wxUSE_TREECTRL