From 86edda69c1334d684b9aa2c0ed069b1a4f8e694a Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 11 Jul 2014 07:01:08 +0200 Subject: [PATCH] Fix close-on-right-click for tabs. --- doc/BUGS | 2 -- qutebrowser/widgets/tabbedbrowser.py | 1 + qutebrowser/widgets/tabwidget.py | 21 ++++++++++++++++----- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/doc/BUGS b/doc/BUGS index 9e3215622..af785488e 100644 --- a/doc/BUGS +++ b/doc/BUGS @@ -20,8 +20,6 @@ Bugs - The concept of "default keybindings always get added" is confusing. -- tabbar -> close-on-right-click is broken - - seir sometimes sees "-- COMMAND MODE --" even though that should never happen. diff --git a/qutebrowser/widgets/tabbedbrowser.py b/qutebrowser/widgets/tabbedbrowser.py index f6c22b855..eb284af3f 100644 --- a/qutebrowser/widgets/tabbedbrowser.py +++ b/qutebrowser/widgets/tabbedbrowser.py @@ -102,6 +102,7 @@ class TabbedBrowser(TabWidget): def __init__(self, parent=None): super().__init__(parent) + self.tabBar().tab_rightclicked.connect(self.on_tab_close_requested) self.tabCloseRequested.connect(self.on_tab_close_requested) self.currentChanged.connect(self.on_current_changed) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) diff --git a/qutebrowser/widgets/tabwidget.py b/qutebrowser/widgets/tabwidget.py index aa0abbd9b..06fb876f2 100644 --- a/qutebrowser/widgets/tabwidget.py +++ b/qutebrowser/widgets/tabwidget.py @@ -19,7 +19,7 @@ """The tab widget used for TabbedBrowser from browser.py.""" -from PyQt5.QtCore import pyqtSlot, Qt, QSize +from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QSize from PyQt5.QtWidgets import QTabWidget, QTabBar, QSizePolicy from PyQt5.QtGui import QIcon, QPixmap @@ -121,7 +121,18 @@ class TabWidget(QTabWidget): class TabBar(QTabBar): - """Custom tabbar to close tabs on right click.""" + """Custom tabbar to close tabs on right click. + + Signals: + tab_rightclicked: Emitted when a tab was right-clicked and should be + closed. We use this rather than tabCloseRequested + because tabCloseRequested is sometimes connected by + Qt to the tabwidget and sometimes not, depending on + if close buttons are enabled. + arg: The tab index to be closed. + """ + + tab_rightclicked = pyqtSignal(int) def __repr__(self): return '<{} with {} tabs>'.format(self.__class__.__name__, @@ -129,8 +140,7 @@ class TabBar(QTabBar): def mousePressEvent(self, e): """Override mousePressEvent to emit tabCloseRequested on rightclick.""" - if (e.button() != Qt.RightButton or - not config.get('tabbar', 'close-on-right-click')): + if e.button() != Qt.RightButton: super().mousePressEvent(e) return idx = self.tabAt(e.pos()) @@ -138,7 +148,8 @@ class TabBar(QTabBar): super().mousePressEvent(e) return e.accept() - self.tabCloseRequested.emit(idx) + if config.get('tabbar', 'close-on-right-click'): + self.tab_rightclicked.emit(idx) def tabSizeHint(self, index): """Override tabSizeHint so all tabs are the same size.