From 3e29a647ab049e924f297849c6b653db3e442c9c Mon Sep 17 00:00:00 2001 From: Le Tan Date: Fri, 13 Jul 2018 21:54:26 +0800 Subject: [PATCH] MdTab: fix the synchronization between read and edit mode Mute web view in edit mode. --- src/resources/markdown_template.js | 6 ++++++ src/vdocument.cpp | 5 +++-- src/vdocument.h | 13 +++++++++++++ src/vmdtab.cpp | 7 +++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/resources/markdown_template.js b/src/resources/markdown_template.js index eea1e644..d502eee1 100644 --- a/src/resources/markdown_template.js +++ b/src/resources/markdown_template.js @@ -154,12 +154,18 @@ var htmlContent = function() { content.htmlContentCB("", styleContent(), contentDiv.innerHTML); }; +var mute = function(muted) { + g_muteScroll = muted; +}; + new QWebChannel(qt.webChannelTransport, function(channel) { content = channel.objects.content; content.requestScrollToAnchor.connect(scrollToAnchor); + content.requestMuted.connect(mute); + if (typeof highlightText == "function") { content.requestHighlightText.connect(highlightText); content.noticeReadyToHighlightText(); diff --git a/src/vdocument.cpp b/src/vdocument.cpp index d1a6fa1e..dfcdb37d 100644 --- a/src/vdocument.cpp +++ b/src/vdocument.cpp @@ -12,7 +12,8 @@ VDocument::VDocument(const VFile *v_file, QObject *p_parent) m_readyToHighlight(false), m_plantUMLHelper(NULL), m_graphvizHelper(NULL), - m_nextID(0) + m_nextID(0), + m_webViewMuted(false) { } @@ -46,7 +47,7 @@ void VDocument::scrollToAnchor(const QString &anchor) void VDocument::setHeader(const QString &anchor) { - if (anchor == m_header) { + if (m_webViewMuted || anchor == m_header) { return; } diff --git a/src/vdocument.h b/src/vdocument.h index 66c94460..139efe93 100644 --- a/src/vdocument.h +++ b/src/vdocument.h @@ -67,6 +67,8 @@ public: int registerIdentifier(); + void muteWebView(bool p_muted); + public slots: // Will be called in the HTML side @@ -173,6 +175,8 @@ signals: void codeBlockPreviewReady(int p_id, const QString &p_lang, const QString &p_html); + void requestMuted(bool p_muted); + private: QString m_toc; QString m_header; @@ -198,6 +202,9 @@ private: VGraphvizHelper *m_graphvizHelper; int m_nextID; + + // Whether propogate signals from web view. + bool m_webViewMuted; }; inline bool VDocument::isReadyToHighlight() const @@ -219,4 +226,10 @@ inline int VDocument::registerIdentifier() { return ++m_nextID; } + +inline void VDocument::muteWebView(bool p_muted) +{ + m_webViewMuted = p_muted; + emit requestMuted(m_webViewMuted); +} #endif // VDOCUMENT_H diff --git a/src/vmdtab.cpp b/src/vmdtab.cpp index 83366ee7..be73bd3d 100644 --- a/src/vmdtab.cpp +++ b/src/vmdtab.cpp @@ -434,6 +434,7 @@ void VMdTab::setupMarkdownViewer() // Recover header from edit mode. scrollWebViewToHeader(m_headerFromEditMode); m_headerFromEditMode.clear(); + m_document->muteWebView(false); return; } @@ -1058,6 +1059,10 @@ void VMdTab::tabIsReady(TabReady p_mode) || (!m_isEditMode && p_mode == TabReady::ReadMode); if (isCurrentMode) { + if (p_mode == TabReady::ReadMode) { + m_document->muteWebView(false); + } + restoreFromTabInfo(); if (m_enableBackupFile @@ -1426,6 +1431,7 @@ void VMdTab::setCurrentMode(Mode p_mode) break; case Mode::Edit: + m_document->muteWebView(true); m_webViewer->hide(); m_editor->show(); @@ -1435,6 +1441,7 @@ void VMdTab::setCurrentMode(Mode p_mode) case Mode::EditPreview: Q_ASSERT(m_editor); + m_document->muteWebView(true); m_webViewer->setInPreview(true); m_webViewer->show(); m_editor->show();