From aae38ddb5f3f6f0316689b7c771fdd55531da65e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Sat, 8 Jun 2019 02:32:48 +0100 Subject: [PATCH] Prevent scroll when only one of the text view or preview are scrollable --- uberwriter/preview_web_view.py | 13 ++++++++----- uberwriter/text_view.py | 11 +++++++---- uberwriter/text_view_scroller.py | 4 ++++ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/uberwriter/preview_web_view.py b/uberwriter/preview_web_view.py index e48e795..7094e54 100644 --- a/uberwriter/preview_web_view.py +++ b/uberwriter/preview_web_view.py @@ -59,7 +59,7 @@ if (canScroll && isRendered) {{ self.connect("size-allocate", self.on_size_allocate) self.connect("destroy", self.on_destroy) - self.scroll_scale = 0.0 + self.scroll_scale = -1 self.state_loaded = False self.state_load_failed = False @@ -69,6 +69,9 @@ if (canScroll && isRendered) {{ self.timeout_id = None + def can_scroll(self): + return self.scroll_scale != -1 + def get_scroll_scale(self): return self.scroll_scale @@ -114,11 +117,11 @@ if (canScroll && isRendered) {{ self.timeout_id = None # Set scroll scale if specified, and the state is not dirty - if not self.state_discard_read and scroll_scale not in (None, -1, self.scroll_scale): + if not self.state_discard_read and scroll_scale not in (None, self.scroll_scale): self.scroll_scale = scroll_scale - self.emit("scroll-scale-changed", self.scroll_scale) - else: - self.state_discard_read = False + if self.scroll_scale != -1: + self.emit("scroll-scale-changed", self.scroll_scale) + self.state_discard_read = False # Handle the current state if not self.state_loaded or self.state_load_failed or self.state_waiting: diff --git a/uberwriter/text_view.py b/uberwriter/text_view.py index ea16989..22baa2b 100644 --- a/uberwriter/text_view.py +++ b/uberwriter/text_view.py @@ -124,6 +124,9 @@ class TextView(Gtk.TextView): text_buffer = self.get_buffer() text_buffer.set_text(text) + def can_scroll(self): + return self.scroller.can_scroll() + def get_scroll_scale(self): return self.scroller.get_scroll_scale() if self.scroller else 0 @@ -150,8 +153,8 @@ class TextView(Gtk.TextView): if parent: parent.set_size_request(self.get_min_width(), 500) self.scroller = TextViewScroller(self, parent) - parent.get_vadjustment().connect("changed", self.on_scroll_scale_changed) - parent.get_vadjustment().connect("value-changed", self.on_scroll_scale_changed) + parent.get_vadjustment().connect("changed", self.on_vadjustment_changed) + parent.get_vadjustment().connect("value-changed", self.on_vadjustment_changed) else: self.scroller = None @@ -168,10 +171,10 @@ class TextView(Gtk.TextView): self.markup.apply() return False - def on_scroll_scale_changed(self, *_): + def on_vadjustment_changed(self, *_): if self.frozen_scroll_scale is not None: self.set_scroll_scale(self.frozen_scroll_scale) - else: + elif self.can_scroll(): self.emit("scroll-scale-changed", self.get_scroll_scale()) def unfreeze_scroll_scale(self): diff --git a/uberwriter/text_view_scroller.py b/uberwriter/text_view_scroller.py index b483359..1efa2f7 100644 --- a/uberwriter/text_view_scroller.py +++ b/uberwriter/text_view_scroller.py @@ -6,6 +6,10 @@ class TextViewScroller: self.scrolled_window = scrolled_window self.smooth_scroller = None + def can_scroll(self): + vap = self.scrolled_window.get_vadjustment().props + return vap.upper > vap.page_size + def get_scroll_scale(self): vap = self.scrolled_window.get_vadjustment().props if vap.upper > vap.page_size: