diff options
author | kh1 <karsten.heimrich@digia.com> | 2013-02-11 13:26:07 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-02-11 13:35:49 +0100 |
commit | 7598c22441b357d8bdb768f4ec31deb0cb6655e9 (patch) | |
tree | f9a390ef58135c60363e3b3c44cea349da7fb46a | |
parent | 8961b476885ce537048bf9f07d928f01ba12bfa3 (diff) | |
download | qttools-7598c22441b357d8bdb768f4ec31deb0cb6655e9.tar.gz |
Ctrl+W shortcut on last open tab causes Assistant to crash.
Task-number: QTBUG-29499
This happend as nobody did inform the menu about the page changes,
the shortcut remained active even for the last viewer. Also make
some constructors and functions private, so we can no longer mess
from the outside with the viewers, except thru OpenPagesManager.
Change-Id: I2675996d4b30ab8b1db657e5157b497a73b96196
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r-- | src/assistant/assistant/centralwidget.h | 16 | ||||
-rw-r--r-- | src/assistant/assistant/mainwindow.cpp | 16 | ||||
-rw-r--r-- | src/assistant/assistant/mainwindow.h | 2 | ||||
-rw-r--r-- | src/assistant/assistant/openpagesmanager.cpp | 8 | ||||
-rw-r--r-- | src/assistant/assistant/openpagesmanager.h | 7 | ||||
-rw-r--r-- | src/assistant/assistant/openpagesmodel.h | 8 |
6 files changed, 38 insertions, 19 deletions
diff --git a/src/assistant/assistant/centralwidget.h b/src/assistant/assistant/centralwidget.h index c3ef835d7..f0d524b36 100644 --- a/src/assistant/assistant/centralwidget.h +++ b/src/assistant/assistant/centralwidget.h @@ -57,8 +57,9 @@ class QPrinter; class TabBar : public QTabBar { Q_OBJECT + friend class CentralWidget; + public: - TabBar(QWidget *parent = 0); ~TabBar(); int addNewTab(const QString &title); @@ -72,6 +73,9 @@ signals: void currentTabChanged(HelpViewer *viewer); void addBookmark(const QString &title, const QString &url); +private: + TabBar(QWidget *parent = 0); + private slots: void slotCurrentChanged(int index); void slotTabCloseRequested(int index); @@ -81,6 +85,7 @@ private slots: class CentralWidget : public QWidget { Q_OBJECT + friend class OpenPagesManager; public: CentralWidget(QWidget *parent = 0); @@ -97,12 +102,7 @@ public: HelpViewer *viewerAt(int index) const; HelpViewer *currentHelpViewer() const; - - void addPage(HelpViewer *page, bool fromSearch = false); - void removePage(int index); - int currentIndex() const; - void setCurrentPage(HelpViewer *page); void connectTabBar(); @@ -162,6 +162,10 @@ private: void connectSignals(HelpViewer *page); bool eventFilter(QObject *object, QEvent *e); + void removePage(int index); + void setCurrentPage(HelpViewer *page); + void addPage(HelpViewer *page, bool fromSearch = false); + private: #ifndef QT_NO_PRINTER QPrinter *m_printer; diff --git a/src/assistant/assistant/mainwindow.cpp b/src/assistant/assistant/mainwindow.cpp index 6f20e8221..0bffe93ce 100644 --- a/src/assistant/assistant/mainwindow.cpp +++ b/src/assistant/assistant/mainwindow.cpp @@ -473,15 +473,15 @@ void MainWindow::setupActions() #endif QMenu *menu = menuBar()->addMenu(tr("&File")); - connect(menu, SIGNAL(aboutToShow()), this, SLOT(aboutToShowFileMenu())); - OpenPagesManager * const openPages = OpenPagesManager::instance(); - m_newTabAction - = menu->addAction(tr("New &Tab"), openPages, SLOT(createPage())); + m_newTabAction = menu->addAction(tr("New &Tab"), openPages, SLOT(createPage())); m_newTabAction->setShortcut(QKeySequence::AddTab); m_closeTabAction = menu->addAction(tr("&Close Tab"), openPages, SLOT(closeCurrentPage())); m_closeTabAction->setShortcuts(QKeySequence::Close); + m_closeTabAction->setEnabled(openPages->pageCount() > 1); + connect(openPages, SIGNAL(pageClosed()), this, SLOT(handlePageCountChanged())); + connect(openPages, SIGNAL(pageAdded(int)), this, SLOT(handlePageCountChanged())); menu->addSeparator(); @@ -1129,13 +1129,9 @@ void MainWindow::registerDocumentation(const QString &component, } } -void MainWindow::aboutToShowFileMenu() +void MainWindow::handlePageCountChanged() { - OpenPagesManager * const openPages = OpenPagesManager::instance(); - if (openPages->pageCount() > 1) - m_closeTabAction->setEnabled(true); - else - m_closeTabAction->setEnabled(false); + m_closeTabAction->setEnabled(OpenPagesManager::instance()->pageCount() > 1); } QT_END_NAMESPACE diff --git a/src/assistant/assistant/mainwindow.h b/src/assistant/assistant/mainwindow.h index ec35cf46e..891a0410c 100644 --- a/src/assistant/assistant/mainwindow.h +++ b/src/assistant/assistant/mainwindow.h @@ -136,7 +136,7 @@ private: private slots: void showBookmarksDockWidget(); void hideBookmarksDockWidget(); - void aboutToShowFileMenu(); + void handlePageCountChanged(); private: QWidget *m_bookmarkWidget; diff --git a/src/assistant/assistant/openpagesmanager.cpp b/src/assistant/assistant/openpagesmanager.cpp index f86927cc9..0d8f71bff 100644 --- a/src/assistant/assistant/openpagesmanager.cpp +++ b/src/assistant/assistant/openpagesmanager.cpp @@ -196,11 +196,15 @@ HelpViewer *OpenPagesManager::createPage(const QUrl &url, bool fromSearch) if (HelpViewer::launchWithExternalApp(url)) return 0; + emit aboutToAddPage(); + m_model->addPage(url); const int index = m_model->rowCount() - 1; HelpViewer * const page = m_model->pageAt(index); CentralWidget::instance()->addPage(page, fromSearch); setCurrentPage(index); + + emit pageAdded(index); return page; } @@ -289,9 +293,13 @@ void OpenPagesManager::setCurrentPage(HelpViewer *page) void OpenPagesManager::removePage(int index) { TRACE_OBJ + emit aboutToClosePage(index); + CentralWidget::instance()->removePage(index); m_model->removePage(index); m_openPagesWidget->selectCurrentPage(); + + emit pageClosed(); } diff --git a/src/assistant/assistant/openpagesmanager.h b/src/assistant/assistant/openpagesmanager.h index 6565b6a5a..b14b49b6b 100644 --- a/src/assistant/assistant/openpagesmanager.h +++ b/src/assistant/assistant/openpagesmanager.h @@ -86,6 +86,13 @@ public slots: void closePage(HelpViewer *page); void setCurrentPage(HelpViewer *page); +signals: + void aboutToAddPage(); + void pageAdded(int index); + + void pageClosed(); + void aboutToClosePage(int index); + private slots: void setCurrentPage(const QModelIndex &index); void closePage(const QModelIndex &index); diff --git a/src/assistant/assistant/openpagesmodel.h b/src/assistant/assistant/openpagesmodel.h index 2d955126f..a64bdd9ed 100644 --- a/src/assistant/assistant/openpagesmodel.h +++ b/src/assistant/assistant/openpagesmodel.h @@ -42,6 +42,8 @@ #ifndef OPENPAGESMODEL_H #define OPENPAGESMODEL_H +#include "openpagesmanager.h" + #include <QtCore/QAbstractTableModel> #include <QtCore/QList> @@ -53,9 +55,8 @@ class QUrl; class OpenPagesModel : public QAbstractTableModel { Q_OBJECT + friend class OpenPagesManager; public: - OpenPagesModel(QObject *parent); - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; @@ -68,6 +69,9 @@ private slots: void handleTitleChanged(); private: + OpenPagesModel(QObject *parent); + +private: QList<HelpViewer *> m_pages; }; |