forked from Mirrors/apostrophe
Prevent scroll when only one of the text view or preview are scrollable
parent
d78602c4db
commit
aae38ddb5f
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue