Skip to content

Commit

Permalink
Move logic from ProgressWidget to Progress
Browse files Browse the repository at this point in the history
  • Loading branch information
pylbrecht committed Jul 25, 2024
1 parent 550d368 commit 2bc73b7
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 55 deletions.
4 changes: 2 additions & 2 deletions qutebrowser/mainwindow/mainwindow.py
Original file line number Diff line number Diff line change
Expand Up @@ -518,9 +518,9 @@ def _connect_signals(self):
self.status.on_tab_changed)

self.tabbed_browser.cur_progress.connect(
self.status.prog.widget.on_load_progress)
self.status.prog.on_load_progress)
self.tabbed_browser.cur_load_started.connect(
self.status.prog.widget.on_load_started)
self.status.prog.on_load_started)

self.tabbed_browser.cur_scroll_perc_changed.connect(
self.status.percentage.widget.set_perc)
Expand Down
4 changes: 2 additions & 2 deletions qutebrowser/mainwindow/statusbar/bar.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ def _get_widget_from_config(self, key, tab) -> StatusBarItem:
return self.keystring
elif key == 'progress':
if tab:
self.prog.widget.on_tab_changed(tab)
self.prog.on_tab_changed(tab)
return self.prog
elif key == 'search_match':
return self.search_match
Expand Down Expand Up @@ -410,7 +410,7 @@ def on_mode_left(self, old_mode, new_mode):
def on_tab_changed(self, tab):
"""Notify sub-widgets when the tab has been changed."""
self.url.widget.on_tab_changed(tab)
self.prog.widget.on_tab_changed(tab)
self.prog.on_tab_changed(tab)
self.percentage.widget.on_tab_changed(tab)
self.backforward.on_tab_changed(tab)
self.maybe_hide()
Expand Down
69 changes: 32 additions & 37 deletions qutebrowser/mainwindow/statusbar/progress.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,44 +29,9 @@ class ProgressWidget(QProgressBar):
}
"""

def __init__(self, parent=None):
super().__init__(parent)
stylesheet.set_register(self)
self.enabled = False
self.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
self.setTextVisible(False)
self.hide()

def __repr__(self):
return utils.get_repr(self, value=self.value())

@pyqtSlot()
def on_load_started(self):
"""Clear old error and show progress, used as slot to loadStarted."""
self.setValue(0)
self.setVisible(self.enabled)

@pyqtSlot(int)
def on_load_progress(self, value):
"""Hide the statusbar when loading finished.
We use this instead of loadFinished because we sometimes get
loadStarted and loadProgress(100) without loadFinished from Qt.
WORKAROUND for https://bugreports.qt.io/browse/QTBUG-65223
"""
self.setValue(value)
if value == 100:
self.hide()

def on_tab_changed(self, tab):
"""Set the correct value when the current tab changed."""
self.setValue(tab.progress())
if self.enabled and tab.load_status() == usertypes.LoadStatus.loading:
self.show()
else:
self.hide()

def sizeHint(self):
"""Set the height to the text height."""
width = super().sizeHint().width()
Expand All @@ -80,9 +45,39 @@ def minimumSizeHint(self):
class Progress(StatusBarItem):
def __init__(self, widget: ProgressWidget):
self.widget = widget
self.enabled = False
stylesheet.set_register(self.widget)
self.widget.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
self.widget.setTextVisible(False)
self.widget.hide()

def enable(self):
self.widget.enabled = True
self.enabled = True

def disable(self):
self.widget.enabled = False
self.enabled = False

def on_load_started(self):
"""Clear old error and show progress, used as slot to loadStarted."""
self.widget.setValue(0)
self.widget.setVisible(self.enabled)

def on_tab_changed(self, tab):
"""Set the correct value when the current tab changed."""
self.widget.setValue(tab.progress())
if self.enabled and tab.load_status() == usertypes.LoadStatus.loading:
self.widget.show()
else:
self.widget.hide()

def on_load_progress(self, value):
"""Hide the statusbar when loading finished.
We use this instead of loadFinished because we sometimes get
loadStarted and loadProgress(100) without loadFinished from Qt.
WORKAROUND for https://bugreports.qt.io/browse/QTBUG-65223
"""
self.widget.setValue(value)
if value == 100:
self.widget.hide()
28 changes: 14 additions & 14 deletions tests/unit/mainwindow/statusbar/test_progress.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
@pytest.fixture
def progress_widget(qtbot, config_stub):
"""Create a Progress widget and checks its initial state."""
widget = progress.ProgressWidget()
widget = progress.Progress(widget=progress.ProgressWidget())
widget.enabled = True
qtbot.add_widget(widget)
assert not widget.isVisible()
assert not widget.isTextVisible()
qtbot.add_widget(widget.widget)
assert not widget.widget.isVisible()
assert not widget.widget.isTextVisible()
return widget


Expand All @@ -28,8 +28,8 @@ def test_load_started(progress_widget):
progress_widget: Progress widget that will be tested.
"""
progress_widget.on_load_started()
assert progress_widget.value() == 0
assert progress_widget.isVisible()
assert progress_widget.widget.value() == 0
assert progress_widget.widget.isVisible()


@pytest.mark.parametrize('progress, load_status, expected_visible', [
Expand All @@ -48,7 +48,7 @@ def test_tab_changed(fake_web_tab, progress_widget, progress, load_status,
"""
tab = fake_web_tab(progress=progress, load_status=load_status)
progress_widget.on_tab_changed(tab)
actual = progress_widget.value(), progress_widget.isVisible()
actual = progress_widget.widget.value(), progress_widget.widget.isVisible()
expected = tab.progress(), expected_visible
assert actual == expected

Expand All @@ -58,7 +58,7 @@ def test_not_shown_when_disabled(progress_widget, fake_web_tab):
tab = fake_web_tab(progress=15, load_status=usertypes.LoadStatus.loading)
progress_widget.enabled = False
progress_widget.on_tab_changed(tab)
assert not progress_widget.isVisible()
assert not progress_widget.widget.isVisible()


def test_progress_affecting_statusbar_height(config_stub, fake_statusbar,
Expand All @@ -78,8 +78,8 @@ def test_progress_affecting_statusbar_height(config_stub, fake_statusbar,
expected_height = fake_statusbar.fontMetrics().height()
assert fake_statusbar.height() == expected_height

fake_statusbar.hbox.addWidget(progress_widget)
progress_widget.show()
fake_statusbar.hbox.addWidget(progress_widget.widget)
progress_widget.widget.show()

assert fake_statusbar.height() == expected_height

Expand All @@ -89,8 +89,8 @@ def test_progress_big_statusbar(qtbot, fake_statusbar, progress_widget):
https://github.com/qutebrowser/qutebrowser/commit/46d1760798b730852e2207e2cdc05a9308e44f80
"""
fake_statusbar.hbox.addWidget(progress_widget)
progress_widget.show()
expected_height = progress_widget.height()
fake_statusbar.hbox.addWidget(progress_widget.widget)
progress_widget.widget.show()
expected_height = progress_widget.widget.height()
fake_statusbar.hbox.addStrut(50)
assert progress_widget.height() == expected_height
assert progress_widget.widget.height() == expected_height

0 comments on commit 2bc73b7

Please sign in to comment.