Make stuff run again

This commit is contained in:
Florian Bruhin 2014-05-15 19:02:20 +02:00
parent d3eaeaac91
commit 1ca80fec8e
5 changed files with 42 additions and 13 deletions

View File

@ -397,17 +397,17 @@ class QuteBrowser(QApplication):
self.config.changed.connect(obj.on_config_changed)
# statusbar
tabs.currentChanged.connect(status.prog.current_changed)
tabs.currentChanged.connect(status.prog.on_tab_changed)
tabs.cur_progress.connect(status.prog.setValue)
tabs.cur_load_finished.connect(status.prog.hide)
tabs.cur_load_started.connect(status.prog.on_load_started)
tabs.currentChanged.connect(status.percentage.current_changed)
tabs.currentChanged.connect(status.percentage.on_tab_changed)
tabs.cur_scroll_perc_changed.connect(status.percentage.set_perc)
tabs.cur_statusbar_message.connect(status.txt.on_statusbar_message)
tabs.currentChanged.connect(status.url.current_changed)
tabs.currentChanged.connect(status.url.on_tab_changed)
tabs.cur_url_changed.connect(status.url.set_url)
tabs.cur_link_hovered.connect(status.url.set_hover_url)

View File

@ -45,3 +45,9 @@ class Percentage(TextBase):
self.setText('[bot]')
else:
self.setText('[{:2}%]'.format(y))
@pyqtSlot(int)
def on_tab_changed(self, idx):
"""Update scroll position when tab changed."""
tab = self.sender().widget(idx)
self.set_perc(*tab.scroll_pos)

View File

@ -20,6 +20,7 @@
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QProgressBar, QSizePolicy
from qutebrowser.widgets.webview import LoadStatus
from qutebrowser.config.style import set_register_stylesheet
@ -57,3 +58,12 @@ class Progress(QProgressBar):
"""Clear old error and show progress, used as slot to loadStarted."""
self.setValue(0)
self.show()
@pyqtSlot(int)
def on_tab_changed(self, idx):
tab = self.sender().widget(idx)
self.setValue(tab.progress)
if tab.load_status == LoadStatus.loading:
self.show()
else:
self.hide()

View File

@ -19,6 +19,7 @@
from PyQt5.QtCore import pyqtSlot, pyqtProperty, Qt
from qutebrowser.widgets.webview import LoadStatus
from qutebrowser.widgets.statusbar._textbase import TextBase
from qutebrowser.config.style import set_register_stylesheet, get_stylesheet
from qutebrowser.utils.url import urlstring
@ -140,3 +141,14 @@ class Url(TextBase):
self.urltype = self._old_urltype
self._old_url = None
self._old_urltype = None
@pyqtSlot(int)
def on_tab_changed(self, idx):
"""Update URL if the tab changed."""
tab = self.sender().widget(idx)
self.setText(urlstring(tab.url()))
status = LoadStatus[tab.load_status]
if status in ['success', 'error', 'warn']:
self.urltype = status
else:
self.urltype = 'normal'

View File

@ -59,7 +59,7 @@ class WebView(QWebView):
Accessed via load_status property.
_has_ssl_errors: Whether SSL errors occured during loading.
_zoom: A NeighborList with the zoom levels.
_scroll_pos: The old scroll position.
_old_scroll_pos: The old scroll position.
_shutdown_callback: Callback to be called after shutdown.
_open_target: Where to open the next tab ("normal", "tab", "bgtab")
_force_open_target: Override for _open_target.
@ -82,7 +82,8 @@ class WebView(QWebView):
super().__init__(parent)
self._load_status = LoadStatus.none
self.tabbedbrowser = parent
self._scroll_pos = (-1, -1)
self.scroll_pos = (-1, -1)
self._old_scroll_pos = (-1, -1)
self._shutdown_callback = None
self._open_target = Target.normal
self._force_open_target = None
@ -90,9 +91,6 @@ class WebView(QWebView):
self._zoom = None
self._init_neighborlist()
self.progress = 0
self.loadProgress.connect(lambda p: setattr(self, 'progress', p))
self.page_.networkAccessManager().sslErrors.connect(
lambda *args: setattr(self, '_has_ssl_errors', True))
self.page_ = BrowserPage(self)
self.setPage(self.page_)
self.hintmanager = HintManager(self)
@ -103,6 +101,9 @@ class WebView(QWebView):
self.linkClicked.connect(self.on_link_clicked)
self.page_.mainFrame().loadStarted.connect(self.on_load_started)
self.loadFinished.connect(self.on_load_finished)
self.loadProgress.connect(lambda p: setattr(self, 'progress', p))
self.page_.networkAccessManager().sslErrors.connect(
lambda *args: setattr(self, '_has_ssl_errors', True))
# FIXME find some way to hide scrollbars without setScrollBarPolicy
@property
@ -374,11 +375,11 @@ class WebView(QWebView):
def on_load_finished(self, ok):
"""Handle auto-insert-mode after loading finished."""
if ok and not self._has_ssl_errors:
self.urltype = 'success'
self.load_status = LoadStatus.success
elif ok:
self.urltype = 'warn'
self.load_status = LoadStatus.warn
else:
self.urltype = 'error'
self.load_status = LoadStatus.error
if not config.get('input', 'auto-insert-mode'):
return
if modeman.instance().mode == 'insert' or not ok:
@ -449,8 +450,8 @@ class WebView(QWebView):
frame = self.page_.mainFrame()
new_pos = (frame.scrollBarValue(Qt.Horizontal),
frame.scrollBarValue(Qt.Vertical))
if self._scroll_pos != new_pos:
self._scroll_pos = new_pos
if self._old_scroll_pos != new_pos:
self._old_scroll_pos = new_pos
logging.debug("Updating scroll position")
m = (frame.scrollBarMaximum(Qt.Horizontal),
frame.scrollBarMaximum(Qt.Vertical))