From 33f4631f91ec6f399d05f51d0f61b7c1784cf0f2 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Tue, 14 Aug 2018 21:09:18 +0800 Subject: [PATCH] EditWindow: support middle click to close a tab --- src/resources/vnote.ini | 3 +++ src/vconfigmanager.cpp | 3 +++ src/vconfigmanager.h | 10 ++++++++++ src/veditwindow.cpp | 20 ++++++++++++++++++++ src/veditwindow.h | 2 ++ 5 files changed, 38 insertions(+) diff --git a/src/resources/vnote.ini b/src/resources/vnote.ini index 3cfd3045..27d96791 100644 --- a/src/resources/vnote.ini +++ b/src/resources/vnote.ini @@ -143,6 +143,9 @@ confirm_reload_folder=true ; Whether double click on a tab to close it double_click_close_tab=true +; Whether middle click on a tab to close it +middle_click_close_tab=true + ; Whether enable tools dock widget tools_dock_checked=true diff --git a/src/vconfigmanager.cpp b/src/vconfigmanager.cpp index e3354f0c..ddcf9425 100644 --- a/src/vconfigmanager.cpp +++ b/src/vconfigmanager.cpp @@ -232,6 +232,9 @@ void VConfigManager::initialize() m_doubleClickCloseTab = getConfigFromSettings("global", "double_click_close_tab").toBool(); + m_middleClickCloseTab = getConfigFromSettings("global", + "middle_click_close_tab").toBool(); + int tmpStartupPageMode = getConfigFromSettings("global", "startup_page_type").toInt(); if (tmpStartupPageMode < (int)StartupPageType::Invalid diff --git a/src/vconfigmanager.h b/src/vconfigmanager.h index 3f40fbe0..a30dcd4e 100644 --- a/src/vconfigmanager.h +++ b/src/vconfigmanager.h @@ -378,6 +378,8 @@ public: bool getDoubleClickCloseTab() const; + bool getMiddleClickClostTab() const; + StartupPageType getStartupPageType() const; void setStartupPageType(StartupPageType p_type); @@ -873,6 +875,9 @@ private: // Whether double click on a tab to close it. bool m_doubleClickCloseTab; + // Whether middle click on a tab to close it. + bool m_middleClickCloseTab; + // Type of the pages to open on startup. StartupPageType m_startupPageType; @@ -2085,6 +2090,11 @@ inline bool VConfigManager::getDoubleClickCloseTab() const return m_doubleClickCloseTab; } +inline bool VConfigManager::getMiddleClickClostTab() const +{ + return m_middleClickCloseTab; +} + inline StartupPageType VConfigManager::getStartupPageType() const { return m_startupPageType; diff --git a/src/veditwindow.cpp b/src/veditwindow.cpp index d24efca9..766897c2 100644 --- a/src/veditwindow.cpp +++ b/src/veditwindow.cpp @@ -47,6 +47,10 @@ VEditWindow::VEditWindow(VEditArea *editArea, QWidget *parent) QTabBar *bar = tabBar(); bar->setContextMenuPolicy(Qt::CustomContextMenu); + if (g_config->getMiddleClickClostTab()) { + bar->installEventFilter(this); + } + connect(bar, &QTabBar::customContextMenuRequested, this, &VEditWindow::tabbarContextMenuRequested); @@ -1305,3 +1309,19 @@ QVector VEditWindow::getTabsNavigationInfo() const return infos; } + +bool VEditWindow::eventFilter(QObject *p_obj, QEvent *p_event) +{ + if (p_obj == tabBar() && p_event->type() == QEvent::MouseButtonRelease) { + QMouseEvent *me = static_cast(p_event); + if (me->button() == Qt::MiddleButton) { + // Close current tab. + int idx = tabBar()->tabAt(me->pos()); + if (idx != -1) { + closeTab(idx); + } + } + } + + return QTabWidget::eventFilter(p_obj, p_event); +} diff --git a/src/veditwindow.h b/src/veditwindow.h index 7f582781..7ed482e7 100644 --- a/src/veditwindow.h +++ b/src/veditwindow.h @@ -110,6 +110,8 @@ protected: // Drop the data. void dropEvent(QDropEvent *p_event) Q_DECL_OVERRIDE; + bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE; + signals: // Status of current VEditTab has update. void tabStatusUpdated(const VEditTabInfo &p_info);