diff --git a/src/shared/help/contentwindow.cpp b/src/shared/help/contentwindow.cpp index ef3479f170d8a17b6bccb2517b99eaca79fdb1a1..f61e09f67f91dccee24b6fb72ea6de762b34f36a 100644 --- a/src/shared/help/contentwindow.cpp +++ b/src/shared/help/contentwindow.cpp @@ -29,7 +29,9 @@ #include "contentwindow.h" +#include "centralwidget.h" #include "helpmanager.h" +#include "helpviewer.h" #include "openpagesmanager.h" #include <QtGui/QLayout> @@ -102,18 +104,21 @@ bool ContentWindow::eventFilter(QObject *o, QEvent *e) if (m_contentWidget && o == m_contentWidget->viewport() && e->type() == QEvent::MouseButtonRelease) { QMouseEvent *me = static_cast<QMouseEvent*>(e); - QModelIndex index = m_contentWidget->indexAt(me->pos()); QItemSelectionModel *sm = m_contentWidget->selectionModel(); + if (!me || !sm) + return QWidget::eventFilter(o, e); Qt::MouseButtons button = me->button(); - if (index.isValid() && (sm && sm->isSelected(index))) { + const QModelIndex &index = m_contentWidget->indexAt(me->pos()); + + if (index.isValid() && sm->isSelected(index)) { if ((button == Qt::LeftButton && (me->modifiers() & Qt::ControlModifier)) || (button == Qt::MidButton)) { QHelpContentModel *contentModel = qobject_cast<QHelpContentModel*>(m_contentWidget->model()); if (contentModel) { QHelpContentItem *itm = contentModel->contentItemAt(index); - if (itm && !isPdfFile(itm)) + if (itm && HelpViewer::canOpenPage(itm->url().path())) OpenPagesManager::instance().createPage(itm->url()); } } else if (button == Qt::LeftButton) { @@ -137,7 +142,7 @@ void ContentWindow::showContextMenu(const QPoint &pos) QMenu menu; QAction *curTab = menu.addAction(tr("Open Link")); QAction *newTab = menu.addAction(tr("Open Link as New Page")); - if (isPdfFile(itm)) + if (!HelpViewer::canOpenPage(itm->url().path())) newTab->setEnabled(false); menu.move(m_contentWidget->mapToGlobal(pos)); @@ -155,14 +160,10 @@ void ContentWindow::itemClicked(const QModelIndex &index) qobject_cast<QHelpContentModel*>(m_contentWidget->model()); if (contentModel) { - QHelpContentItem *itm = contentModel->contentItemAt(index); - if (itm) - emit linkActivated(itm->url()); + if (QHelpContentItem *itm = contentModel->contentItemAt(index)) { + const QUrl &url = itm->url(); + if (url != CentralWidget::instance()->currentHelpViewer()->source()) + emit linkActivated(itm->url()); + } } } - -bool ContentWindow::isPdfFile(QHelpContentItem *item) const -{ - const QString &path = item->url().path(); - return path.endsWith(QLatin1String(".pdf"), Qt::CaseInsensitive); -} diff --git a/src/shared/help/contentwindow.h b/src/shared/help/contentwindow.h index 4bfd0d0f6a9a00655ebb4fe0178ff8370c675b0e..df98dac82e24b57d8647f4cc351e0629266026cb 100644 --- a/src/shared/help/contentwindow.h +++ b/src/shared/help/contentwindow.h @@ -62,7 +62,6 @@ private slots: private: bool eventFilter(QObject *o, QEvent *e); - bool isPdfFile(QHelpContentItem *item) const; QHelpContentWidget *m_contentWidget; int m_expandDepth; diff --git a/src/shared/help/indexwindow.cpp b/src/shared/help/indexwindow.cpp index b12d517c6d3319d4e1396240922a89bc0bf8eb22..d58188b3f13313b327a970f17dc1d60244a0aa7b 100644 --- a/src/shared/help/indexwindow.cpp +++ b/src/shared/help/indexwindow.cpp @@ -30,6 +30,7 @@ #include "centralwidget.h" #include "helpmanager.h" +#include "helpviewer.h" #include "indexwindow.h" #include "openpagesmanager.h" #include "topicchooser.h" @@ -209,8 +210,8 @@ void IndexWindow::open(QHelpIndexWidget* indexWidget, const QModelIndex &index) return; } - if (url.path().endsWith(QLatin1String(".pdf"), Qt::CaseInsensitive)) - Help::Internal::CentralWidget::instance()->setSource(url); + if (!HelpViewer::canOpenPage(url.path())) + CentralWidget::instance()->setSource(url); else OpenPagesManager::instance().createPage(url); }