summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@digia.com>2013-02-11 13:26:07 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-11 13:35:49 +0100
commit7598c22441b357d8bdb768f4ec31deb0cb6655e9 (patch)
treef9a390ef58135c60363e3b3c44cea349da7fb46a
parent8961b476885ce537048bf9f07d928f01ba12bfa3 (diff)
downloadqttools-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.h16
-rw-r--r--src/assistant/assistant/mainwindow.cpp16
-rw-r--r--src/assistant/assistant/mainwindow.h2
-rw-r--r--src/assistant/assistant/openpagesmanager.cpp8
-rw-r--r--src/assistant/assistant/openpagesmanager.h7
-rw-r--r--src/assistant/assistant/openpagesmodel.h8
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;
};