From 9af681738de458c34b91614917f080ae3f61f942 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 7 Jun 2009 12:59:46 -0700 Subject: [PATCH] Fix ebook-viewer showing double scroll bars with Qt 4.5 --- src/calibre/gui2/dialogs/fetch_metadata.py | 1 - src/calibre/gui2/viewer/documentview.py | 20 +++++++++++--------- src/calibre/gui2/viewer/main.py | 4 +++- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/calibre/gui2/dialogs/fetch_metadata.py b/src/calibre/gui2/dialogs/fetch_metadata.py index 62f26c757f..aab564e05d 100644 --- a/src/calibre/gui2/dialogs/fetch_metadata.py +++ b/src/calibre/gui2/dialogs/fetch_metadata.py @@ -190,7 +190,6 @@ class FetchMetadata(QDialog, Ui_FetchMetadata): if hasattr(self, '_hangcheck') and self._hangcheck.isActive(): self._hangcheck.stop() - def __enter__(self, *args): return self diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index 507e17a8e9..a09a97b55a 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -351,6 +351,7 @@ class DocumentView(QWebView): html = open(path, 'rb').read().decode(path.encoding, 'replace') html = EntityDeclarationProcessor(html).processed_html self.setHtml(html, QUrl.fromLocalFile(path)) + self.turn_off_internal_scrollbars() def load_started(self): if self.manager is not None: @@ -387,6 +388,10 @@ class DocumentView(QWebView): self.document.set_reference_prefix('%d.'%(spine_index+1)) if scrolled: self.manager.scrolled(self.document.scroll_fraction) + + self.turn_off_internal_scrollbars() + + def turn_off_internal_scrollbars(self): self.document.mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff) self.document.mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff) @@ -432,20 +437,17 @@ class DocumentView(QWebView): Qt.NoButton, Qt.NoModifier)) def next_page(self): + delta_y = self.document.window_height - 25 if self.document.at_bottom: if self.manager is not None: self.manager.next_document() else: opos = self.document.ypos - while True: - delta = abs(opos-self.document.ypos) - if delta > self.size().height(): - self.wheel_event(down=False) - break - pre = self.document.ypos - self.wheel_event(down=True) - if pre == self.document.ypos: - break + lower_limit = opos + delta_y + max_y = self.document.height - self.document.window_height + lower_limit = min(max_y, lower_limit) + if lower_limit > opos: + self.document.scroll_to(self.document.xpos, lower_limit) self.find_next_blank_line( self.height() - (self.document.ypos-opos) ) if self.manager is not None: self.manager.scrolled(self.scroll_fraction) diff --git a/src/calibre/gui2/viewer/main.py b/src/calibre/gui2/viewer/main.py index 1cfbae905a..eca3e93b36 100644 --- a/src/calibre/gui2/viewer/main.py +++ b/src/calibre/gui2/viewer/main.py @@ -541,7 +541,9 @@ class EbookViewer(MainWindow, Ui_EbookViewer): QApplication.processEvents() if worker.exception is not None: if isinstance(worker.exception, DRMError): - error_dialog(self, _('DRM Error'), _('

This book is protected by DRM')%'http://wiki.mobileread.com/wiki/DRM').exec_() + error_dialog(self, _('DRM Error'), + _('

This book is protected by DRM') + %'http://wiki.mobileread.com/wiki/DRM').exec_() else: r = getattr(worker.exception, 'reason', worker.exception) error_dialog(self, _('Could not open ebook'),