Don't freeze when pasting large markdown documents
BUG: 460802
This commit is contained in:
@@ -10,6 +10,7 @@
|
|||||||
#include <QSyntaxHighlighter>
|
#include <QSyntaxHighlighter>
|
||||||
#include <QTextBlock>
|
#include <QTextBlock>
|
||||||
#include <QTextDocument>
|
#include <QTextDocument>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
#include <Sonnet/BackgroundChecker>
|
#include <Sonnet/BackgroundChecker>
|
||||||
#include <Sonnet/Settings>
|
#include <Sonnet/Settings>
|
||||||
@@ -28,6 +29,7 @@ public:
|
|||||||
Sonnet::Settings settings;
|
Sonnet::Settings settings;
|
||||||
QList<QPair<int, QString>> errors;
|
QList<QPair<int, QString>> errors;
|
||||||
QString previousText;
|
QString previousText;
|
||||||
|
QTimer rehighlightTimer;
|
||||||
SyntaxHighlighter(QObject *parent)
|
SyntaxHighlighter(QObject *parent)
|
||||||
: QSyntaxHighlighter(parent)
|
: QSyntaxHighlighter(parent)
|
||||||
{
|
{
|
||||||
@@ -39,9 +41,14 @@ public:
|
|||||||
|
|
||||||
connect(checker, &Sonnet::BackgroundChecker::misspelling, this, [this](const QString &word, int start) {
|
connect(checker, &Sonnet::BackgroundChecker::misspelling, this, [this](const QString &word, int start) {
|
||||||
errors += {start, word};
|
errors += {start, word};
|
||||||
rehighlight();
|
|
||||||
checker->continueChecking();
|
checker->continueChecking();
|
||||||
});
|
});
|
||||||
|
connect(checker, &Sonnet::BackgroundChecker::done, this, [this]() {
|
||||||
|
rehighlightTimer.start();
|
||||||
|
});
|
||||||
|
rehighlightTimer.setInterval(100);
|
||||||
|
rehighlightTimer.setSingleShot(true);
|
||||||
|
rehighlightTimer.callOnTimeout(this, &QSyntaxHighlighter::rehighlight);
|
||||||
}
|
}
|
||||||
void highlightBlock(const QString &text) override
|
void highlightBlock(const QString &text) override
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user