diff --git a/src/lib/webview/tabwidget.cpp b/src/lib/webview/tabwidget.cpp index 831352a1b..1b99b0c49 100644 --- a/src/lib/webview/tabwidget.cpp +++ b/src/lib/webview/tabwidget.cpp @@ -35,7 +35,6 @@ #include #include -#include #include #include #include @@ -95,6 +94,19 @@ void AddTabButton::dropEvent(QDropEvent* event) } } +void MenuTabs::mouseReleaseEvent(QMouseEvent* event) +{ + if (event->button() == Qt::MiddleButton) { + QAction* action = actionAt(event->pos()); + if (action) { + emit closeTab(action->data().toInt()); + action->setEnabled(false); + event->accept(); + } + } + QMenu::mouseReleaseEvent(event); +} + TabWidget::TabWidget(QupZilla* mainClass, QWidget* parent) : QTabWidget(parent) , p_QupZilla(mainClass) @@ -126,7 +138,7 @@ TabWidget::TabWidget(QupZilla* mainClass, QWidget* parent) m_buttonListTabs = new ToolButton(this); m_buttonListTabs->setObjectName("tabwidget-button-opentabs"); - m_menuTabs = new QMenu(this); + m_menuTabs = new MenuTabs(this); m_buttonListTabs->setMenu(m_menuTabs); m_buttonListTabs->setPopupMode(QToolButton::InstantPopup); m_buttonListTabs->setToolTip(tr("List of tabs")); @@ -137,6 +149,7 @@ TabWidget::TabWidget(QupZilla* mainClass, QWidget* parent) connect(m_buttonAddTab, SIGNAL(clicked()), p_QupZilla, SLOT(addTab())); connect(m_menuTabs, SIGNAL(aboutToShow()), this, SLOT(aboutToShowClosedTabsMenu())); + connect(m_menuTabs, SIGNAL(closeTab(int)), this, SLOT(closeTab(int))); loadSettings(); } diff --git a/src/lib/webview/tabwidget.h b/src/lib/webview/tabwidget.h index ee6805e22..282d4553d 100644 --- a/src/lib/webview/tabwidget.h +++ b/src/lib/webview/tabwidget.h @@ -21,6 +21,7 @@ #include #include #include +#include #include "toolbutton.h" #include "qz_namespace.h" @@ -50,6 +51,19 @@ private: TabWidget* m_tabWidget; }; +class QT_QUPZILLA_EXPORT MenuTabs : public QMenu +{ + Q_OBJECT +public: + explicit MenuTabs(QWidget *parent = 0) : QMenu(parent) {} + +signals: + void closeTab(int); + +private: + void mouseReleaseEvent(QMouseEvent* event); +}; + class QT_QUPZILLA_EXPORT TabWidget : public QTabWidget { Q_OBJECT @@ -151,7 +165,7 @@ private: bool m_isRestoringState; TabBar* m_tabBar; - QMenu* m_menuTabs; + MenuTabs* m_menuTabs; ToolButton* m_buttonListTabs; AddTabButton* m_buttonAddTab; ClosedTabsManager* m_closedTabsManager;