]> git.saurik.com Git - wxWidgets.git/commitdiff
trying to fix memory leak in wxListCtrl (attributes not deleted)
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 7 Feb 2000 16:51:39 +0000 (16:51 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 7 Feb 2000 16:51:39 +0000 (16:51 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5889 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/listctrl.h
src/msw/listctrl.cpp

index 47c81afaf461efd898e36c4e92da3d3379c44f23..106c8572489c94dc2c13e3e461fa9944b99009fe 100644 (file)
@@ -331,6 +331,9 @@ protected:
     // common part of all ctors
     void Init();
 
+    // free memory taken by all attributes
+    void FreeAllAttrs();
+
     wxTextCtrl*       m_textCtrl;        // The control used for editing a label
     wxImageList *     m_imageListNormal; // The image list for normal icons
     wxImageList *     m_imageListSmall;  // The image list for small icons
index 15d33a55c195ec713f1c62f4c0e091ec417eeb92..029cbe1b31741f8045743210029172cb61abf0ef 100644 (file)
@@ -239,7 +239,7 @@ void wxListCtrl::UpdateStyle()
     }
 }
 
-wxListCtrl::~wxListCtrl()
+void wxListCtrl::FreeAllAttrs()
 {
     if ( m_hasAnyAttr )
     {
@@ -247,8 +247,15 @@ wxListCtrl::~wxListCtrl()
         {
             delete (wxListItemAttr *)node->Data();
         }
+
+        m_attrs.Destroy();
+
+        m_hasAnyAttr = FALSE;
     }
+}
 
+wxListCtrl::~wxListCtrl()
+{
     if ( m_textCtrl )
     {
         m_textCtrl->UnsubclassWin();
@@ -1295,20 +1302,12 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
             }
 
         case LVN_DELETEALLITEMS:
-            // What's the sense of generating a wxWin event for this when
-           // it's absolutely not portable?
-            // This is perfectly portable, RR
-#if 1
-           eventType = wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
+            eventType = wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
             event.m_itemIndex = -1;
-#endif // 1
 
-            // return TRUE to suppress all additional LVN_DELETEITEM
-            // notifications - this makes deleting all items from a list ctrl
-            // much faster
-            *result = TRUE;
+            FreeAllAttrs();
 
-           break;
+            break;
 
         case LVN_DELETEITEM:
             {
@@ -1579,19 +1578,19 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
     if ( !GetEventHandler()->ProcessEvent(event) )
         return FALSE;
 
-    if (eventType == wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS)
-    {
-       // No postprocessing, because we want *return to
-       // be TRUE so that no further DeleteItem events
-       // are sent, RR.
-        return TRUE;
-    }
-
     // post processing
     // ---------------
 
     switch ( (int)nmhdr->code )
     {
+        case LVN_DELETEALLITEMS:
+            // always return TRUE to suppress all additional LVN_DELETEITEM
+            // notifications - this makes deleting all items from a list ctrl
+            // much faster
+            *result = TRUE;
+
+            return TRUE;
+
         case LVN_GETDISPINFO:
             {
                 LV_DISPINFO *info = (LV_DISPINFO *)lParam;
@@ -1611,8 +1610,6 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
                 *result = event.IsAllowed();
                 return TRUE;
             }
-        default:
-            break;
     }
 
     *result = !event.IsAllowed();