diff --git a/README.asciidoc b/README.asciidoc index 0f28676ac..272828b37 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -172,6 +172,7 @@ Contributors, sorted by the number of commits in descending order: * Austin Anderson * Jimmy * Niklas Haas +* Maciej Wołczyk * Spreadyy * Alexey "Averrin" Nabrodov * nanjekyejoannah @@ -181,7 +182,6 @@ Contributors, sorted by the number of commits in descending order: * John ShaggyTwoDope Jenkins * Clayton Craft * Peter Vilim -* Maciej Wołczyk * knaggita * Oliver Caldwell * Julian Weigt diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index 0d977a30f..e8f15720d 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -1028,21 +1028,10 @@ class CommandDispatcher: raise cmdexc.CommandError("Can't move tab to position {}!".format( new_idx + 1)) - tab = self._current_widget() cur_idx = self._current_index() - icon = self._tabbed_browser.tabIcon(cur_idx) - label = self._tabbed_browser.page_title(cur_idx) cmdutils.check_overflow(cur_idx, 'int') cmdutils.check_overflow(new_idx, 'int') - self._tabbed_browser.setUpdatesEnabled(False) - try: - color = self._tabbed_browser.tab_indicator_color(cur_idx) - self._tabbed_browser.removeTab(cur_idx) - self._tabbed_browser.insertTab(new_idx, tab, icon, label) - self._set_current_index(new_idx) - self._tabbed_browser.set_tab_indicator_color(new_idx, color) - finally: - self._tabbed_browser.setUpdatesEnabled(True) + self._tabbed_browser.tabBar().moveTab(cur_idx, new_idx) @cmdutils.register(instance='command-dispatcher', scope='window', maxsplit=0, no_replace_variables=True) diff --git a/qutebrowser/completion/models/miscmodels.py b/qutebrowser/completion/models/miscmodels.py index 14a48c399..450549057 100644 --- a/qutebrowser/completion/models/miscmodels.py +++ b/qutebrowser/completion/models/miscmodels.py @@ -160,6 +160,7 @@ class TabCompletionModel(base.BaseCompletionModel): tab.title_changed.connect(self.rebuild) tab.shutting_down.connect(self.delayed_rebuild) tabbed_browser.new_tab.connect(self.on_new_tab) + tabbed_browser.tabBar().tabMoved.connect(self.rebuild) objreg.get("app").new_window.connect(self.on_new_window) self.rebuild() diff --git a/tests/end2end/features/completion.feature b/tests/end2end/features/completion.feature index 0cc23a215..87db94e8d 100644 --- a/tests/end2end/features/completion.feature +++ b/tests/end2end/features/completion.feature @@ -102,3 +102,15 @@ Feature: Using completion And I run :completion-item-del Then the following tabs should be open: - data/hello.txt (active) + + Scenario: Go to tab after moving a tab + Given I have a fresh instance + When I open data/hello.txt + And I open data/hello2.txt in a new tab + # Tricking completer into not updating tabs + And I run :set-cmd-text -s :buffer + And I run :tab-move 1 + And I run :buffer hello2.txt + Then the following tabs should be open: + - data/hello2.txt (active) + - data/hello.txt diff --git a/tests/helpers/stubs.py b/tests/helpers/stubs.py index 50f4e545e..dfbcc550d 100644 --- a/tests/helpers/stubs.py +++ b/tests/helpers/stubs.py @@ -27,7 +27,7 @@ from unittest import mock from PyQt5.QtCore import pyqtSignal, QPoint, QProcess, QObject from PyQt5.QtNetwork import (QNetworkRequest, QAbstractNetworkCache, QNetworkCacheMetaData) -from PyQt5.QtWidgets import QCommonStyle, QLineEdit, QWidget +from PyQt5.QtWidgets import QCommonStyle, QLineEdit, QWidget, QTabBar from qutebrowser.browser import browsertab, history from qutebrowser.config import configexc @@ -571,6 +571,7 @@ class TabbedBrowserStub(QObject): super().__init__(parent) self.tabs = [] self.shutting_down = False + self._qtabbar = QTabBar() def count(self): return len(self.tabs) @@ -584,6 +585,9 @@ class TabbedBrowserStub(QObject): def on_tab_close_requested(self, idx): del self.tabs[idx] + def tabBar(self): + return self._qtabbar + class ApplicationStub(QObject):