[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kfm-devel
Subject:    Memory leak in keditbookmarks
From:       Daniel Teske <teske () squorn ! de>
Date:       2005-05-21 15:22:18
Message-ID: 200505211722.18334.teske () squorn ! de
[Download RAW message or body]

Hi

as André Wöbbeking correctly pointed out the function 
KEBListView::itemList() leaks memory. (It relies on the caller to free 
the memory.)

This patch removes every usage inside KEditBookmakrs.
And it also deletes the function.
Or should I retain the function?

daniel teske

["keditbookmark-listview.patch" (text/x-diff)]

Index: listview.h
===================================================================
--- listview.h	(revision 416395)
+++ listview.h	(working copy)
@@ -102,7 +102,6 @@
    bool isFolderList() const { return m_folderList; }
 
    KEBListViewItem* rootItem() const;
-   QPtrList<KEBListViewItem>* itemList(); // TODO - make const!!! and fix mem leak \
(the QPtrList* isn't deleted)!  
 public slots:
    virtual void rename(QListViewItem *item, int c);
Index: listview.cpp
===================================================================
--- listview.cpp	(revision 416395)
+++ listview.cpp	(working copy)
@@ -118,10 +118,11 @@
             s_selected_items_cache = new QPtrList<KEBListViewItem>();
         else
             s_selected_items_cache->clear();
-        for (QPtrListIterator<KEBListViewItem> it(*(m_listView->itemList()));
-                it.current() != 0; ++it) {
-            if (VALID_ITEM(it.current()) && it.current()->isSelected())
-                s_selected_items_cache->append(it.current());
+
+        for (QListViewItemIterator it(m_listView); it.current() != 0; ++it) 
+        {
+            if(VALID_ITEM( static_cast<KEBListViewItem *>(it.current())) && \
it.current()->isSelected()) +                \
s_selected_items_cache->append(static_cast<KEBListViewItem *>(it.current()));  }
     }
     s_listview_is_dirty = false;
@@ -172,21 +173,21 @@
     bool selected = false;
 
     // adjust the current selection
-    QPtrListIterator<KEBListViewItem> it(*(m_listView->itemList()));
+    QListViewItemIterator it(m_listView);
     for ( ; it.current() != 0; ++it) {
-        if ( !VALID_ITEM(it.current())
-          || !it.current()->isSelected() )
+        if( !VALID_ITEM( static_cast<KEBListViewItem *>(it.current())) 
+            || !it.current()->isSelected() )
             continue;
         // needed - FIXME - why?
         selected = true;
         // don't bother looking into it if its not a folder
         if (it.current()->childCount() == 0)
             continue;
-        Which which = whichChildrenSelected(it.current());
-        if (which == AllChildren) { 
+        Which which = whichChildrenSelected(static_cast<KEBListViewItem *>( \
it.current())); +        if (which == AllChildren) {
             // select outer folder
-            deselectAllButParent(it.current());
-        } else if (which == SomeChildren) { 
+            deselectAllButParent(static_cast<KEBListViewItem *>(it.current()));
+        } else if (which == SomeChildren) {
             // don't select outer folder
             m_listView->setSelected(it.current(), false);
         }
@@ -195,9 +196,9 @@
         return;
 
     // deselect empty folders if there is a real selection
-    for (QPtrListIterator<KEBListViewItem> it(*(m_listView->itemList())); 
+    for (QListViewItemIterator it(m_listView);
             it.current() != 0; ++it) {
-        if (!VALID_ITEM(it.current()) && it.current()->isSelected()) {
+        if (!VALID_ITEM( static_cast<KEBListViewItem *>(it.current())) && \
it.current()->isSelected()) {  m_listView->setSelected(it.current(), false); 
         }
     }
@@ -207,20 +208,20 @@
 
 QValueList<KBookmark> ListView::selectedBookmarksExpanded() const {
     QValueList<KBookmark> bookmarks;
-    for (QPtrListIterator<KEBListViewItem> it(*(m_listView->itemList())); \
it.current() != 0; ++it) { +    for (QListViewItemIterator it(m_listView); \
it.current() != 0; ++it) {  if (!it.current()->isSelected() 
-         || !VALID_ITEM(it.current())
+         || !VALID_ITEM(static_cast<KEBListViewItem *>(it.current()))
          || it.current() == m_listView->rootItem()) {
             continue;
         }
         if (it.current()->childCount() == 0) {
             // non folder case
-            bookmarks.append(it.current()->bookmark());
+            bookmarks.append(static_cast<KEBListViewItem \
*>(it.current())->bookmark());  continue;
         }
         QListViewItem *endOfFolder 
             = it.current()->nextSibling() ? it.current()->nextSibling()->itemAbove() \
                : 0;
-        QListViewItemIterator it2((QListViewItem*)it.current());
+        QListViewItemIterator it2(it.current());
         QListViewItem *last = 0;
         for( ; it2.current() && (last != endOfFolder); (last = it2.current()), \
                it2++) {
             KEBListViewItem *item = static_cast<KEBListViewItem *>(it2.current());
@@ -233,9 +234,9 @@
 
 QValueList<KBookmark> ListView::allBookmarks() const {
     QValueList<KBookmark> bookmarks;
-    for (QPtrListIterator<KEBListViewItem> it(*(m_listView->itemList())); \
                it.current() != 0; ++it)
-        if (NOT_FOLDER_OR_EMPTY(it.current()))
-            bookmarks.append(it.current()->bookmark());
+    for (QListViewItemIterator it(m_listView); it.current() != 0; ++it)
+        if (NOT_FOLDER_OR_EMPTY(static_cast<KEBListViewItem *>(it.current())))
+            bookmarks.append(static_cast<KEBListViewItem \
*>(it.current())->bookmark());  return bookmarks;
 }
 
@@ -284,7 +285,7 @@
 }
 
 void ListView::setOpen(bool open) {
-    for (QPtrListIterator<KEBListViewItem> it(*(m_listView->itemList())); \
it.current() != 0; ++it) +    for (QListViewItemIterator it(m_listView); it.current() \
!= 0; ++it)  if (it.current()->parent())
             it.current()->setOpen(open);
 }
@@ -742,13 +743,6 @@
     return static_cast<KEBListViewItem *>(firstChild());
 }
 
-QPtrList<KEBListViewItem>* KEBListView::itemList() {
-    QPtrList<KEBListViewItem> *items = new QPtrList<KEBListViewItem>();
-    for (QListViewItemIterator it(this); it.current(); it++)
-        items->append(static_cast<KEBListViewItem *>(it.current()));
-    return items;
-}
-
 // Update display of bookmarks containing URL
 void KEBListView::updateByURL(QString url) {
     for (QListViewItemIterator it(this); it.current(); it++) {



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic