From 6e9f8cb7044774da171b2a0f6ffdda579eb9ddab Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sat, 6 Dec 2014 15:17:15 -0600 Subject: Fix Kontact crash in Akregator part due to identical destructor signatures being generated for two unrelated classes This relates to Bug 2235 Fix a slew of non-virtual destructor problems --- akregator/src/actionmanagerimpl.cpp | 1 + akregator/src/article.cpp | 6 +++--- akregator/src/articlefilter.h | 4 ++++ akregator/src/articlelistview.cpp | 1 + akregator/src/articleviewer.cpp | 1 + akregator/src/feed.cpp | 12 ++++++------ akregator/src/feedlist.cpp | 2 ++ akregator/src/feedlistview.cpp | 4 ++++ akregator/src/plugin.cpp | 6 ++++-- akregator/src/plugin.h | 1 - akregator/src/simplenodeselector.cpp | 1 + akregator/src/storagefactory.h | 13 ++++++++----- 12 files changed, 35 insertions(+), 17 deletions(-) (limited to 'akregator/src') diff --git a/akregator/src/actionmanagerimpl.cpp b/akregator/src/actionmanagerimpl.cpp index c269500e7..7fa61cdc9 100644 --- a/akregator/src/actionmanagerimpl.cpp +++ b/akregator/src/actionmanagerimpl.cpp @@ -68,6 +68,7 @@ class ActionManagerImpl::NodeSelectVisitor : public TreeNodeVisitor { public: NodeSelectVisitor(ActionManagerImpl* manager) : m_manager(manager) {} + virtual ~NodeSelectVisitor() {} virtual bool visitFeed(Feed* node) { diff --git a/akregator/src/article.cpp b/akregator/src/article.cpp index 8b62509f4..0e01d3e7c 100644 --- a/akregator/src/article.cpp +++ b/akregator/src/article.cpp @@ -91,6 +91,7 @@ Article::Article(const TQString& guid, Feed* feed) : d(new Private) d->guid = guid; d->archive = Backend::Storage::getInstance()->archiveFor(feed->xmlUrl()); d->status = 0; + d->hash = 0; } void Article::initialize(RSS::Article article, Backend::FeedStorage* archive) @@ -101,7 +102,7 @@ void Article::initialize(RSS::Article article, Backend::FeedStorage* archive) + article.commentsLink().url() ); d->guid = article.guid(); - + if (!d->archive->contains(d->guid)) { d->archive->addEntry(d->guid); @@ -113,7 +114,7 @@ void Article::initialize(RSS::Article article, Backend::FeedStorage* archive) } else { // article is not deleted, let's add it to the archive - + d->archive->setHash(d->guid, hash() ); TQString title = article.title().isEmpty() ? buildTitle(article.description()) : article.title(); d->archive->setTitle(d->guid, title); @@ -358,7 +359,6 @@ KURL Article::commentsLink() const int Article::comments() const { - return d->archive->comments(d->guid); } diff --git a/akregator/src/articlefilter.h b/akregator/src/articlefilter.h index 5f1e7af37..535a731ef 100644 --- a/akregator/src/articlefilter.h +++ b/akregator/src/articlefilter.h @@ -144,6 +144,10 @@ class TagMatcher : public AbstractMatcher class AbstractAction { + public: + AbstractAction() {} + virtual ~AbstractAction() {} + public: virtual void exec(Article& article) = 0; diff --git a/akregator/src/articlelistview.cpp b/akregator/src/articlelistview.cpp index 2324096be..a0e5c8b70 100644 --- a/akregator/src/articlelistview.cpp +++ b/akregator/src/articlelistview.cpp @@ -89,6 +89,7 @@ class ArticleListView::ColumnLayoutVisitor : public TreeNodeVisitor { public: ColumnLayoutVisitor(ArticleListView* view) : m_view(view) {} + virtual ~ColumnLayoutVisitor() {} virtual bool visitTagNode(TagNode* /*node*/) { diff --git a/akregator/src/articleviewer.cpp b/akregator/src/articleviewer.cpp index 96b269e6d..3b1cc6db9 100644 --- a/akregator/src/articleviewer.cpp +++ b/akregator/src/articleviewer.cpp @@ -66,6 +66,7 @@ class ArticleViewer::ShowSummaryVisitor : public TreeNodeVisitor public: ShowSummaryVisitor(ArticleViewer* view) : m_view(view) {} + virtual ~ShowSummaryVisitor() {} virtual bool visitFeed(Feed* node) { diff --git a/akregator/src/feed.cpp b/akregator/src/feed.cpp index 3b0d81035..7e7f59e80 100644 --- a/akregator/src/feed.cpp +++ b/akregator/src/feed.cpp @@ -445,7 +445,7 @@ void Feed::appendArticles(const RSS::Document &doc) RSS::Article::List::ConstIterator en = d_articles.end(); int nudge=0; - + TQValueList
deletedArticles = d->deletedArticles; for (it = d_articles.begin(); it != en; ++it) @@ -460,21 +460,21 @@ void Feed::appendArticles(const RSS::Document &doc) TQValueList interceptors = ArticleInterceptorManager::self()->interceptors(); for (TQValueList::ConstIterator it = interceptors.begin(); it != interceptors.end(); ++it) (*it)->processArticle(mya); - + d->addedArticlesNotify.append(mya); - + if (!mya.isDeleted() && !markImmediatelyAsRead()) mya.setStatus(Article::New); else mya.setStatus(Article::Read); - + changed = true; } else // article is in list { // if the article's guid is no hash but an ID, we have to check if the article was updated. That's done by comparing the hash values. Article old = d->articles[(*it).guid()]; - Article mya(*it, this); + Article mya(*it, this); if (!mya.guidIsHash() && mya.hash() != old.hash() && !old.isDeleted()) { mya.setKeep(old.keep()); @@ -491,7 +491,7 @@ void Feed::appendArticles(const RSS::Document &doc) } else if (old.isDeleted()) deletedArticles.remove(mya); - } + } } TQValueList
::ConstIterator dit = deletedArticles.begin(); diff --git a/akregator/src/feedlist.cpp b/akregator/src/feedlist.cpp index 708b4fb7e..0c34e3933 100644 --- a/akregator/src/feedlist.cpp +++ b/akregator/src/feedlist.cpp @@ -52,6 +52,7 @@ class FeedList::AddNodeVisitor : public TreeNodeVisitor { public: AddNodeVisitor(FeedList* list) : m_list(list) {} + virtual ~AddNodeVisitor() {} virtual bool visitFeed(Feed* node) @@ -69,6 +70,7 @@ class FeedList::RemoveNodeVisitor : public TreeNodeVisitor { public: RemoveNodeVisitor(FeedList* list) : m_list(list) {} + virtual ~RemoveNodeVisitor() {} virtual bool visitFeed(Feed* node) { diff --git a/akregator/src/feedlistview.cpp b/akregator/src/feedlistview.cpp index d6ea394a1..f0a373632 100644 --- a/akregator/src/feedlistview.cpp +++ b/akregator/src/feedlistview.cpp @@ -78,6 +78,7 @@ class NodeListView::ConnectNodeVisitor : public TreeNodeVisitor { public: ConnectNodeVisitor(NodeListView* view) : m_view(view) {} + virtual ~ConnectNodeVisitor() {} virtual bool visitTreeNode(TreeNode* node) { @@ -114,6 +115,7 @@ class NodeListView::DisconnectNodeVisitor : public TreeNodeVisitor { public: DisconnectNodeVisitor(NodeListView* view) : m_view(view) {} + virtual ~DisconnectNodeVisitor() {} virtual bool visitTagNode(TagNode* node) { @@ -153,6 +155,7 @@ class NodeListView::DeleteItemVisitor : public TreeNodeVisitor public: DeleteItemVisitor(NodeListView* view) : m_view(view) {} + virtual ~DeleteItemVisitor() {} virtual bool visitTreeNode(TreeNode* node) { @@ -204,6 +207,7 @@ class NodeListView::CreateItemVisitor : public TreeNodeVisitor { public: CreateItemVisitor(NodeListView* view) : m_view(view) {} + virtual ~CreateItemVisitor() {} virtual bool visitTagNode(TagNode* node) { diff --git a/akregator/src/plugin.cpp b/akregator/src/plugin.cpp index 495dabc38..a90136b8b 100644 --- a/akregator/src/plugin.cpp +++ b/akregator/src/plugin.cpp @@ -8,11 +8,13 @@ namespace Akregator { Plugin::Plugin() -{} +{ +} Plugin::~Plugin() -{} +{ +} void diff --git a/akregator/src/plugin.h b/akregator/src/plugin.h index 650a4a924..f44084209 100644 --- a/akregator/src/plugin.h +++ b/akregator/src/plugin.h @@ -14,7 +14,6 @@ #include #include - namespace Akregator { // class PluginConfig; diff --git a/akregator/src/simplenodeselector.cpp b/akregator/src/simplenodeselector.cpp index 4291bb453..a4f1d4be8 100644 --- a/akregator/src/simplenodeselector.cpp +++ b/akregator/src/simplenodeselector.cpp @@ -93,6 +93,7 @@ class SimpleNodeSelector::NodeVisitor : public TreeNodeVisitor public: NodeVisitor(SimpleNodeSelector* view) : TreeNodeVisitor(), m_view(view) {} + virtual ~NodeVisitor() {} void createItems(TreeNode* node) { diff --git a/akregator/src/storagefactory.h b/akregator/src/storagefactory.h index 93ab7f753..3505ef449 100644 --- a/akregator/src/storagefactory.h +++ b/akregator/src/storagefactory.h @@ -38,18 +38,21 @@ class Storage; class AKREGATOR_EXPORT StorageFactory { public: - + + StorageFactory() {} + virtual ~StorageFactory() {} + /** identifier of the storage type, like "metakit", "postgres" etc. For use in configuration files. Must not contain spaces or special characters. */ virtual TQString key() const = 0; - + /** returns the (i18n'd) name of the storage type. */ virtual TQString name() const = 0; /** true if the plugin is configurable via a config dialog */ virtual bool isConfigurable() const = 0; - + /** shows the plugin's configuration dialog */ virtual void configure() = 0; @@ -59,11 +62,11 @@ class AKREGATOR_EXPORT StorageFactory * write access. */ virtual bool allowsMultipleWriteAccess() const = 0; - + /** creates a storage object with given parameters @param params list of implementation-specific parameters */ - virtual Storage* createStorage(const TQStringList& params) const = 0; + virtual Storage* createStorage(const TQStringList& params) const = 0; }; } -- cgit v1.2.1