Summary: | Crash on exit | ||
---|---|---|---|
Product: | [Applications] akregator | Reporter: | Frank Osterfeld <osterfeld> |
Component: | general | Assignee: | kdepim bugs <kdepim-bugs> |
Status: | RESOLVED FIXED | ||
Severity: | crash | ||
Priority: | NOR | ||
Version: | cvs | ||
Target Milestone: | --- | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: |
Description
Frank Osterfeld
2005-09-27 07:58:12 UTC
SVN commit 465550 by osterfeld: some cleanups, *might* affect 113409 (or might not) CCBUG: 113409 M +8 -10 feedlistview.cpp --- branches/KDE/3.5/kdepim/akregator/src/feedlistview.cpp #465549:465550 @@ -117,27 +117,25 @@ public: ConnectNodeVisitor(NodeListView* view) : m_view(view) {} - virtual bool visitTagNode(TagNode* node) + virtual bool visitTreeNode(TreeNode* node) { connect(node, SIGNAL(signalDestroyed(TreeNode*)), m_view, SLOT(slotNodeDestroyed(TreeNode*) )); connect(node, SIGNAL(signalChanged(TreeNode*)), m_view, SLOT(slotNodeChanged(TreeNode*) )); return true; } - + virtual bool visitFolder(Folder* node) { + visitTreeNode(node); connect(node, SIGNAL(signalChildAdded(TreeNode*)), m_view, SLOT(slotNodeAdded(TreeNode*) )); connect(node, SIGNAL(signalChildRemoved(Folder*, TreeNode*)), m_view, SLOT(slotNodeRemoved(Folder*, TreeNode*) )); - - connect(node, SIGNAL(signalDestroyed(TreeNode*)), m_view, SLOT(slotNodeDestroyed(TreeNode*) )); - connect(node, SIGNAL(signalChanged(TreeNode*)), m_view, SLOT(slotNodeChanged(TreeNode*) )); return true; } virtual bool visitFeed(Feed* node) { - connect(node, SIGNAL(signalDestroyed(TreeNode*)), m_view, SLOT(slotNodeDestroyed(TreeNode*) )); - connect(node, SIGNAL(signalChanged(TreeNode*)), m_view, SLOT(slotNodeChanged(TreeNode*) )); + visitTreeNode(node); + connect(node, SIGNAL(fetchStarted(Feed*)), m_view, SLOT(slotFeedFetchStarted(Feed*))); connect(node, SIGNAL(fetchAborted(Feed*)), m_view, SLOT(slotFeedFetchAborted(Feed*))); connect(node, SIGNAL(fetchError(Feed*)), m_view, SLOT(slotFeedFetchError(Feed*))); @@ -978,11 +976,11 @@ { TreeNodeItem* item = findNodeItem(node); - if (!node || !item) - return; - d->itemDict.remove(node); + if (!item) + return; + if ( item->isSelected() ) { if (item->itemBelow()) This still happens. How to reproduce: - Create a folder "foobar". - Import a feed from some website. - Move feed from "imported folder" to "foobar" - Delete "foobar" (and the added feed with it) - Exit Akregator => Crash Something goes wrong tracking the displayed nodes. It seems it has to do with moving nodes and deleting the later. SVN commit 472974 by osterfeld: Don't crash on exit, when moving a node and deleting it later. BUG: 113409 M +4 -21 feedlistview.cpp M +0 -3 feedlistview.h --- branches/KDE/3.5/kdepim/akregator/src/feedlistview.cpp #472973:472974 @@ -401,24 +401,6 @@ slotRootNodeChanged(rootNode); } -void NodeListView::takeNode(QListViewItem* item) -{ - if (item->parent()) - item->parent()->takeItem(item); - else - takeItem(item); -} - -void NodeListView::insertNode(QListViewItem* parent, QListViewItem* item, QListViewItem* after) -{ - if (parent) - parent->insertItem(item); - else - insertItem(item); - if (after) - item->moveItem(after); -} - Folder* NodeListView::rootNode() { return d->nodeList ? d->nodeList->rootNode() : 0; @@ -923,15 +905,16 @@ void NodeListView::slotNodeAdded(TreeNode* node) { d->createItemVisitor->visit(node); + kdDebug() << "NodeListView::slotNodeAdded: " << node->title() << endl; } void NodeListView::slotNodeRemoved(Folder* /*parent*/, TreeNode* node) { if (!node) return; - - disconnectFromNode(node); - takeNode(findNodeItem(node)); + kdDebug() << "NodeListView::slotNodeRemoved: " << node->title() << endl; + disconnectFromNode(node); + delete d->itemDict.take(node); } void NodeListView::connectToNode(TreeNode* node) --- branches/KDE/3.5/kdepim/akregator/src/feedlistview.h #472973:472974 @@ -134,9 +134,6 @@ virtual bool acceptDrag(QDropEvent *event) const; virtual void movableDropEvent(QListViewItem* parent, QListViewItem* afterme); - void takeNode(QListViewItem* item); - void insertNode(QListViewItem* parent, QListViewItem* item, QListViewItem* after); - virtual QDragObject *dragObject(); SVN commit 472978 by osterfeld: forward port of 113409 (Don't crash on exit) CCBUG: 113409 M +4 -3 feedlistview.cpp --- trunk/KDE/kdepim/akregator/src/feedlistview.cpp #472977:472978 @@ -929,15 +929,16 @@ void NodeListView::slotNodeAdded(TreeNode* node) { d->createItemVisitor->visit(node); + kdDebug() << "NodeListView::slotNodeAdded: " << node->title() << endl; } void NodeListView::slotNodeRemoved(Folder* /*parent*/, TreeNode* node) { if (!node) return; - - disconnectFromNode(node); - takeNode(findNodeItem(node)); + kdDebug() << "NodeListView::slotNodeRemoved: " << node->title() << endl; + disconnectFromNode(node); + delete d->itemDict.take(node); } void NodeListView::connectToNode(TreeNode* node) |