forked from Mirrors/apostrophe
Allow disabling scroll sync
parent
db652ef84f
commit
939edcc762
|
@ -48,6 +48,13 @@
|
|||
It can cause performance problems to some users.
|
||||
</description>
|
||||
</key>
|
||||
<key name='sync-scroll' type='b'>
|
||||
<default>true</default>
|
||||
<summary>Synchronize editor/preview scrolling</summary>
|
||||
<description>
|
||||
Keep the editor and preview scroll positions in sync.
|
||||
</description>
|
||||
</key>
|
||||
<key name='input-format' type='s'>
|
||||
<default>"markdown"</default>
|
||||
<summary>Input format</summary>
|
||||
|
|
|
@ -138,11 +138,11 @@
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="format_label">
|
||||
<object class="GtkLabel" id="sync_scroll_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label" translatable="yes">Input format</property>
|
||||
<property name="label" translatable="yes">Synchronize editor/preview scrolling</property>
|
||||
<property name="justify">right</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -151,17 +151,29 @@
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="input_format_help_button">
|
||||
<object class="GtkSwitch" id="sync_scroll_switch">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="image">help</property>
|
||||
<property name="halign">end</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="input_format_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label" translatable="yes">Input format</property>
|
||||
<property name="justify">right</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="input_format_combobox">
|
||||
<property name="visible">True</property>
|
||||
|
@ -172,9 +184,24 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="top_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="input_format_help_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="image">help</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
|
|
|
@ -188,6 +188,8 @@ class Application(Gtk.Application):
|
|||
self.window.toggle_gradient_overlay(settings.get_value(key))
|
||||
elif key == "input-format":
|
||||
self.window.reload_preview()
|
||||
elif key == "sync-scroll":
|
||||
self.window.reload_preview(reshow=True)
|
||||
elif key == "stat-default":
|
||||
self.window.update_default_stat()
|
||||
elif key == "preview-mode":
|
||||
|
|
|
@ -433,8 +433,8 @@ class MainWindow(StyledWindow):
|
|||
elif self.overlay_id:
|
||||
self.scrolled_window.disconnect(self.overlay_id)
|
||||
|
||||
def reload_preview(self):
|
||||
self.preview_handler.reload()
|
||||
def reload_preview(self, reshow=False):
|
||||
self.preview_handler.reload(reshow=reshow)
|
||||
|
||||
def load_file(self, filename=None):
|
||||
"""Open File from command line or open / open recent etc."""
|
||||
|
|
|
@ -82,6 +82,10 @@ class PreferencesDialog:
|
|||
self.gradient_overlay_switch.set_active(self.settings.get_value("gradient-overlay"))
|
||||
self.gradient_overlay_switch.connect("state-set", self.on_gradient_overlay)
|
||||
|
||||
self.sync_scroll_switch = self.builder.get_object("sync_scroll_switch")
|
||||
self.sync_scroll_switch.set_active(self.settings.get_value("sync-scroll"))
|
||||
self.sync_scroll_switch.connect("state-set", self.on_sync_scroll)
|
||||
|
||||
input_format_store = Gtk.ListStore(int, str)
|
||||
input_format = self.settings.get_string("input-format")
|
||||
input_format_active = 0
|
||||
|
@ -126,6 +130,10 @@ class PreferencesDialog:
|
|||
self.settings.set_value("gradient-overlay", GLib.Variant.new_boolean(state))
|
||||
return False
|
||||
|
||||
def on_sync_scroll(self, _, state):
|
||||
self.settings.set_value("sync-scroll", GLib.Variant.new_boolean(state))
|
||||
return False
|
||||
|
||||
def on_input_format(self, combobox):
|
||||
fmt = self.formats[combobox.get_active()]
|
||||
self.settings.set_value("input-format", GLib.Variant.new_string(fmt["format"]))
|
||||
|
|
|
@ -6,6 +6,7 @@ import gi
|
|||
|
||||
from uberwriter.helpers import get_builder
|
||||
from uberwriter.preview_renderer import PreviewRenderer
|
||||
from uberwriter.settings import Settings
|
||||
|
||||
gi.require_version('WebKit2', '4.0')
|
||||
from gi.repository import WebKit2, GLib
|
||||
|
@ -43,9 +44,11 @@ class PreviewHandler:
|
|||
|
||||
window.connect("style-updated", self.reload)
|
||||
|
||||
self.text_changed_handler_id = None
|
||||
|
||||
self.settings = Settings.new()
|
||||
self.web_scroll_handler_id = None
|
||||
self.text_scroll_handler_id = None
|
||||
self.text_changed_handler_id = None
|
||||
|
||||
self.loading = False
|
||||
self.shown = False
|
||||
|
@ -78,7 +81,7 @@ class PreviewHandler:
|
|||
if self.web_view.is_loading():
|
||||
self.web_view_pending_html = html
|
||||
else:
|
||||
self.web_view.load_html(html, 'file://localhost/')
|
||||
self.web_view.load_html(html, "file://localhost/")
|
||||
|
||||
elif step == Step.RENDER:
|
||||
# Last step: show the preview. This is a one-time step.
|
||||
|
@ -86,32 +89,41 @@ class PreviewHandler:
|
|||
return
|
||||
self.shown = True
|
||||
|
||||
self.text_changed_handler_id = \
|
||||
self.text_view.get_buffer().connect("changed", self.__show)
|
||||
|
||||
GLib.idle_add(self.web_view.set_scroll_scale, self.text_view.get_scroll_scale())
|
||||
|
||||
self.preview_renderer.show(self.web_view)
|
||||
|
||||
self.text_changed_handler_id = \
|
||||
self.text_view.get_buffer().connect("changed", self.__show)
|
||||
self.web_scroll_handler_id = \
|
||||
self.web_view.connect("scroll-scale-changed", self.on_web_view_scrolled)
|
||||
self.text_scroll_handler_id = \
|
||||
self.text_view.connect("scroll-scale-changed", self.on_text_view_scrolled)
|
||||
if self.settings.get_boolean("sync-scroll"):
|
||||
self.web_scroll_handler_id = \
|
||||
self.web_view.connect("scroll-scale-changed", self.on_web_view_scrolled)
|
||||
self.text_scroll_handler_id = \
|
||||
self.text_view.connect("scroll-scale-changed", self.on_text_view_scrolled)
|
||||
|
||||
def reload(self, *_):
|
||||
def reload(self, *_widget, reshow=False):
|
||||
if self.shown:
|
||||
if reshow:
|
||||
self.hide()
|
||||
self.show()
|
||||
|
||||
def hide(self):
|
||||
if self.shown:
|
||||
self.shown = False
|
||||
|
||||
self.text_view.get_buffer().disconnect(self.text_changed_handler_id)
|
||||
|
||||
GLib.idle_add(self.text_view.set_scroll_scale, self.web_view.get_scroll_scale())
|
||||
|
||||
self.preview_renderer.hide(self.web_view)
|
||||
|
||||
self.text_view.get_buffer().disconnect(self.text_changed_handler_id)
|
||||
self.text_view.disconnect(self.text_scroll_handler_id)
|
||||
self.web_view.disconnect(self.web_scroll_handler_id)
|
||||
if self.text_scroll_handler_id:
|
||||
self.text_view.disconnect(self.text_scroll_handler_id)
|
||||
self.text_scroll_handler_id = None
|
||||
if self.web_scroll_handler_id:
|
||||
self.web_view.disconnect(self.web_scroll_handler_id)
|
||||
self.web_scroll_handler_id = None
|
||||
|
||||
if self.loading:
|
||||
self.loading = False
|
||||
|
|
|
@ -18,6 +18,8 @@ class PreviewRenderer:
|
|||
|
||||
def __init__(
|
||||
self, main_window, content, editor, text_view, preview, mode_revealer, mode_button):
|
||||
self.main_window = main_window
|
||||
self.main_window.connect("delete-event", self.on_window_closed)
|
||||
self.content = content
|
||||
self.editor = editor
|
||||
self.text_view = text_view
|
||||
|
@ -25,14 +27,13 @@ class PreviewRenderer:
|
|||
self.mode_revealer = mode_revealer
|
||||
self.mode_button = mode_button
|
||||
self.mode_button.connect("clicked", self.show_mode_popover)
|
||||
self.popover = None
|
||||
|
||||
self.settings = Settings.new()
|
||||
self.main_window = main_window
|
||||
self.main_window.connect("delete-event", self.on_window_closed)
|
||||
self.popover = None
|
||||
self.window = None
|
||||
self.headerbar = None
|
||||
self.mode = self.settings.get_enum("preview-mode")
|
||||
|
||||
self.mode = self.settings.get_enum("preview-mode")
|
||||
self.update_mode()
|
||||
|
||||
def show(self, web_view):
|
||||
|
|
Loading…
Reference in New Issue