summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2017-07-04 17:24:10 +0200
committerGitHub <noreply@github.com>2017-07-04 17:24:10 +0200
commit45b1285402349e180e8f0a58978ef3148d0d1875 (patch)
treec5f2a0111159b9c1fe67fe9da4b2125c6d707af4
parent629038632c6cc8c0ecd8b6a7a32d59ef4d5b9d02 (diff)
parent2fbadc46d21e5a76d94904e951105464c1acebfb (diff)
downloadqutebrowser-45b1285402349e180e8f0a58978ef3148d0d1875.tar.gz
qutebrowser-45b1285402349e180e8f0a58978ef3148d0d1875.zip
Merge pull request #2765 from jgkamat/jay/tab-crashes
Refactor set_tab_pinned to take a tab widget.
-rw-r--r--qutebrowser/browser/commands.py6
-rw-r--r--qutebrowser/mainwindow/tabbedbrowser.py2
-rw-r--r--qutebrowser/mainwindow/tabwidget.py9
-rw-r--r--qutebrowser/misc/sessions.py2
-rw-r--r--tests/end2end/features/tabs.feature10
5 files changed, 19 insertions, 10 deletions
diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py
index 3d8516fe2..0b448a845 100644
--- a/qutebrowser/browser/commands.py
+++ b/qutebrowser/browser/commands.py
@@ -280,9 +280,7 @@ class CommandDispatcher:
return
to_pin = not tab.data.pinned
- tab_index = self._current_index() if count is None else count - 1
- cmdutils.check_overflow(tab_index + 1, 'int')
- self._tabbed_browser.set_tab_pinned(tab_index, to_pin)
+ self._tabbed_browser.set_tab_pinned(tab, to_pin)
@cmdutils.register(instance='command-dispatcher', name='open',
maxsplit=0, scope='window')
@@ -515,7 +513,7 @@ class CommandDispatcher:
newtab.data.keep_icon = True
newtab.history.deserialize(history)
newtab.zoom.set_factor(curtab.zoom.factor())
- new_tabbed_browser.set_tab_pinned(idx, curtab.data.pinned)
+ new_tabbed_browser.set_tab_pinned(newtab, curtab.data.pinned)
return newtab
@cmdutils.register(instance='command-dispatcher', scope='window')
diff --git a/qutebrowser/mainwindow/tabbedbrowser.py b/qutebrowser/mainwindow/tabbedbrowser.py
index e0468330e..94508ab63 100644
--- a/qutebrowser/mainwindow/tabbedbrowser.py
+++ b/qutebrowser/mainwindow/tabbedbrowser.py
@@ -342,7 +342,7 @@ class TabbedBrowser(tabwidget.TabWidget):
newtab = self.tabopen(url, background=False, idx=idx)
newtab.history.deserialize(history_data)
- self.set_tab_pinned(idx, pinned)
+ self.set_tab_pinned(newtab, pinned)
@pyqtSlot('QUrl', bool)
def openurl(self, url, newtab):
diff --git a/qutebrowser/mainwindow/tabwidget.py b/qutebrowser/mainwindow/tabwidget.py
index 2c4eb6eab..c7823f84e 100644
--- a/qutebrowser/mainwindow/tabwidget.py
+++ b/qutebrowser/mainwindow/tabwidget.py
@@ -26,7 +26,7 @@ from PyQt5.QtCore import (pyqtSignal, pyqtSlot, Qt, QSize, QRect, QPoint,
QTimer, QUrl)
from PyQt5.QtWidgets import (QTabWidget, QTabBar, QSizePolicy, QCommonStyle,
QStyle, QStylePainter, QStyleOptionTab,
- QStyleFactory)
+ QStyleFactory, QWidget)
from PyQt5.QtGui import QIcon, QPalette, QColor
from qutebrowser.utils import qtutils, objreg, utils, usertypes, log
@@ -94,17 +94,18 @@ class TabWidget(QTabWidget):
bar.set_tab_data(idx, 'indicator-color', color)
bar.update(bar.tabRect(idx))
- def set_tab_pinned(self, idx, pinned, *, loading=False):
+ def set_tab_pinned(self, tab: QWidget,
+ pinned: bool, *, loading: bool = False) -> None:
"""Set the tab status as pinned.
Args:
- idx: The tab index.
+ tab: The tab to pin
pinned: Pinned tab state to set.
loading: Whether to ignore current data state when
counting pinned_count.
"""
bar = self.tabBar()
- tab = self.widget(idx)
+ idx = self.indexOf(tab)
# Only modify pinned_count if we had a change
# always modify pinned_count if we are loading
diff --git a/qutebrowser/misc/sessions.py b/qutebrowser/misc/sessions.py
index 5ce4ee66d..26656e1ee 100644
--- a/qutebrowser/misc/sessions.py
+++ b/qutebrowser/misc/sessions.py
@@ -406,7 +406,7 @@ class SessionManager(QObject):
tab_to_focus = i
if new_tab.data.pinned:
tabbed_browser.set_tab_pinned(
- i, new_tab.data.pinned, loading=True)
+ new_tab, new_tab.data.pinned, loading=True)
if tab_to_focus is not None:
tabbed_browser.setCurrentIndex(tab_to_focus)
if win.get('active', False):
diff --git a/tests/end2end/features/tabs.feature b/tests/end2end/features/tabs.feature
index 9980b448f..8097f390e 100644
--- a/tests/end2end/features/tabs.feature
+++ b/tests/end2end/features/tabs.feature
@@ -1073,6 +1073,16 @@ Feature: Tab management
- data/numbers/2.txt (pinned)
- data/numbers/3.txt (active)
+ Scenario: :tab-pin with an invalid count
+ When I open data/numbers/1.txt
+ And I open data/numbers/2.txt in a new tab
+ And I open data/numbers/3.txt in a new tab
+ And I run :tab-pin with count 23
+ Then the following tabs should be open:
+ - data/numbers/1.txt
+ - data/numbers/2.txt
+ - data/numbers/3.txt (active)
+
Scenario: Pinned :tab-close prompt yes
When I open data/numbers/1.txt
And I run :tab-pin