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("size-allocate", self.on_size_allocate)
|
||||||
self.connect("destroy", self.on_destroy)
|
self.connect("destroy", self.on_destroy)
|
||||||
|
|
||||||
self.scroll_scale = 0.0
|
self.scroll_scale = -1
|
||||||
|
|
||||||
self.state_loaded = False
|
self.state_loaded = False
|
||||||
self.state_load_failed = False
|
self.state_load_failed = False
|
||||||
|
@ -69,6 +69,9 @@ if (canScroll && isRendered) {{
|
||||||
|
|
||||||
self.timeout_id = None
|
self.timeout_id = None
|
||||||
|
|
||||||
|
def can_scroll(self):
|
||||||
|
return self.scroll_scale != -1
|
||||||
|
|
||||||
def get_scroll_scale(self):
|
def get_scroll_scale(self):
|
||||||
return self.scroll_scale
|
return self.scroll_scale
|
||||||
|
|
||||||
|
@ -114,11 +117,11 @@ if (canScroll && isRendered) {{
|
||||||
self.timeout_id = None
|
self.timeout_id = None
|
||||||
|
|
||||||
# Set scroll scale if specified, and the state is not dirty
|
# 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.scroll_scale = scroll_scale
|
||||||
self.emit("scroll-scale-changed", self.scroll_scale)
|
if self.scroll_scale != -1:
|
||||||
else:
|
self.emit("scroll-scale-changed", self.scroll_scale)
|
||||||
self.state_discard_read = False
|
self.state_discard_read = False
|
||||||
|
|
||||||
# Handle the current state
|
# Handle the current state
|
||||||
if not self.state_loaded or self.state_load_failed or self.state_waiting:
|
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 = self.get_buffer()
|
||||||
text_buffer.set_text(text)
|
text_buffer.set_text(text)
|
||||||
|
|
||||||
|
def can_scroll(self):
|
||||||
|
return self.scroller.can_scroll()
|
||||||
|
|
||||||
def get_scroll_scale(self):
|
def get_scroll_scale(self):
|
||||||
return self.scroller.get_scroll_scale() if self.scroller else 0
|
return self.scroller.get_scroll_scale() if self.scroller else 0
|
||||||
|
|
||||||
|
@ -150,8 +153,8 @@ class TextView(Gtk.TextView):
|
||||||
if parent:
|
if parent:
|
||||||
parent.set_size_request(self.get_min_width(), 500)
|
parent.set_size_request(self.get_min_width(), 500)
|
||||||
self.scroller = TextViewScroller(self, parent)
|
self.scroller = TextViewScroller(self, parent)
|
||||||
parent.get_vadjustment().connect("changed", self.on_scroll_scale_changed)
|
parent.get_vadjustment().connect("changed", self.on_vadjustment_changed)
|
||||||
parent.get_vadjustment().connect("value-changed", self.on_scroll_scale_changed)
|
parent.get_vadjustment().connect("value-changed", self.on_vadjustment_changed)
|
||||||
else:
|
else:
|
||||||
self.scroller = None
|
self.scroller = None
|
||||||
|
|
||||||
|
@ -168,10 +171,10 @@ class TextView(Gtk.TextView):
|
||||||
self.markup.apply()
|
self.markup.apply()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def on_scroll_scale_changed(self, *_):
|
def on_vadjustment_changed(self, *_):
|
||||||
if self.frozen_scroll_scale is not None:
|
if self.frozen_scroll_scale is not None:
|
||||||
self.set_scroll_scale(self.frozen_scroll_scale)
|
self.set_scroll_scale(self.frozen_scroll_scale)
|
||||||
else:
|
elif self.can_scroll():
|
||||||
self.emit("scroll-scale-changed", self.get_scroll_scale())
|
self.emit("scroll-scale-changed", self.get_scroll_scale())
|
||||||
|
|
||||||
def unfreeze_scroll_scale(self):
|
def unfreeze_scroll_scale(self):
|
||||||
|
|
|
@ -6,6 +6,10 @@ class TextViewScroller:
|
||||||
self.scrolled_window = scrolled_window
|
self.scrolled_window = scrolled_window
|
||||||
self.smooth_scroller = None
|
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):
|
def get_scroll_scale(self):
|
||||||
vap = self.scrolled_window.get_vadjustment().props
|
vap = self.scrolled_window.get_vadjustment().props
|
||||||
if vap.upper > vap.page_size:
|
if vap.upper > vap.page_size:
|
||||||
|
|
Loading…
Reference in New Issue