From c9c4f7001aa5ff9d9a56169e499cab60f6cdc8c1 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Tue, 1 Sep 2009 17:24:47 +0000 Subject: [PATCH] - Fix crash when right-clicking on RSS news list (closes #422495) --- src/rss.ui | 8 -------- src/rss_imp.cpp | 36 ++++++++++++++++++++---------------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/rss.ui b/src/rss.ui index 637b4bd13..60acdc726 100644 --- a/src/rss.ui +++ b/src/rss.ui @@ -142,19 +142,11 @@ p, li { white-space: pre-wrap; } true - - true - Bullet - - - Attachment - - Article title diff --git a/src/rss_imp.cpp b/src/rss_imp.cpp index 2dbfd55cf..7e484af39 100644 --- a/src/rss_imp.cpp +++ b/src/rss_imp.cpp @@ -42,6 +42,9 @@ #include "feedList.h" #include "bittorrent.h" +#define NEWS_TITLE_COL 1 +#define NEWS_URL_COL 2 + // display a right-click menu void RSSImp::displayRSSListMenu(const QPoint& pos){ if(!listStreams->indexAt(pos).isValid()) { @@ -85,11 +88,13 @@ void RSSImp::displayRSSListMenu(const QPoint& pos){ void RSSImp::displayItemsListMenu(const QPoint&){ QMenu myItemListMenu(this); - QList selectedItems = listStreams->selectedItems(); + QList selectedItems = listNews->selectedItems(); if(selectedItems.size() > 0) { bool has_attachment = false; foreach(QTreeWidgetItem *item, selectedItems) { - if(listStreams->getRSSItemFromUrl(item->text(3))->getItem(item->text(2))->has_attachment()) { + qDebug("text(3) URL: %s", item->text(NEWS_URL_COL).toLocal8Bit().data()); + qDebug("text(2) TITLE: %s", item->text(NEWS_TITLE_COL).toLocal8Bit().data()); + if(listStreams->getRSSItemFromUrl(item->text(NEWS_URL_COL))->getItem(item->text(NEWS_TITLE_COL))->has_attachment()) { has_attachment = true; break; } @@ -284,7 +289,7 @@ void RSSImp::on_updateAllButton_clicked() { void RSSImp::downloadTorrent() { QList selected_items = listNews->selectedItems(); foreach(const QTreeWidgetItem* item, selected_items) { - RssItem* article = listStreams->getRSSItemFromUrl(item->text(3))->getItem(item->text(2)); + RssItem* article = listStreams->getRSSItemFromUrl(item->text(NEWS_URL_COL))->getItem(item->text(NEWS_TITLE_COL)); if(article->has_attachment()) { BTSession->downloadFromUrl(article->getTorrentUrl()); } else { @@ -299,7 +304,7 @@ void RSSImp::downloadTorrent() { void RSSImp::openNewsUrl() { QList selected_items = listNews->selectedItems(); foreach(const QTreeWidgetItem* item, selected_items) { - RssItem* news = listStreams->getRSSItemFromUrl(item->text(3))->getItem(item->text(2)); + RssItem* news = listStreams->getRSSItemFromUrl(item->text(NEWS_URL_COL))->getItem(item->text(NEWS_TITLE_COL)); QString link = news->getLink(); if(!link.isEmpty()) QDesktopServices::openUrl(QUrl(link)); @@ -436,17 +441,17 @@ void RSSImp::refreshNewsList(QTreeWidgetItem* item) { qDebug("Got the list of news"); foreach(RssItem* article, news){ QTreeWidgetItem* it = new QTreeWidgetItem(listNews); - it->setText(2, article->getTitle()); + it->setText(NEWS_TITLE_COL, article->getTitle()); if(article->has_attachment()) - it->setData(1, Qt::DecorationRole, QVariant(QIcon(":/Icons/oxygen/application-x-kgetlist.png"))); + it->setData(NEWS_TITLE_COL, Qt::DecorationRole, QVariant(QIcon(":/Icons/oxygen/application-x-kgetlist.png"))); else - it->setData(1, Qt::DecorationRole, QVariant(QIcon(":/Icons/oxygen/application-x-kgetlist-no.png"))); - it->setText(3, article->getParent()->getUrl()); + it->setData(NEWS_TITLE_COL, Qt::DecorationRole, QVariant(QIcon(":/Icons/oxygen/application-x-kgetlist-no.png"))); + it->setText(NEWS_URL_COL, article->getParent()->getUrl()); if(article->isRead()){ - it->setData(2, Qt::ForegroundRole, QVariant(QColor("grey"))); + it->setData(NEWS_TITLE_COL, Qt::ForegroundRole, QVariant(QColor("grey"))); it->setData(0, Qt::DecorationRole, QVariant(QIcon(":/Icons/sphere.png"))); }else{ - it->setData(2, Qt::ForegroundRole, QVariant(QColor("blue"))); + it->setData(NEWS_TITLE_COL, Qt::ForegroundRole, QVariant(QColor("blue"))); it->setData(0, Qt::DecorationRole, QVariant(QIcon(":/Icons/sphere2.png"))); } } @@ -465,8 +470,8 @@ void RSSImp::refreshTextBrowser(QTreeWidgetItem *item) { } previous_news = item; } - RssStream *stream = listStreams->getRSSItemFromUrl(item->text(3)); - RssItem* article = stream->getItem(item->text(2)); + RssStream *stream = listStreams->getRSSItemFromUrl(item->text(NEWS_URL_COL)); + RssItem* article = stream->getItem(item->text(NEWS_TITLE_COL)); QString html; html += "
"; html += "
"+article->getTitle() + "
"; @@ -480,11 +485,11 @@ void RSSImp::refreshTextBrowser(QTreeWidgetItem *item) { html += ""+article->getDescription()+"
"; textBrowser->setHtml(html); article->setRead(); - item->setData(2, Qt::ForegroundRole, QVariant(QColor("grey"))); + item->setData(NEWS_TITLE_COL, Qt::ForegroundRole, QVariant(QColor("grey"))); item->setData(0, Qt::DecorationRole, QVariant(QIcon(":/Icons/sphere.png"))); // Decrement feed nb unread news updateItemInfos(listStreams->getUnreadItem()); - updateItemInfos(listStreams->getTreeItemFromUrl(item->text(3))); + updateItemInfos(listStreams->getTreeItemFromUrl(item->text(NEWS_URL_COL))); } void RSSImp::saveSlidersPosition() { @@ -560,9 +565,8 @@ RSSImp::RSSImp(bittorrent *BTSession) : QWidget(), BTSession(BTSession){ listStreams = new FeedList(splitter_h, rssmanager); splitter_h->insertWidget(0, listStreams); - listNews->hideColumn(3); + listNews->hideColumn(NEWS_URL_COL); listNews->setColumnWidth(0, 16); - listNews->setColumnWidth(1, 20); fillFeedsList(); refreshNewsList(listStreams->currentItem());