From kfm-devel Sat May 21 15:22:18 2005 From: Daniel Teske Date: Sat, 21 May 2005 15:22:18 +0000 To: kfm-devel Subject: Memory leak in keditbookmarks Message-Id: <200505211722.18334.teske () squorn ! de> X-MARC-Message: https://marc.info/?l=kfm-devel&m=111668888528624 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--Boundary-00=_qI1jCWJx4wa4ZxO" --Boundary-00=_qI1jCWJx4wa4ZxO Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Content-Disposition: inline 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 --Boundary-00=_qI1jCWJx4wa4ZxO Content-Type: text/x-diff; charset="us-ascii"; name="keditbookmark-listview.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="keditbookmark-listview.patch" 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* 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(); else s_selected_items_cache->clear(); - for (QPtrListIterator 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(it.current())) && it.current()->isSelected()) + s_selected_items_cache->append(static_cast(it.current())); } } s_listview_is_dirty = false; @@ -172,21 +173,21 @@ bool selected = false; // adjust the current selection - QPtrListIterator 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(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( it.current())); + if (which == AllChildren) { // select outer folder - deselectAllButParent(it.current()); - } else if (which == SomeChildren) { + deselectAllButParent(static_cast(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 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(it.current())) && it.current()->isSelected()) { m_listView->setSelected(it.current(), false); } } @@ -207,20 +208,20 @@ QValueList ListView::selectedBookmarksExpanded() const { QValueList bookmarks; - for (QPtrListIterator 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(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(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(it2.current()); @@ -233,9 +234,9 @@ QValueList ListView::allBookmarks() const { QValueList bookmarks; - for (QPtrListIterator 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(it.current()))) + bookmarks.append(static_cast(it.current())->bookmark()); return bookmarks; } @@ -284,7 +285,7 @@ } void ListView::setOpen(bool open) { - for (QPtrListIterator 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(firstChild()); } -QPtrList* KEBListView::itemList() { - QPtrList *items = new QPtrList(); - for (QListViewItemIterator it(this); it.current(); it++) - items->append(static_cast(it.current())); - return items; -} - // Update display of bookmarks containing URL void KEBListView::updateByURL(QString url) { for (QListViewItemIterator it(this); it.current(); it++) { --Boundary-00=_qI1jCWJx4wa4ZxO--