Fix clicking on scrollbar arrows/gutter not scrolling text

This commit is contained in:
Kovid Goyal 2019-10-07 07:22:03 +05:30
parent 6b224f2a35
commit bb5b7b0253
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -70,19 +70,26 @@ class CentralWidget(QWidget):
def __init__(self, web_view, parent):
QWidget.__init__(self, parent)
self._ignore_value_changes = False
self.web_view = web_view
self.l = l = QHBoxLayout(self)
l.setContentsMargins(0, 0, 0, 0), l.setSpacing(0)
l.addWidget(web_view)
self.vertical_scrollbar = vs = ScrollBar(Qt.Vertical, self)
vs.sliderMoved[int].connect(self.slider_moved)
vs.valueChanged[int].connect(self.value_changed)
l.addWidget(vs)
self.current_book_length = None
web_view.notify_progress_frac.connect(self.update_scrollbar_positions)
web_view.notify_progress_frac.connect(self.update_scrollbar_positions_on_scroll)
web_view.scrollbar_visibility_changed.connect(self.apply_scrollbar_visibility)
web_view.overlay_visibility_changed.connect(self.overlay_visibility_changed)
self.apply_scrollbar_visibility()
def __enter__(self):
self._ignore_value_changes = True
def __exit__(self, *a):
self._ignore_value_changes = False
def apply_scrollbar_visibility(self):
visible = get_session_pref('standalone_scrollbar', default=False, group=None)
self.vertical_scrollbar.setVisible(bool(visible))
@ -91,14 +98,17 @@ class CentralWidget(QWidget):
self.vertical_scrollbar.setEnabled(not visible)
def set_scrollbar_value(self, frac):
with self:
val = int(self.vertical_scrollbar.maximum() * frac)
self.vertical_scrollbar.setValue(val)
def slider_moved(self, val):
def value_changed(self, val):
if not self._ignore_value_changes:
frac = val / self.vertical_scrollbar.maximum()
self.web_view.goto_frac(frac)
def initialize_scrollbars(self, book_length):
with self:
self.current_book_length = book_length
maximum = book_length / 10
bar = self.vertical_scrollbar
@ -107,7 +117,7 @@ class CentralWidget(QWidget):
bar.setSingleStep(10)
bar.setPageStep(100)
def update_scrollbar_positions(self, progress_frac, file_progress_frac, book_length):
def update_scrollbar_positions_on_scroll(self, progress_frac, file_progress_frac, book_length):
if book_length != self.current_book_length:
self.initialize_scrollbars(book_length)
if not self.vertical_scrollbar.isSliderDown():