Merge remote-tracking branch 'origin/pr/3613'
This commit is contained in:
commit
c590648077
@ -340,7 +340,7 @@ def _open_startpage(win_id=None):
|
|||||||
for cur_win_id in list(window_ids): # Copying as the dict could change
|
for cur_win_id in list(window_ids): # Copying as the dict could change
|
||||||
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
||||||
window=cur_win_id)
|
window=cur_win_id)
|
||||||
if tabbed_browser.count() == 0:
|
if tabbed_browser.widget.count() == 0:
|
||||||
log.init.debug("Opening start pages")
|
log.init.debug("Opening start pages")
|
||||||
for url in config.val.url.start_pages:
|
for url in config.val.url.start_pages:
|
||||||
tabbed_browser.tabopen(url)
|
tabbed_browser.tabopen(url)
|
||||||
|
@ -73,16 +73,16 @@ class CommandDispatcher:
|
|||||||
|
|
||||||
def _count(self):
|
def _count(self):
|
||||||
"""Convenience method to get the widget count."""
|
"""Convenience method to get the widget count."""
|
||||||
return self._tabbed_browser.count()
|
return self._tabbed_browser.widget.count()
|
||||||
|
|
||||||
def _set_current_index(self, idx):
|
def _set_current_index(self, idx):
|
||||||
"""Convenience method to set the current widget index."""
|
"""Convenience method to set the current widget index."""
|
||||||
cmdutils.check_overflow(idx, 'int')
|
cmdutils.check_overflow(idx, 'int')
|
||||||
self._tabbed_browser.setCurrentIndex(idx)
|
self._tabbed_browser.widget.setCurrentIndex(idx)
|
||||||
|
|
||||||
def _current_index(self):
|
def _current_index(self):
|
||||||
"""Convenience method to get the current widget index."""
|
"""Convenience method to get the current widget index."""
|
||||||
return self._tabbed_browser.currentIndex()
|
return self._tabbed_browser.widget.currentIndex()
|
||||||
|
|
||||||
def _current_url(self):
|
def _current_url(self):
|
||||||
"""Convenience method to get the current url."""
|
"""Convenience method to get the current url."""
|
||||||
@ -101,7 +101,7 @@ class CommandDispatcher:
|
|||||||
|
|
||||||
def _current_widget(self):
|
def _current_widget(self):
|
||||||
"""Get the currently active widget from a command."""
|
"""Get the currently active widget from a command."""
|
||||||
widget = self._tabbed_browser.currentWidget()
|
widget = self._tabbed_browser.widget.currentWidget()
|
||||||
if widget is None:
|
if widget is None:
|
||||||
raise cmdexc.CommandError("No WebView available yet!")
|
raise cmdexc.CommandError("No WebView available yet!")
|
||||||
return widget
|
return widget
|
||||||
@ -147,10 +147,10 @@ class CommandDispatcher:
|
|||||||
None if no widget was found.
|
None if no widget was found.
|
||||||
"""
|
"""
|
||||||
if count is None:
|
if count is None:
|
||||||
return self._tabbed_browser.currentWidget()
|
return self._tabbed_browser.widget.currentWidget()
|
||||||
elif 1 <= count <= self._count():
|
elif 1 <= count <= self._count():
|
||||||
cmdutils.check_overflow(count + 1, 'int')
|
cmdutils.check_overflow(count + 1, 'int')
|
||||||
return self._tabbed_browser.widget(count - 1)
|
return self._tabbed_browser.widget.widget(count - 1)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -163,7 +163,7 @@ class CommandDispatcher:
|
|||||||
if not show_error:
|
if not show_error:
|
||||||
return
|
return
|
||||||
raise cmdexc.CommandError("No last focused tab!")
|
raise cmdexc.CommandError("No last focused tab!")
|
||||||
idx = self._tabbed_browser.indexOf(tab)
|
idx = self._tabbed_browser.widget.indexOf(tab)
|
||||||
if idx == -1:
|
if idx == -1:
|
||||||
raise cmdexc.CommandError("Last focused tab vanished!")
|
raise cmdexc.CommandError("Last focused tab vanished!")
|
||||||
self._set_current_index(idx)
|
self._set_current_index(idx)
|
||||||
@ -212,7 +212,7 @@ class CommandDispatcher:
|
|||||||
what's configured in 'tabs.select_on_remove'.
|
what's configured in 'tabs.select_on_remove'.
|
||||||
count: The tab index to close, or None
|
count: The tab index to close, or None
|
||||||
"""
|
"""
|
||||||
tabbar = self._tabbed_browser.tabBar()
|
tabbar = self._tabbed_browser.widget.tabBar()
|
||||||
selection_override = self._get_selection_override(prev, next_,
|
selection_override = self._get_selection_override(prev, next_,
|
||||||
opposite)
|
opposite)
|
||||||
|
|
||||||
@ -264,7 +264,7 @@ class CommandDispatcher:
|
|||||||
return
|
return
|
||||||
|
|
||||||
to_pin = not tab.data.pinned
|
to_pin = not tab.data.pinned
|
||||||
self._tabbed_browser.set_tab_pinned(tab, to_pin)
|
self._tabbed_browser.widget.set_tab_pinned(tab, to_pin)
|
||||||
|
|
||||||
@cmdutils.register(instance='command-dispatcher', name='open',
|
@cmdutils.register(instance='command-dispatcher', name='open',
|
||||||
maxsplit=0, scope='window')
|
maxsplit=0, scope='window')
|
||||||
@ -483,7 +483,8 @@ class CommandDispatcher:
|
|||||||
"""
|
"""
|
||||||
cmdutils.check_exclusive((bg, window), 'bw')
|
cmdutils.check_exclusive((bg, window), 'bw')
|
||||||
curtab = self._current_widget()
|
curtab = self._current_widget()
|
||||||
cur_title = self._tabbed_browser.page_title(self._current_index())
|
cur_title = self._tabbed_browser.widget.page_title(
|
||||||
|
self._current_index())
|
||||||
try:
|
try:
|
||||||
history = curtab.history.serialize()
|
history = curtab.history.serialize()
|
||||||
except browsertab.WebTabError as e:
|
except browsertab.WebTabError as e:
|
||||||
@ -499,18 +500,18 @@ class CommandDispatcher:
|
|||||||
newtab = new_tabbed_browser.tabopen(background=bg)
|
newtab = new_tabbed_browser.tabopen(background=bg)
|
||||||
new_tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
new_tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
||||||
window=newtab.win_id)
|
window=newtab.win_id)
|
||||||
idx = new_tabbed_browser.indexOf(newtab)
|
idx = new_tabbed_browser.widget.indexOf(newtab)
|
||||||
|
|
||||||
new_tabbed_browser.set_page_title(idx, cur_title)
|
new_tabbed_browser.widget.set_page_title(idx, cur_title)
|
||||||
if config.val.tabs.favicons.show:
|
if config.val.tabs.favicons.show:
|
||||||
new_tabbed_browser.setTabIcon(idx, curtab.icon())
|
new_tabbed_browser.widget.setTabIcon(idx, curtab.icon())
|
||||||
if config.val.tabs.tabs_are_windows:
|
if config.val.tabs.tabs_are_windows:
|
||||||
new_tabbed_browser.window().setWindowIcon(curtab.icon())
|
new_tabbed_browser.widget.window().setWindowIcon(curtab.icon())
|
||||||
|
|
||||||
newtab.data.keep_icon = True
|
newtab.data.keep_icon = True
|
||||||
newtab.history.deserialize(history)
|
newtab.history.deserialize(history)
|
||||||
newtab.zoom.set_factor(curtab.zoom.factor())
|
newtab.zoom.set_factor(curtab.zoom.factor())
|
||||||
new_tabbed_browser.set_tab_pinned(newtab, curtab.data.pinned)
|
new_tabbed_browser.widget.set_tab_pinned(newtab, curtab.data.pinned)
|
||||||
return newtab
|
return newtab
|
||||||
|
|
||||||
@cmdutils.register(instance='command-dispatcher', scope='window')
|
@cmdutils.register(instance='command-dispatcher', scope='window')
|
||||||
@ -846,7 +847,7 @@ class CommandDispatcher:
|
|||||||
keep: Stay in visual mode after yanking the selection.
|
keep: Stay in visual mode after yanking the selection.
|
||||||
"""
|
"""
|
||||||
if what == 'title':
|
if what == 'title':
|
||||||
s = self._tabbed_browser.page_title(self._current_index())
|
s = self._tabbed_browser.widget.page_title(self._current_index())
|
||||||
elif what == 'domain':
|
elif what == 'domain':
|
||||||
port = self._current_url().port()
|
port = self._current_url().port()
|
||||||
s = '{}://{}{}'.format(self._current_url().scheme(),
|
s = '{}://{}{}'.format(self._current_url().scheme(),
|
||||||
@ -958,7 +959,7 @@ class CommandDispatcher:
|
|||||||
force: Avoid confirmation for pinned tabs.
|
force: Avoid confirmation for pinned tabs.
|
||||||
"""
|
"""
|
||||||
cmdutils.check_exclusive((prev, next_), 'pn')
|
cmdutils.check_exclusive((prev, next_), 'pn')
|
||||||
cur_idx = self._tabbed_browser.currentIndex()
|
cur_idx = self._tabbed_browser.widget.currentIndex()
|
||||||
assert cur_idx != -1
|
assert cur_idx != -1
|
||||||
|
|
||||||
def _to_close(i):
|
def _to_close(i):
|
||||||
@ -1075,11 +1076,11 @@ class CommandDispatcher:
|
|||||||
|
|
||||||
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
||||||
window=win_id)
|
window=win_id)
|
||||||
if not 0 < idx <= tabbed_browser.count():
|
if not 0 < idx <= tabbed_browser.widget.count():
|
||||||
raise cmdexc.CommandError(
|
raise cmdexc.CommandError(
|
||||||
"There's no tab with index {}!".format(idx))
|
"There's no tab with index {}!".format(idx))
|
||||||
|
|
||||||
return (tabbed_browser, tabbed_browser.widget(idx-1))
|
return (tabbed_browser, tabbed_browser.widget.widget(idx-1))
|
||||||
|
|
||||||
@cmdutils.register(instance='command-dispatcher', scope='window',
|
@cmdutils.register(instance='command-dispatcher', scope='window',
|
||||||
maxsplit=0)
|
maxsplit=0)
|
||||||
@ -1107,10 +1108,10 @@ class CommandDispatcher:
|
|||||||
|
|
||||||
tabbed_browser, tab = self._resolve_buffer_index(index)
|
tabbed_browser, tab = self._resolve_buffer_index(index)
|
||||||
|
|
||||||
window = tabbed_browser.window()
|
window = tabbed_browser.widget.window()
|
||||||
window.activateWindow()
|
window.activateWindow()
|
||||||
window.raise_()
|
window.raise_()
|
||||||
tabbed_browser.setCurrentWidget(tab)
|
tabbed_browser.widget.setCurrentWidget(tab)
|
||||||
|
|
||||||
@cmdutils.register(instance='command-dispatcher', scope='window')
|
@cmdutils.register(instance='command-dispatcher', scope='window')
|
||||||
@cmdutils.argument('index', choices=['last'])
|
@cmdutils.argument('index', choices=['last'])
|
||||||
@ -1194,7 +1195,7 @@ class CommandDispatcher:
|
|||||||
cur_idx = self._current_index()
|
cur_idx = self._current_index()
|
||||||
cmdutils.check_overflow(cur_idx, 'int')
|
cmdutils.check_overflow(cur_idx, 'int')
|
||||||
cmdutils.check_overflow(new_idx, 'int')
|
cmdutils.check_overflow(new_idx, 'int')
|
||||||
self._tabbed_browser.tabBar().moveTab(cur_idx, new_idx)
|
self._tabbed_browser.widget.tabBar().moveTab(cur_idx, new_idx)
|
||||||
|
|
||||||
@cmdutils.register(instance='command-dispatcher', scope='window',
|
@cmdutils.register(instance='command-dispatcher', scope='window',
|
||||||
maxsplit=0, no_replace_variables=True)
|
maxsplit=0, no_replace_variables=True)
|
||||||
@ -1278,10 +1279,10 @@ class CommandDispatcher:
|
|||||||
|
|
||||||
idx = self._current_index()
|
idx = self._current_index()
|
||||||
if idx != -1:
|
if idx != -1:
|
||||||
env['QUTE_TITLE'] = self._tabbed_browser.page_title(idx)
|
env['QUTE_TITLE'] = self._tabbed_browser.widget.page_title(idx)
|
||||||
|
|
||||||
# FIXME:qtwebengine: If tab is None, run_async will fail!
|
# FIXME:qtwebengine: If tab is None, run_async will fail!
|
||||||
tab = self._tabbed_browser.currentWidget()
|
tab = self._tabbed_browser.widget.currentWidget()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
url = self._tabbed_browser.current_url()
|
url = self._tabbed_browser.current_url()
|
||||||
@ -2217,5 +2218,5 @@ class CommandDispatcher:
|
|||||||
pass
|
pass
|
||||||
return
|
return
|
||||||
|
|
||||||
window = self._tabbed_browser.window()
|
window = self._tabbed_browser.widget.window()
|
||||||
window.setWindowState(window.windowState() ^ Qt.WindowFullScreen)
|
window.setWindowState(window.windowState() ^ Qt.WindowFullScreen)
|
||||||
|
@ -682,7 +682,7 @@ class HintManager(QObject):
|
|||||||
"""
|
"""
|
||||||
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
||||||
window=self._win_id)
|
window=self._win_id)
|
||||||
tab = tabbed_browser.currentWidget()
|
tab = tabbed_browser.widget.currentWidget()
|
||||||
if tab is None:
|
if tab is None:
|
||||||
raise cmdexc.CommandError("No WebView available yet!")
|
raise cmdexc.CommandError("No WebView available yet!")
|
||||||
|
|
||||||
|
@ -76,11 +76,11 @@ class SignalFilter(QObject):
|
|||||||
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
||||||
window=self._win_id)
|
window=self._win_id)
|
||||||
try:
|
try:
|
||||||
tabidx = tabbed_browser.indexOf(tab)
|
tabidx = tabbed_browser.widget.indexOf(tab)
|
||||||
except RuntimeError:
|
except RuntimeError:
|
||||||
# The tab has been deleted already
|
# The tab has been deleted already
|
||||||
return
|
return
|
||||||
if tabidx == tabbed_browser.currentIndex():
|
if tabidx == tabbed_browser.widget.currentIndex():
|
||||||
if log_signal:
|
if log_signal:
|
||||||
log.signals.debug("emitting: {} (tab {})".format(
|
log.signals.debug("emitting: {} (tab {})".format(
|
||||||
debug.dbg_signal(signal, args), tabidx))
|
debug.dbg_signal(signal, args), tabidx))
|
||||||
|
@ -117,11 +117,11 @@ def _buffer(skip_win_id=None):
|
|||||||
if tabbed_browser.shutting_down:
|
if tabbed_browser.shutting_down:
|
||||||
continue
|
continue
|
||||||
tabs = []
|
tabs = []
|
||||||
for idx in range(tabbed_browser.count()):
|
for idx in range(tabbed_browser.widget.count()):
|
||||||
tab = tabbed_browser.widget(idx)
|
tab = tabbed_browser.widget.widget(idx)
|
||||||
tabs.append(("{}/{}".format(win_id, idx + 1),
|
tabs.append(("{}/{}".format(win_id, idx + 1),
|
||||||
tab.url().toDisplayString(),
|
tab.url().toDisplayString(),
|
||||||
tabbed_browser.page_title(idx)))
|
tabbed_browser.widget.page_title(idx)))
|
||||||
cat = listcategory.ListCategory("{}".format(win_id), tabs,
|
cat = listcategory.ListCategory("{}".format(win_id), tabs,
|
||||||
delete_func=delete_buffer)
|
delete_func=delete_buffer)
|
||||||
model.add_category(cat)
|
model.add_category(cat)
|
||||||
|
@ -327,7 +327,7 @@ class MainWindow(QWidget):
|
|||||||
self.tabbed_browser)
|
self.tabbed_browser)
|
||||||
objreg.register('command-dispatcher', dispatcher, scope='window',
|
objreg.register('command-dispatcher', dispatcher, scope='window',
|
||||||
window=self.win_id)
|
window=self.win_id)
|
||||||
self.tabbed_browser.destroyed.connect(
|
self.tabbed_browser.widget.destroyed.connect(
|
||||||
functools.partial(objreg.delete, 'command-dispatcher',
|
functools.partial(objreg.delete, 'command-dispatcher',
|
||||||
scope='window', window=self.win_id))
|
scope='window', window=self.win_id))
|
||||||
|
|
||||||
@ -347,10 +347,10 @@ class MainWindow(QWidget):
|
|||||||
|
|
||||||
def _add_widgets(self):
|
def _add_widgets(self):
|
||||||
"""Add or readd all widgets to the VBox."""
|
"""Add or readd all widgets to the VBox."""
|
||||||
self._vbox.removeWidget(self.tabbed_browser)
|
self._vbox.removeWidget(self.tabbed_browser.widget)
|
||||||
self._vbox.removeWidget(self._downloadview)
|
self._vbox.removeWidget(self._downloadview)
|
||||||
self._vbox.removeWidget(self.status)
|
self._vbox.removeWidget(self.status)
|
||||||
widgets = [self.tabbed_browser]
|
widgets = [self.tabbed_browser.widget]
|
||||||
|
|
||||||
downloads_position = config.val.downloads.position
|
downloads_position = config.val.downloads.position
|
||||||
if downloads_position == 'top':
|
if downloads_position == 'top':
|
||||||
@ -469,7 +469,7 @@ class MainWindow(QWidget):
|
|||||||
|
|
||||||
self.tabbed_browser.cur_scroll_perc_changed.connect(
|
self.tabbed_browser.cur_scroll_perc_changed.connect(
|
||||||
status.percentage.set_perc)
|
status.percentage.set_perc)
|
||||||
self.tabbed_browser.tab_index_changed.connect(
|
self.tabbed_browser.widget.tab_index_changed.connect(
|
||||||
status.tabindex.on_tab_index_changed)
|
status.tabindex.on_tab_index_changed)
|
||||||
|
|
||||||
self.tabbed_browser.cur_url_changed.connect(status.url.set_url)
|
self.tabbed_browser.cur_url_changed.connect(status.url.set_url)
|
||||||
@ -517,7 +517,7 @@ class MainWindow(QWidget):
|
|||||||
super().resizeEvent(e)
|
super().resizeEvent(e)
|
||||||
self._update_overlay_geometries()
|
self._update_overlay_geometries()
|
||||||
self._downloadview.updateGeometry()
|
self._downloadview.updateGeometry()
|
||||||
self.tabbed_browser.tabBar().refresh()
|
self.tabbed_browser.widget.tabBar().refresh()
|
||||||
|
|
||||||
def showEvent(self, e):
|
def showEvent(self, e):
|
||||||
"""Extend showEvent to register us as the last-visible-main-window.
|
"""Extend showEvent to register us as the last-visible-main-window.
|
||||||
@ -546,7 +546,7 @@ class MainWindow(QWidget):
|
|||||||
if crashsignal.is_crashing:
|
if crashsignal.is_crashing:
|
||||||
e.accept()
|
e.accept()
|
||||||
return
|
return
|
||||||
tab_count = self.tabbed_browser.count()
|
tab_count = self.tabbed_browser.widget.count()
|
||||||
download_model = objreg.get('download-model', scope='window',
|
download_model = objreg.get('download-model', scope='window',
|
||||||
window=self.win_id)
|
window=self.win_id)
|
||||||
download_count = download_model.running_downloads()
|
download_count = download_model.running_downloads()
|
||||||
|
@ -32,7 +32,7 @@ class Backforward(textbase.TextBase):
|
|||||||
|
|
||||||
def on_tab_cur_url_changed(self, tabs):
|
def on_tab_cur_url_changed(self, tabs):
|
||||||
"""Called on URL changes."""
|
"""Called on URL changes."""
|
||||||
tab = tabs.currentWidget()
|
tab = tabs.widget.currentWidget()
|
||||||
if tab is None: # pragma: no cover
|
if tab is None: # pragma: no cover
|
||||||
self.setText('')
|
self.setText('')
|
||||||
self.hide()
|
self.hide()
|
||||||
|
@ -268,7 +268,7 @@ class StatusBar(QWidget):
|
|||||||
"""Get the currently displayed tab."""
|
"""Get the currently displayed tab."""
|
||||||
window = objreg.get('tabbed-browser', scope='window',
|
window = objreg.get('tabbed-browser', scope='window',
|
||||||
window=self._win_id)
|
window=self._win_id)
|
||||||
return window.currentWidget()
|
return window.widget.currentWidget()
|
||||||
|
|
||||||
def set_mode_active(self, mode, val):
|
def set_mode_active(self, mode, val):
|
||||||
"""Setter for self.{insert,command,caret}_active.
|
"""Setter for self.{insert,command,caret}_active.
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
import functools
|
import functools
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
from PyQt5.QtWidgets import QSizePolicy
|
from PyQt5.QtWidgets import QSizePolicy, QWidget
|
||||||
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QTimer, QUrl
|
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QTimer, QUrl
|
||||||
from PyQt5.QtGui import QIcon
|
from PyQt5.QtGui import QIcon
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ class TabDeletedError(Exception):
|
|||||||
"""Exception raised when _tab_index is called for a deleted tab."""
|
"""Exception raised when _tab_index is called for a deleted tab."""
|
||||||
|
|
||||||
|
|
||||||
class TabbedBrowser(tabwidget.TabWidget):
|
class TabbedBrowser(QWidget):
|
||||||
|
|
||||||
"""A TabWidget with QWebViews inside.
|
"""A TabWidget with QWebViews inside.
|
||||||
|
|
||||||
@ -110,17 +110,18 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
new_tab = pyqtSignal(browsertab.AbstractTab, int)
|
new_tab = pyqtSignal(browsertab.AbstractTab, int)
|
||||||
|
|
||||||
def __init__(self, *, win_id, private, parent=None):
|
def __init__(self, *, win_id, private, parent=None):
|
||||||
super().__init__(win_id, parent)
|
super().__init__(parent)
|
||||||
|
self.widget = tabwidget.TabWidget(win_id, parent)
|
||||||
self._win_id = win_id
|
self._win_id = win_id
|
||||||
self._tab_insert_idx_left = 0
|
self._tab_insert_idx_left = 0
|
||||||
self._tab_insert_idx_right = -1
|
self._tab_insert_idx_right = -1
|
||||||
self.shutting_down = False
|
self.shutting_down = False
|
||||||
self.tabCloseRequested.connect(self.on_tab_close_requested)
|
self.widget.tabCloseRequested.connect(self.on_tab_close_requested)
|
||||||
self.new_tab_requested.connect(self.tabopen)
|
self.widget.new_tab_requested.connect(self.tabopen)
|
||||||
self.currentChanged.connect(self.on_current_changed)
|
self.widget.currentChanged.connect(self.on_current_changed)
|
||||||
self.cur_load_started.connect(self.on_cur_load_started)
|
self.cur_load_started.connect(self.on_cur_load_started)
|
||||||
self.cur_fullscreen_requested.connect(self.tabBar().maybe_hide)
|
self.cur_fullscreen_requested.connect(self.widget.tabBar().maybe_hide)
|
||||||
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
self.widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
||||||
self._undo_stack = []
|
self._undo_stack = []
|
||||||
self._filter = signalfilter.SignalFilter(win_id, self)
|
self._filter = signalfilter.SignalFilter(win_id, self)
|
||||||
self._now_focused = None
|
self._now_focused = None
|
||||||
@ -128,12 +129,12 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
self.search_options = {}
|
self.search_options = {}
|
||||||
self._local_marks = {}
|
self._local_marks = {}
|
||||||
self._global_marks = {}
|
self._global_marks = {}
|
||||||
self.default_window_icon = self.window().windowIcon()
|
self.default_window_icon = self.widget.window().windowIcon()
|
||||||
self.private = private
|
self.private = private
|
||||||
config.instance.changed.connect(self._on_config_changed)
|
config.instance.changed.connect(self._on_config_changed)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return utils.get_repr(self, count=self.count())
|
return utils.get_repr(self, count=self.widget.count())
|
||||||
|
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def _on_config_changed(self, option):
|
def _on_config_changed(self, option):
|
||||||
@ -142,7 +143,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
elif option == 'window.title_format':
|
elif option == 'window.title_format':
|
||||||
self._update_window_title()
|
self._update_window_title()
|
||||||
elif option in ['tabs.title.format', 'tabs.title.format_pinned']:
|
elif option in ['tabs.title.format', 'tabs.title.format_pinned']:
|
||||||
self._update_tab_titles()
|
self.widget.update_tab_titles()
|
||||||
|
|
||||||
def _tab_index(self, tab):
|
def _tab_index(self, tab):
|
||||||
"""Get the index of a given tab.
|
"""Get the index of a given tab.
|
||||||
@ -150,7 +151,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
Raises TabDeletedError if the tab doesn't exist anymore.
|
Raises TabDeletedError if the tab doesn't exist anymore.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
idx = self.indexOf(tab)
|
idx = self.widget.indexOf(tab)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
log.webview.debug("Got invalid tab ({})!".format(e))
|
log.webview.debug("Got invalid tab ({})!".format(e))
|
||||||
raise TabDeletedError(e)
|
raise TabDeletedError(e)
|
||||||
@ -166,8 +167,8 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
iterating over the list.
|
iterating over the list.
|
||||||
"""
|
"""
|
||||||
widgets = []
|
widgets = []
|
||||||
for i in range(self.count()):
|
for i in range(self.widget.count()):
|
||||||
widget = self.widget(i)
|
widget = self.widget.widget(i)
|
||||||
if widget is None:
|
if widget is None:
|
||||||
log.webview.debug("Got None-widget in tabbedbrowser!")
|
log.webview.debug("Got None-widget in tabbedbrowser!")
|
||||||
else:
|
else:
|
||||||
@ -186,12 +187,12 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
if field is not None and ('{' + field + '}') not in title_format:
|
if field is not None and ('{' + field + '}') not in title_format:
|
||||||
return
|
return
|
||||||
|
|
||||||
idx = self.currentIndex()
|
idx = self.widget.currentIndex()
|
||||||
if idx == -1:
|
if idx == -1:
|
||||||
# (e.g. last tab removed)
|
# (e.g. last tab removed)
|
||||||
log.webview.debug("Not updating window title because index is -1")
|
log.webview.debug("Not updating window title because index is -1")
|
||||||
return
|
return
|
||||||
fields = self.get_tab_fields(idx)
|
fields = self.widget.get_tab_fields(idx)
|
||||||
fields['id'] = self._win_id
|
fields['id'] = self._win_id
|
||||||
|
|
||||||
title = title_format.format(**fields)
|
title = title_format.format(**fields)
|
||||||
@ -247,8 +248,8 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
Return:
|
Return:
|
||||||
The current URL as QUrl.
|
The current URL as QUrl.
|
||||||
"""
|
"""
|
||||||
idx = self.currentIndex()
|
idx = self.widget.currentIndex()
|
||||||
return super().tab_url(idx)
|
return self.widget.tab_url(idx)
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
"""Try to shut down all tabs cleanly."""
|
"""Try to shut down all tabs cleanly."""
|
||||||
@ -284,7 +285,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
new_undo: Whether the undo entry should be a new item in the stack.
|
new_undo: Whether the undo entry should be a new item in the stack.
|
||||||
"""
|
"""
|
||||||
last_close = config.val.tabs.last_close
|
last_close = config.val.tabs.last_close
|
||||||
count = self.count()
|
count = self.widget.count()
|
||||||
|
|
||||||
if last_close == 'ignore' and count == 1:
|
if last_close == 'ignore' and count == 1:
|
||||||
return
|
return
|
||||||
@ -311,7 +312,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
new_undo: Whether the undo entry should be a new item in the stack.
|
new_undo: Whether the undo entry should be a new item in the stack.
|
||||||
crashed: Whether we're closing a tab with crashed renderer process.
|
crashed: Whether we're closing a tab with crashed renderer process.
|
||||||
"""
|
"""
|
||||||
idx = self.indexOf(tab)
|
idx = self.widget.indexOf(tab)
|
||||||
if idx == -1:
|
if idx == -1:
|
||||||
if crashed:
|
if crashed:
|
||||||
return
|
return
|
||||||
@ -349,7 +350,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
self._undo_stack[-1].append(entry)
|
self._undo_stack[-1].append(entry)
|
||||||
|
|
||||||
tab.shutdown()
|
tab.shutdown()
|
||||||
self.removeTab(idx)
|
self.widget.removeTab(idx)
|
||||||
if not crashed:
|
if not crashed:
|
||||||
# WORKAROUND for a segfault when we delete the crashed tab.
|
# WORKAROUND for a segfault when we delete the crashed tab.
|
||||||
# see https://bugreports.qt.io/browse/QTBUG-58698
|
# see https://bugreports.qt.io/browse/QTBUG-58698
|
||||||
@ -362,14 +363,14 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
last_close = config.val.tabs.last_close
|
last_close = config.val.tabs.last_close
|
||||||
use_current_tab = False
|
use_current_tab = False
|
||||||
if last_close in ['blank', 'startpage', 'default-page']:
|
if last_close in ['blank', 'startpage', 'default-page']:
|
||||||
only_one_tab_open = self.count() == 1
|
only_one_tab_open = self.widget.count() == 1
|
||||||
no_history = len(self.widget(0).history) == 1
|
no_history = len(self.widget.widget(0).history) == 1
|
||||||
urls = {
|
urls = {
|
||||||
'blank': QUrl('about:blank'),
|
'blank': QUrl('about:blank'),
|
||||||
'startpage': config.val.url.start_pages[0],
|
'startpage': config.val.url.start_pages[0],
|
||||||
'default-page': config.val.url.default_page,
|
'default-page': config.val.url.default_page,
|
||||||
}
|
}
|
||||||
first_tab_url = self.widget(0).url()
|
first_tab_url = self.widget.widget(0).url()
|
||||||
last_close_urlstr = urls[last_close].toString().rstrip('/')
|
last_close_urlstr = urls[last_close].toString().rstrip('/')
|
||||||
first_tab_urlstr = first_tab_url.toString().rstrip('/')
|
first_tab_urlstr = first_tab_url.toString().rstrip('/')
|
||||||
last_close_url_used = first_tab_urlstr == last_close_urlstr
|
last_close_url_used = first_tab_urlstr == last_close_urlstr
|
||||||
@ -378,13 +379,13 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
|
|
||||||
for entry in reversed(self._undo_stack.pop()):
|
for entry in reversed(self._undo_stack.pop()):
|
||||||
if use_current_tab:
|
if use_current_tab:
|
||||||
newtab = self.widget(0)
|
newtab = self.widget.widget(0)
|
||||||
use_current_tab = False
|
use_current_tab = False
|
||||||
else:
|
else:
|
||||||
newtab = self.tabopen(background=False, idx=entry.index)
|
newtab = self.tabopen(background=False, idx=entry.index)
|
||||||
|
|
||||||
newtab.history.deserialize(entry.history)
|
newtab.history.deserialize(entry.history)
|
||||||
self.set_tab_pinned(newtab, entry.pinned)
|
self.widget.set_tab_pinned(newtab, entry.pinned)
|
||||||
|
|
||||||
@pyqtSlot('QUrl', bool)
|
@pyqtSlot('QUrl', bool)
|
||||||
def openurl(self, url, newtab):
|
def openurl(self, url, newtab):
|
||||||
@ -395,15 +396,15 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
newtab: True to open URL in a new tab, False otherwise.
|
newtab: True to open URL in a new tab, False otherwise.
|
||||||
"""
|
"""
|
||||||
qtutils.ensure_valid(url)
|
qtutils.ensure_valid(url)
|
||||||
if newtab or self.currentWidget() is None:
|
if newtab or self.widget.currentWidget() is None:
|
||||||
self.tabopen(url, background=False)
|
self.tabopen(url, background=False)
|
||||||
else:
|
else:
|
||||||
self.currentWidget().openurl(url)
|
self.widget.currentWidget().openurl(url)
|
||||||
|
|
||||||
@pyqtSlot(int)
|
@pyqtSlot(int)
|
||||||
def on_tab_close_requested(self, idx):
|
def on_tab_close_requested(self, idx):
|
||||||
"""Close a tab via an index."""
|
"""Close a tab via an index."""
|
||||||
tab = self.widget(idx)
|
tab = self.widget.widget(idx)
|
||||||
if tab is None:
|
if tab is None:
|
||||||
log.webview.debug("Got invalid tab {} for index {}!".format(
|
log.webview.debug("Got invalid tab {} for index {}!".format(
|
||||||
tab, idx))
|
tab, idx))
|
||||||
@ -454,7 +455,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
"related {}, idx {}".format(
|
"related {}, idx {}".format(
|
||||||
url, background, related, idx))
|
url, background, related, idx))
|
||||||
|
|
||||||
if (config.val.tabs.tabs_are_windows and self.count() > 0 and
|
if (config.val.tabs.tabs_are_windows and self.widget.count() > 0 and
|
||||||
not ignore_tabs_are_windows):
|
not ignore_tabs_are_windows):
|
||||||
window = mainwindow.MainWindow(private=self.private)
|
window = mainwindow.MainWindow(private=self.private)
|
||||||
window.show()
|
window.show()
|
||||||
@ -464,12 +465,12 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
related=related)
|
related=related)
|
||||||
|
|
||||||
tab = browsertab.create(win_id=self._win_id, private=self.private,
|
tab = browsertab.create(win_id=self._win_id, private=self.private,
|
||||||
parent=self)
|
parent=self.widget)
|
||||||
self._connect_tab_signals(tab)
|
self._connect_tab_signals(tab)
|
||||||
|
|
||||||
if idx is None:
|
if idx is None:
|
||||||
idx = self._get_new_tab_idx(related)
|
idx = self._get_new_tab_idx(related)
|
||||||
self.insertTab(idx, tab, "")
|
self.widget.insertTab(idx, tab, "")
|
||||||
|
|
||||||
if url is not None:
|
if url is not None:
|
||||||
tab.openurl(url)
|
tab.openurl(url)
|
||||||
@ -480,10 +481,11 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
# Make sure the background tab has the correct initial size.
|
# Make sure the background tab has the correct initial size.
|
||||||
# With a foreground tab, it's going to be resized correctly by the
|
# With a foreground tab, it's going to be resized correctly by the
|
||||||
# layout anyways.
|
# layout anyways.
|
||||||
tab.resize(self.currentWidget().size())
|
tab.resize(self.widget.currentWidget().size())
|
||||||
self.tab_index_changed.emit(self.currentIndex(), self.count())
|
self.widget.tab_index_changed.emit(self.widget.currentIndex(),
|
||||||
|
self.widget.count())
|
||||||
else:
|
else:
|
||||||
self.setCurrentWidget(tab)
|
self.widget.setCurrentWidget(tab)
|
||||||
|
|
||||||
tab.show()
|
tab.show()
|
||||||
self.new_tab.emit(tab, idx)
|
self.new_tab.emit(tab, idx)
|
||||||
@ -528,11 +530,11 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
"""Update favicons when config was changed."""
|
"""Update favicons when config was changed."""
|
||||||
for i, tab in enumerate(self.widgets()):
|
for i, tab in enumerate(self.widgets()):
|
||||||
if config.val.tabs.favicons.show:
|
if config.val.tabs.favicons.show:
|
||||||
self.setTabIcon(i, tab.icon())
|
self.widget.setTabIcon(i, tab.icon())
|
||||||
if config.val.tabs.tabs_are_windows:
|
if config.val.tabs.tabs_are_windows:
|
||||||
self.window().setWindowIcon(tab.icon())
|
self.window().setWindowIcon(tab.icon())
|
||||||
else:
|
else:
|
||||||
self.setTabIcon(i, QIcon())
|
self.widget.setTabIcon(i, QIcon())
|
||||||
if config.val.tabs.tabs_are_windows:
|
if config.val.tabs.tabs_are_windows:
|
||||||
self.window().setWindowIcon(self.default_window_icon)
|
self.window().setWindowIcon(self.default_window_icon)
|
||||||
|
|
||||||
@ -548,14 +550,14 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
except TabDeletedError:
|
except TabDeletedError:
|
||||||
# We can get signals for tabs we already deleted...
|
# We can get signals for tabs we already deleted...
|
||||||
return
|
return
|
||||||
self._update_tab_title(idx)
|
self.widget.update_tab_title(idx)
|
||||||
if tab.data.keep_icon:
|
if tab.data.keep_icon:
|
||||||
tab.data.keep_icon = False
|
tab.data.keep_icon = False
|
||||||
else:
|
else:
|
||||||
if (config.val.tabs.tabs_are_windows and
|
if (config.val.tabs.tabs_are_windows and
|
||||||
config.val.tabs.favicons.show):
|
config.val.tabs.favicons.show):
|
||||||
self.window().setWindowIcon(self.default_window_icon)
|
self.window().setWindowIcon(self.default_window_icon)
|
||||||
if idx == self.currentIndex():
|
if idx == self.widget.currentIndex():
|
||||||
self._update_window_title()
|
self._update_window_title()
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
@ -586,8 +588,8 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
return
|
return
|
||||||
log.webview.debug("Changing title for idx {} to '{}'".format(
|
log.webview.debug("Changing title for idx {} to '{}'".format(
|
||||||
idx, text))
|
idx, text))
|
||||||
self.set_page_title(idx, text)
|
self.widget.set_page_title(idx, text)
|
||||||
if idx == self.currentIndex():
|
if idx == self.widget.currentIndex():
|
||||||
self._update_window_title()
|
self._update_window_title()
|
||||||
|
|
||||||
@pyqtSlot(browsertab.AbstractTab, QUrl)
|
@pyqtSlot(browsertab.AbstractTab, QUrl)
|
||||||
@ -604,8 +606,8 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
# We can get signals for tabs we already deleted...
|
# We can get signals for tabs we already deleted...
|
||||||
return
|
return
|
||||||
|
|
||||||
if not self.page_title(idx):
|
if not self.widget.page_title(idx):
|
||||||
self.set_page_title(idx, url.toDisplayString())
|
self.widget.set_page_title(idx, url.toDisplayString())
|
||||||
|
|
||||||
@pyqtSlot(browsertab.AbstractTab, QIcon)
|
@pyqtSlot(browsertab.AbstractTab, QIcon)
|
||||||
def on_icon_changed(self, tab, icon):
|
def on_icon_changed(self, tab, icon):
|
||||||
@ -624,7 +626,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
except TabDeletedError:
|
except TabDeletedError:
|
||||||
# We can get signals for tabs we already deleted...
|
# We can get signals for tabs we already deleted...
|
||||||
return
|
return
|
||||||
self.setTabIcon(idx, icon)
|
self.widget.setTabIcon(idx, icon)
|
||||||
if config.val.tabs.tabs_are_windows:
|
if config.val.tabs.tabs_are_windows:
|
||||||
self.window().setWindowIcon(icon)
|
self.window().setWindowIcon(icon)
|
||||||
|
|
||||||
@ -633,7 +635,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
"""Give focus to current tab if command mode was left."""
|
"""Give focus to current tab if command mode was left."""
|
||||||
if mode in [usertypes.KeyMode.command, usertypes.KeyMode.prompt,
|
if mode in [usertypes.KeyMode.command, usertypes.KeyMode.prompt,
|
||||||
usertypes.KeyMode.yesno]:
|
usertypes.KeyMode.yesno]:
|
||||||
widget = self.currentWidget()
|
widget = self.widget.currentWidget()
|
||||||
log.modes.debug("Left status-input mode, focusing {!r}".format(
|
log.modes.debug("Left status-input mode, focusing {!r}".format(
|
||||||
widget))
|
widget))
|
||||||
if widget is None:
|
if widget is None:
|
||||||
@ -649,7 +651,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
if idx == -1 or self.shutting_down:
|
if idx == -1 or self.shutting_down:
|
||||||
# closing the last tab (before quitting) or shutting down
|
# closing the last tab (before quitting) or shutting down
|
||||||
return
|
return
|
||||||
tab = self.widget(idx)
|
tab = self.widget.widget(idx)
|
||||||
if tab is None:
|
if tab is None:
|
||||||
log.webview.debug("on_current_changed got called with invalid "
|
log.webview.debug("on_current_changed got called with invalid "
|
||||||
"index {}".format(idx))
|
"index {}".format(idx))
|
||||||
@ -677,8 +679,8 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
self._now_focused = tab
|
self._now_focused = tab
|
||||||
self.current_tab_changed.emit(tab)
|
self.current_tab_changed.emit(tab)
|
||||||
QTimer.singleShot(0, self._update_window_title)
|
QTimer.singleShot(0, self._update_window_title)
|
||||||
self._tab_insert_idx_left = self.currentIndex()
|
self._tab_insert_idx_left = self.widget.currentIndex()
|
||||||
self._tab_insert_idx_right = self.currentIndex() + 1
|
self._tab_insert_idx_right = self.widget.currentIndex() + 1
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def on_cmd_return_pressed(self):
|
def on_cmd_return_pressed(self):
|
||||||
@ -696,9 +698,9 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
stop = config.val.colors.tabs.indicator.stop
|
stop = config.val.colors.tabs.indicator.stop
|
||||||
system = config.val.colors.tabs.indicator.system
|
system = config.val.colors.tabs.indicator.system
|
||||||
color = utils.interpolate_color(start, stop, perc, system)
|
color = utils.interpolate_color(start, stop, perc, system)
|
||||||
self.set_tab_indicator_color(idx, color)
|
self.widget.set_tab_indicator_color(idx, color)
|
||||||
self._update_tab_title(idx)
|
self.widget.update_tab_title(idx)
|
||||||
if idx == self.currentIndex():
|
if idx == self.widget.currentIndex():
|
||||||
self._update_window_title()
|
self._update_window_title()
|
||||||
|
|
||||||
def on_load_finished(self, tab, ok):
|
def on_load_finished(self, tab, ok):
|
||||||
@ -715,23 +717,23 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
color = utils.interpolate_color(start, stop, 100, system)
|
color = utils.interpolate_color(start, stop, 100, system)
|
||||||
else:
|
else:
|
||||||
color = config.val.colors.tabs.indicator.error
|
color = config.val.colors.tabs.indicator.error
|
||||||
self.set_tab_indicator_color(idx, color)
|
self.widget.set_tab_indicator_color(idx, color)
|
||||||
self._update_tab_title(idx)
|
self.widget.update_tab_title(idx)
|
||||||
if idx == self.currentIndex():
|
if idx == self.widget.currentIndex():
|
||||||
self._update_window_title()
|
self._update_window_title()
|
||||||
tab.handle_auto_insert_mode(ok)
|
tab.handle_auto_insert_mode(ok)
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def on_scroll_pos_changed(self):
|
def on_scroll_pos_changed(self):
|
||||||
"""Update tab and window title when scroll position changed."""
|
"""Update tab and window title when scroll position changed."""
|
||||||
idx = self.currentIndex()
|
idx = self.widget.currentIndex()
|
||||||
if idx == -1:
|
if idx == -1:
|
||||||
# (e.g. last tab removed)
|
# (e.g. last tab removed)
|
||||||
log.webview.debug("Not updating scroll position because index is "
|
log.webview.debug("Not updating scroll position because index is "
|
||||||
"-1")
|
"-1")
|
||||||
return
|
return
|
||||||
self._update_window_title('scroll_pos')
|
self._update_window_title('scroll_pos')
|
||||||
self._update_tab_title(idx, 'scroll_pos')
|
self.widget.update_tab_title(idx, 'scroll_pos')
|
||||||
|
|
||||||
def _on_renderer_process_terminated(self, tab, status, code):
|
def _on_renderer_process_terminated(self, tab, status, code):
|
||||||
"""Show an error when a renderer process terminated."""
|
"""Show an error when a renderer process terminated."""
|
||||||
@ -764,7 +766,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-58698
|
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-58698
|
||||||
message.error(msg)
|
message.error(msg)
|
||||||
self._remove_tab(tab, crashed=True)
|
self._remove_tab(tab, crashed=True)
|
||||||
if self.count() == 0:
|
if self.widget.count() == 0:
|
||||||
self.tabopen(QUrl('about:blank'))
|
self.tabopen(QUrl('about:blank'))
|
||||||
|
|
||||||
def resizeEvent(self, e):
|
def resizeEvent(self, e):
|
||||||
@ -801,7 +803,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
if key != "'":
|
if key != "'":
|
||||||
message.error("Failed to set mark: url invalid")
|
message.error("Failed to set mark: url invalid")
|
||||||
return
|
return
|
||||||
point = self.currentWidget().scroller.pos_px()
|
point = self.widget.currentWidget().scroller.pos_px()
|
||||||
|
|
||||||
if key.isupper():
|
if key.isupper():
|
||||||
self._global_marks[key] = point, url
|
self._global_marks[key] = point, url
|
||||||
@ -822,7 +824,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
except qtutils.QtValueError:
|
except qtutils.QtValueError:
|
||||||
urlkey = None
|
urlkey = None
|
||||||
|
|
||||||
tab = self.currentWidget()
|
tab = self.widget.currentWidget()
|
||||||
|
|
||||||
if key.isupper():
|
if key.isupper():
|
||||||
if key in self._global_marks:
|
if key in self._global_marks:
|
||||||
|
@ -60,7 +60,7 @@ class TabWidget(QTabWidget):
|
|||||||
self.setTabBar(bar)
|
self.setTabBar(bar)
|
||||||
bar.tabCloseRequested.connect(self.tabCloseRequested)
|
bar.tabCloseRequested.connect(self.tabCloseRequested)
|
||||||
bar.tabMoved.connect(functools.partial(
|
bar.tabMoved.connect(functools.partial(
|
||||||
QTimer.singleShot, 0, self._update_tab_titles))
|
QTimer.singleShot, 0, self.update_tab_titles))
|
||||||
bar.currentChanged.connect(self._on_current_changed)
|
bar.currentChanged.connect(self._on_current_changed)
|
||||||
bar.new_tab_requested.connect(self._on_new_tab_requested)
|
bar.new_tab_requested.connect(self._on_new_tab_requested)
|
||||||
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
|
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
|
||||||
@ -108,7 +108,7 @@ class TabWidget(QTabWidget):
|
|||||||
|
|
||||||
bar.set_tab_data(idx, 'pinned', pinned)
|
bar.set_tab_data(idx, 'pinned', pinned)
|
||||||
tab.data.pinned = pinned
|
tab.data.pinned = pinned
|
||||||
self._update_tab_title(idx)
|
self.update_tab_title(idx)
|
||||||
|
|
||||||
def tab_indicator_color(self, idx):
|
def tab_indicator_color(self, idx):
|
||||||
"""Get the tab indicator color for the given index."""
|
"""Get the tab indicator color for the given index."""
|
||||||
@ -117,13 +117,13 @@ class TabWidget(QTabWidget):
|
|||||||
def set_page_title(self, idx, title):
|
def set_page_title(self, idx, title):
|
||||||
"""Set the tab title user data."""
|
"""Set the tab title user data."""
|
||||||
self.tabBar().set_tab_data(idx, 'page-title', title)
|
self.tabBar().set_tab_data(idx, 'page-title', title)
|
||||||
self._update_tab_title(idx)
|
self.update_tab_title(idx)
|
||||||
|
|
||||||
def page_title(self, idx):
|
def page_title(self, idx):
|
||||||
"""Get the tab title user data."""
|
"""Get the tab title user data."""
|
||||||
return self.tabBar().page_title(idx)
|
return self.tabBar().page_title(idx)
|
||||||
|
|
||||||
def _update_tab_title(self, idx, field=None):
|
def update_tab_title(self, idx, field=None):
|
||||||
"""Update the tab text for the given tab.
|
"""Update the tab text for the given tab.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@ -197,20 +197,20 @@ class TabWidget(QTabWidget):
|
|||||||
fields['scroll_pos'] = scroll_pos
|
fields['scroll_pos'] = scroll_pos
|
||||||
return fields
|
return fields
|
||||||
|
|
||||||
def _update_tab_titles(self):
|
def update_tab_titles(self):
|
||||||
"""Update all texts."""
|
"""Update all texts."""
|
||||||
for idx in range(self.count()):
|
for idx in range(self.count()):
|
||||||
self._update_tab_title(idx)
|
self.update_tab_title(idx)
|
||||||
|
|
||||||
def tabInserted(self, idx):
|
def tabInserted(self, idx):
|
||||||
"""Update titles when a tab was inserted."""
|
"""Update titles when a tab was inserted."""
|
||||||
super().tabInserted(idx)
|
super().tabInserted(idx)
|
||||||
self._update_tab_titles()
|
self.update_tab_titles()
|
||||||
|
|
||||||
def tabRemoved(self, idx):
|
def tabRemoved(self, idx):
|
||||||
"""Update titles when a tab was removed."""
|
"""Update titles when a tab was removed."""
|
||||||
super().tabRemoved(idx)
|
super().tabRemoved(idx)
|
||||||
self._update_tab_titles()
|
self.update_tab_titles()
|
||||||
|
|
||||||
def addTab(self, page, icon_or_text, text_or_empty=None):
|
def addTab(self, page, icon_or_text, text_or_empty=None):
|
||||||
"""Override addTab to use our own text setting logic.
|
"""Override addTab to use our own text setting logic.
|
||||||
|
@ -246,7 +246,7 @@ class SessionManager(QObject):
|
|||||||
if tabbed_browser.private:
|
if tabbed_browser.private:
|
||||||
win_data['private'] = True
|
win_data['private'] = True
|
||||||
for i, tab in enumerate(tabbed_browser.widgets()):
|
for i, tab in enumerate(tabbed_browser.widgets()):
|
||||||
active = i == tabbed_browser.currentIndex()
|
active = i == tabbed_browser.widget.currentIndex()
|
||||||
win_data['tabs'].append(self._save_tab(tab, active))
|
win_data['tabs'].append(self._save_tab(tab, active))
|
||||||
data['windows'].append(win_data)
|
data['windows'].append(win_data)
|
||||||
return data
|
return data
|
||||||
@ -427,11 +427,12 @@ class SessionManager(QObject):
|
|||||||
if tab.get('active', False):
|
if tab.get('active', False):
|
||||||
tab_to_focus = i
|
tab_to_focus = i
|
||||||
if new_tab.data.pinned:
|
if new_tab.data.pinned:
|
||||||
tabbed_browser.set_tab_pinned(new_tab, new_tab.data.pinned)
|
tabbed_browser.widget.set_tab_pinned(new_tab,
|
||||||
|
new_tab.data.pinned)
|
||||||
if tab_to_focus is not None:
|
if tab_to_focus is not None:
|
||||||
tabbed_browser.setCurrentIndex(tab_to_focus)
|
tabbed_browser.widget.setCurrentIndex(tab_to_focus)
|
||||||
if win.get('active', False):
|
if win.get('active', False):
|
||||||
QTimer.singleShot(0, tabbed_browser.activateWindow)
|
QTimer.singleShot(0, tabbed_browser.widget.activateWindow)
|
||||||
|
|
||||||
if data['windows']:
|
if data['windows']:
|
||||||
self.did_load = True
|
self.did_load = True
|
||||||
|
@ -185,7 +185,7 @@ def debug_cache_stats():
|
|||||||
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
||||||
window='last-focused')
|
window='last-focused')
|
||||||
# pylint: disable=protected-access
|
# pylint: disable=protected-access
|
||||||
tab_bar = tabbed_browser.tabBar()
|
tab_bar = tabbed_browser.widget.tabBar()
|
||||||
tabbed_browser_info = tab_bar._minimum_tab_size_hint_helper.cache_info()
|
tabbed_browser_info = tab_bar._minimum_tab_size_hint_helper.cache_info()
|
||||||
# pylint: enable=protected-access
|
# pylint: enable=protected-access
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ def _get_tab_registry(win_id, tab_id):
|
|||||||
|
|
||||||
if tab_id == 'current':
|
if tab_id == 'current':
|
||||||
tabbed_browser = get('tabbed-browser', scope='window', window=win_id)
|
tabbed_browser = get('tabbed-browser', scope='window', window=win_id)
|
||||||
tab = tabbed_browser.currentWidget()
|
tab = tabbed_browser.widget.currentWidget()
|
||||||
if tab is None:
|
if tab is None:
|
||||||
raise RegistryUnavailableError('window')
|
raise RegistryUnavailableError('window')
|
||||||
tab_id = tab.tab_id
|
tab_id = tab.tab_id
|
||||||
|
@ -472,37 +472,50 @@ class SessionManagerStub:
|
|||||||
def list_sessions(self):
|
def list_sessions(self):
|
||||||
return self.sessions
|
return self.sessions
|
||||||
|
|
||||||
|
|
||||||
class TabbedBrowserStub(QObject):
|
class TabbedBrowserStub(QObject):
|
||||||
|
|
||||||
"""Stub for the tabbed-browser object."""
|
"""Stub for the tabbed-browser object."""
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.widget = TabWidgetStub()
|
||||||
|
self.shutting_down = False
|
||||||
|
self.opened_url = None
|
||||||
|
|
||||||
|
def on_tab_close_requested(self, idx):
|
||||||
|
del self.widget.tabs[idx]
|
||||||
|
|
||||||
|
def widgets(self):
|
||||||
|
return self.widget.tabs
|
||||||
|
|
||||||
|
def tabopen(self, url):
|
||||||
|
self.opened_url = url
|
||||||
|
|
||||||
|
def openurl(self, url, *, newtab):
|
||||||
|
self.opened_url = url
|
||||||
|
|
||||||
|
class TabWidgetStub(QObject):
|
||||||
|
|
||||||
|
"""Stub for the tab-widget object."""
|
||||||
|
|
||||||
new_tab = pyqtSignal(browsertab.AbstractTab, int)
|
new_tab = pyqtSignal(browsertab.AbstractTab, int)
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.tabs = []
|
self.tabs = []
|
||||||
self.shutting_down = False
|
|
||||||
self._qtabbar = QTabBar()
|
self._qtabbar = QTabBar()
|
||||||
self.index_of = None
|
self.index_of = None
|
||||||
self.current_index = None
|
self.current_index = None
|
||||||
self.opened_url = None
|
|
||||||
|
|
||||||
def count(self):
|
def count(self):
|
||||||
return len(self.tabs)
|
return len(self.tabs)
|
||||||
|
|
||||||
def widgets(self):
|
|
||||||
return self.tabs
|
|
||||||
|
|
||||||
def widget(self, i):
|
def widget(self, i):
|
||||||
return self.tabs[i]
|
return self.tabs[i]
|
||||||
|
|
||||||
def page_title(self, i):
|
def page_title(self, i):
|
||||||
return self.tabs[i].title()
|
return self.tabs[i].title()
|
||||||
|
|
||||||
def on_tab_close_requested(self, idx):
|
|
||||||
del self.tabs[idx]
|
|
||||||
|
|
||||||
def tabBar(self):
|
def tabBar(self):
|
||||||
return self._qtabbar
|
return self._qtabbar
|
||||||
|
|
||||||
@ -526,13 +539,6 @@ class TabbedBrowserStub(QObject):
|
|||||||
return None
|
return None
|
||||||
return self.tabs[idx - 1]
|
return self.tabs[idx - 1]
|
||||||
|
|
||||||
def tabopen(self, url):
|
|
||||||
self.opened_url = url
|
|
||||||
|
|
||||||
def openurl(self, url, *, newtab):
|
|
||||||
self.opened_url = url
|
|
||||||
|
|
||||||
|
|
||||||
class ApplicationStub(QObject):
|
class ApplicationStub(QObject):
|
||||||
|
|
||||||
"""Stub to insert as the app object in objreg."""
|
"""Stub to insert as the app object in objreg."""
|
||||||
|
@ -68,8 +68,8 @@ def objects():
|
|||||||
@pytest.mark.parametrize('index_of, emitted', [(0, True), (1, False)])
|
@pytest.mark.parametrize('index_of, emitted', [(0, True), (1, False)])
|
||||||
def test_filtering(objects, tabbed_browser_stubs, index_of, emitted):
|
def test_filtering(objects, tabbed_browser_stubs, index_of, emitted):
|
||||||
browser = tabbed_browser_stubs[0]
|
browser = tabbed_browser_stubs[0]
|
||||||
browser.current_index = 0
|
browser.widget.current_index = 0
|
||||||
browser.index_of = index_of
|
browser.widget.index_of = index_of
|
||||||
objects.signaller.signal.emit('foo')
|
objects.signaller.signal.emit('foo')
|
||||||
if emitted:
|
if emitted:
|
||||||
assert objects.signaller.filtered_signal_arg == 'foo'
|
assert objects.signaller.filtered_signal_arg == 'foo'
|
||||||
@ -80,8 +80,8 @@ def test_filtering(objects, tabbed_browser_stubs, index_of, emitted):
|
|||||||
@pytest.mark.parametrize('index_of, verb', [(0, 'emitting'), (1, 'ignoring')])
|
@pytest.mark.parametrize('index_of, verb', [(0, 'emitting'), (1, 'ignoring')])
|
||||||
def test_logging(caplog, objects, tabbed_browser_stubs, index_of, verb):
|
def test_logging(caplog, objects, tabbed_browser_stubs, index_of, verb):
|
||||||
browser = tabbed_browser_stubs[0]
|
browser = tabbed_browser_stubs[0]
|
||||||
browser.current_index = 0
|
browser.widget.current_index = 0
|
||||||
browser.index_of = index_of
|
browser.widget.index_of = index_of
|
||||||
|
|
||||||
with caplog.at_level(logging.DEBUG, logger='signals'):
|
with caplog.at_level(logging.DEBUG, logger='signals'):
|
||||||
objects.signaller.signal.emit('foo')
|
objects.signaller.signal.emit('foo')
|
||||||
@ -94,8 +94,8 @@ def test_logging(caplog, objects, tabbed_browser_stubs, index_of, verb):
|
|||||||
@pytest.mark.parametrize('index_of', [0, 1])
|
@pytest.mark.parametrize('index_of', [0, 1])
|
||||||
def test_no_logging(caplog, objects, tabbed_browser_stubs, index_of):
|
def test_no_logging(caplog, objects, tabbed_browser_stubs, index_of):
|
||||||
browser = tabbed_browser_stubs[0]
|
browser = tabbed_browser_stubs[0]
|
||||||
browser.current_index = 0
|
browser.widget.current_index = 0
|
||||||
browser.index_of = index_of
|
browser.widget.index_of = index_of
|
||||||
|
|
||||||
with caplog.at_level(logging.DEBUG, logger='signals'):
|
with caplog.at_level(logging.DEBUG, logger='signals'):
|
||||||
objects.signaller.link_hovered.emit('foo')
|
objects.signaller.link_hovered.emit('foo')
|
||||||
@ -106,7 +106,7 @@ def test_no_logging(caplog, objects, tabbed_browser_stubs, index_of):
|
|||||||
def test_runtime_error(objects, tabbed_browser_stubs):
|
def test_runtime_error(objects, tabbed_browser_stubs):
|
||||||
"""Test that there's no crash if indexOf() raises RuntimeError."""
|
"""Test that there's no crash if indexOf() raises RuntimeError."""
|
||||||
browser = tabbed_browser_stubs[0]
|
browser = tabbed_browser_stubs[0]
|
||||||
browser.current_index = 0
|
browser.widget.current_index = 0
|
||||||
browser.index_of = RuntimeError
|
browser.widget.index_of = RuntimeError
|
||||||
objects.signaller.signal.emit('foo')
|
objects.signaller.signal.emit('foo')
|
||||||
assert objects.signaller.filtered_signal_arg is None
|
assert objects.signaller.filtered_signal_arg is None
|
||||||
|
@ -539,12 +539,12 @@ def test_session_completion(qtmodeltester, session_manager_stub):
|
|||||||
|
|
||||||
def test_tab_completion(qtmodeltester, fake_web_tab, app_stub, win_registry,
|
def test_tab_completion(qtmodeltester, fake_web_tab, app_stub, win_registry,
|
||||||
tabbed_browser_stubs):
|
tabbed_browser_stubs):
|
||||||
tabbed_browser_stubs[0].tabs = [
|
tabbed_browser_stubs[0].widget.tabs = [
|
||||||
fake_web_tab(QUrl('https://github.com'), 'GitHub', 0),
|
fake_web_tab(QUrl('https://github.com'), 'GitHub', 0),
|
||||||
fake_web_tab(QUrl('https://wikipedia.org'), 'Wikipedia', 1),
|
fake_web_tab(QUrl('https://wikipedia.org'), 'Wikipedia', 1),
|
||||||
fake_web_tab(QUrl('https://duckduckgo.com'), 'DuckDuckGo', 2),
|
fake_web_tab(QUrl('https://duckduckgo.com'), 'DuckDuckGo', 2),
|
||||||
]
|
]
|
||||||
tabbed_browser_stubs[1].tabs = [
|
tabbed_browser_stubs[1].widget.tabs = [
|
||||||
fake_web_tab(QUrl('https://wiki.archlinux.org'), 'ArchWiki', 0),
|
fake_web_tab(QUrl('https://wiki.archlinux.org'), 'ArchWiki', 0),
|
||||||
]
|
]
|
||||||
model = miscmodels.buffer()
|
model = miscmodels.buffer()
|
||||||
@ -567,12 +567,12 @@ def test_tab_completion(qtmodeltester, fake_web_tab, app_stub, win_registry,
|
|||||||
def test_tab_completion_delete(qtmodeltester, fake_web_tab, app_stub,
|
def test_tab_completion_delete(qtmodeltester, fake_web_tab, app_stub,
|
||||||
win_registry, tabbed_browser_stubs):
|
win_registry, tabbed_browser_stubs):
|
||||||
"""Verify closing a tab by deleting it from the completion widget."""
|
"""Verify closing a tab by deleting it from the completion widget."""
|
||||||
tabbed_browser_stubs[0].tabs = [
|
tabbed_browser_stubs[0].widget.tabs = [
|
||||||
fake_web_tab(QUrl('https://github.com'), 'GitHub', 0),
|
fake_web_tab(QUrl('https://github.com'), 'GitHub', 0),
|
||||||
fake_web_tab(QUrl('https://wikipedia.org'), 'Wikipedia', 1),
|
fake_web_tab(QUrl('https://wikipedia.org'), 'Wikipedia', 1),
|
||||||
fake_web_tab(QUrl('https://duckduckgo.com'), 'DuckDuckGo', 2)
|
fake_web_tab(QUrl('https://duckduckgo.com'), 'DuckDuckGo', 2)
|
||||||
]
|
]
|
||||||
tabbed_browser_stubs[1].tabs = [
|
tabbed_browser_stubs[1].widget.tabs = [
|
||||||
fake_web_tab(QUrl('https://wiki.archlinux.org'), 'ArchWiki', 0),
|
fake_web_tab(QUrl('https://wiki.archlinux.org'), 'ArchWiki', 0),
|
||||||
]
|
]
|
||||||
model = miscmodels.buffer()
|
model = miscmodels.buffer()
|
||||||
@ -588,19 +588,19 @@ def test_tab_completion_delete(qtmodeltester, fake_web_tab, app_stub,
|
|||||||
assert model.data(idx) == '0/2'
|
assert model.data(idx) == '0/2'
|
||||||
|
|
||||||
model.delete_cur_item(idx)
|
model.delete_cur_item(idx)
|
||||||
actual = [tab.url() for tab in tabbed_browser_stubs[0].tabs]
|
actual = [tab.url() for tab in tabbed_browser_stubs[0].widget.tabs]
|
||||||
assert actual == [QUrl('https://github.com'),
|
assert actual == [QUrl('https://github.com'),
|
||||||
QUrl('https://duckduckgo.com')]
|
QUrl('https://duckduckgo.com')]
|
||||||
|
|
||||||
|
|
||||||
def test_other_buffer_completion(qtmodeltester, fake_web_tab, app_stub,
|
def test_other_buffer_completion(qtmodeltester, fake_web_tab, app_stub,
|
||||||
win_registry, tabbed_browser_stubs, info):
|
win_registry, tabbed_browser_stubs, info):
|
||||||
tabbed_browser_stubs[0].tabs = [
|
tabbed_browser_stubs[0].widget.tabs = [
|
||||||
fake_web_tab(QUrl('https://github.com'), 'GitHub', 0),
|
fake_web_tab(QUrl('https://github.com'), 'GitHub', 0),
|
||||||
fake_web_tab(QUrl('https://wikipedia.org'), 'Wikipedia', 1),
|
fake_web_tab(QUrl('https://wikipedia.org'), 'Wikipedia', 1),
|
||||||
fake_web_tab(QUrl('https://duckduckgo.com'), 'DuckDuckGo', 2),
|
fake_web_tab(QUrl('https://duckduckgo.com'), 'DuckDuckGo', 2),
|
||||||
]
|
]
|
||||||
tabbed_browser_stubs[1].tabs = [
|
tabbed_browser_stubs[1].widget.tabs = [
|
||||||
fake_web_tab(QUrl('https://wiki.archlinux.org'), 'ArchWiki', 0),
|
fake_web_tab(QUrl('https://wiki.archlinux.org'), 'ArchWiki', 0),
|
||||||
]
|
]
|
||||||
info.win_id = 1
|
info.win_id = 1
|
||||||
@ -620,12 +620,12 @@ def test_other_buffer_completion(qtmodeltester, fake_web_tab, app_stub,
|
|||||||
|
|
||||||
def test_window_completion(qtmodeltester, fake_web_tab, tabbed_browser_stubs,
|
def test_window_completion(qtmodeltester, fake_web_tab, tabbed_browser_stubs,
|
||||||
info):
|
info):
|
||||||
tabbed_browser_stubs[0].tabs = [
|
tabbed_browser_stubs[0].widget.tabs = [
|
||||||
fake_web_tab(QUrl('https://github.com'), 'GitHub', 0),
|
fake_web_tab(QUrl('https://github.com'), 'GitHub', 0),
|
||||||
fake_web_tab(QUrl('https://wikipedia.org'), 'Wikipedia', 1),
|
fake_web_tab(QUrl('https://wikipedia.org'), 'Wikipedia', 1),
|
||||||
fake_web_tab(QUrl('https://duckduckgo.com'), 'DuckDuckGo', 2)
|
fake_web_tab(QUrl('https://duckduckgo.com'), 'DuckDuckGo', 2)
|
||||||
]
|
]
|
||||||
tabbed_browser_stubs[1].tabs = [
|
tabbed_browser_stubs[1].widget.tabs = [
|
||||||
fake_web_tab(QUrl('https://wiki.archlinux.org'), 'ArchWiki', 0)
|
fake_web_tab(QUrl('https://wiki.archlinux.org'), 'ArchWiki', 0)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -43,8 +43,8 @@ def test_backforward_widget(backforward_widget, tabbed_browser_stubs,
|
|||||||
"""Ensure the Backforward widget shows the correct text."""
|
"""Ensure the Backforward widget shows the correct text."""
|
||||||
tab = fake_web_tab(can_go_back=can_go_back, can_go_forward=can_go_forward)
|
tab = fake_web_tab(can_go_back=can_go_back, can_go_forward=can_go_forward)
|
||||||
tabbed_browser = tabbed_browser_stubs[0]
|
tabbed_browser = tabbed_browser_stubs[0]
|
||||||
tabbed_browser.current_index = 1
|
tabbed_browser.widget.current_index = 1
|
||||||
tabbed_browser.tabs = [tab]
|
tabbed_browser.widget.tabs = [tab]
|
||||||
backforward_widget.enabled = True
|
backforward_widget.enabled = True
|
||||||
backforward_widget.on_tab_cur_url_changed(tabbed_browser)
|
backforward_widget.on_tab_cur_url_changed(tabbed_browser)
|
||||||
assert backforward_widget.text() == expected_text
|
assert backforward_widget.text() == expected_text
|
||||||
@ -59,7 +59,7 @@ def test_backforward_widget(backforward_widget, tabbed_browser_stubs,
|
|||||||
# Check that the widget gets reset if empty.
|
# Check that the widget gets reset if empty.
|
||||||
if can_go_back and can_go_forward:
|
if can_go_back and can_go_forward:
|
||||||
tab = fake_web_tab(can_go_back=False, can_go_forward=False)
|
tab = fake_web_tab(can_go_back=False, can_go_forward=False)
|
||||||
tabbed_browser.tabs = [tab]
|
tabbed_browser.widget.tabs = [tab]
|
||||||
backforward_widget.enabled = True
|
backforward_widget.enabled = True
|
||||||
backforward_widget.on_tab_cur_url_changed(tabbed_browser)
|
backforward_widget.on_tab_cur_url_changed(tabbed_browser)
|
||||||
assert backforward_widget.text() == ''
|
assert backforward_widget.text() == ''
|
||||||
@ -70,15 +70,15 @@ def test_none_tab(backforward_widget, tabbed_browser_stubs, fake_web_tab):
|
|||||||
"""Make sure nothing crashes when passing None as tab."""
|
"""Make sure nothing crashes when passing None as tab."""
|
||||||
tab = fake_web_tab(can_go_back=True, can_go_forward=True)
|
tab = fake_web_tab(can_go_back=True, can_go_forward=True)
|
||||||
tabbed_browser = tabbed_browser_stubs[0]
|
tabbed_browser = tabbed_browser_stubs[0]
|
||||||
tabbed_browser.current_index = 1
|
tabbed_browser.widget.current_index = 1
|
||||||
tabbed_browser.tabs = [tab]
|
tabbed_browser.widget.tabs = [tab]
|
||||||
backforward_widget.enabled = True
|
backforward_widget.enabled = True
|
||||||
backforward_widget.on_tab_cur_url_changed(tabbed_browser)
|
backforward_widget.on_tab_cur_url_changed(tabbed_browser)
|
||||||
|
|
||||||
assert backforward_widget.text() == '[<>]'
|
assert backforward_widget.text() == '[<>]'
|
||||||
assert backforward_widget.isVisible()
|
assert backforward_widget.isVisible()
|
||||||
|
|
||||||
tabbed_browser.current_index = -1
|
tabbed_browser.widget.current_index = -1
|
||||||
backforward_widget.on_tab_cur_url_changed(tabbed_browser)
|
backforward_widget.on_tab_cur_url_changed(tabbed_browser)
|
||||||
|
|
||||||
assert backforward_widget.text() == ''
|
assert backforward_widget.text() == ''
|
||||||
|
@ -71,7 +71,7 @@ class TestTabWidget:
|
|||||||
with qtbot.waitExposed(widget):
|
with qtbot.waitExposed(widget):
|
||||||
widget.show()
|
widget.show()
|
||||||
|
|
||||||
benchmark(widget._update_tab_titles)
|
benchmark(widget.update_tab_titles)
|
||||||
|
|
||||||
@pytest.mark.parametrize("num_tabs", [4, 10])
|
@pytest.mark.parametrize("num_tabs", [4, 10])
|
||||||
def test_add_remove_tab_benchmark(self, benchmark, browser,
|
def test_add_remove_tab_benchmark(self, benchmark, browser,
|
||||||
@ -79,7 +79,7 @@ class TestTabWidget:
|
|||||||
"""Benchmark for addTab and removeTab."""
|
"""Benchmark for addTab and removeTab."""
|
||||||
def _run_bench():
|
def _run_bench():
|
||||||
for i in range(num_tabs):
|
for i in range(num_tabs):
|
||||||
browser.addTab(fake_web_tab(), 'foobar' + str(i))
|
browser.widget.addTab(fake_web_tab(), 'foobar' + str(i))
|
||||||
|
|
||||||
with qtbot.waitExposed(browser):
|
with qtbot.waitExposed(browser):
|
||||||
browser.show()
|
browser.show()
|
||||||
|
Loading…
Reference in New Issue
Block a user