diff options
Diffstat (limited to 'www-client/falkon/files/falkon-3.0.1-qiodevice-main-thread.patch')
-rw-r--r-- | www-client/falkon/files/falkon-3.0.1-qiodevice-main-thread.patch | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/www-client/falkon/files/falkon-3.0.1-qiodevice-main-thread.patch b/www-client/falkon/files/falkon-3.0.1-qiodevice-main-thread.patch new file mode 100644 index 000000000000..2606dc508857 --- /dev/null +++ b/www-client/falkon/files/falkon-3.0.1-qiodevice-main-thread.patch @@ -0,0 +1,106 @@ +From a7d2f8757919b4db63867ecbb4fb64c11d64f453 Mon Sep 17 00:00:00 2001 +From: David Rosca <nowrep@gmail.com> +Date: Sun, 22 Jul 2018 15:17:04 +0200 +Subject: FalkonSchemeHandler: Make sure to load data on main thread + +QIODevice::read is called on WebEngine IO thread. +--- + .../network/schemehandlers/falkonschemehandler.cpp | 41 +++++++++++----------- + .../network/schemehandlers/falkonschemehandler.h | 2 ++ + 2 files changed, 23 insertions(+), 20 deletions(-) + +diff --git a/src/lib/network/schemehandlers/falkonschemehandler.cpp b/src/lib/network/schemehandlers/falkonschemehandler.cpp +index 5706c04..4e01897 100644 +--- a/src/lib/network/schemehandlers/falkonschemehandler.cpp ++++ b/src/lib/network/schemehandlers/falkonschemehandler.cpp +@@ -89,8 +89,7 @@ FalkonSchemeReply::FalkonSchemeReply(QWebEngineUrlRequestJob *job, QObject *pare + { + m_pageName = m_job->requestUrl().path(); + +- open(QIODevice::ReadOnly); +- m_buffer.open(QIODevice::ReadWrite); ++ QTimer::singleShot(0, this, &FalkonSchemeReply::loadPage); + } + + void FalkonSchemeReply::loadPage() +@@ -98,38 +97,40 @@ void FalkonSchemeReply::loadPage() + if (m_loaded) + return; + +- QTextStream stream(&m_buffer); +- stream.setCodec("UTF-8"); ++ QString contents; + + if (m_pageName == QLatin1String("about")) { +- stream << aboutPage(); +- } +- else if (m_pageName == QLatin1String("start")) { +- stream << startPage(); +- } +- else if (m_pageName == QLatin1String("speeddial")) { +- stream << speeddialPage(); +- } +- else if (m_pageName == QLatin1String("config")) { +- stream << configPage(); +- } +- else if (m_pageName == QLatin1String("restore")) { +- stream << restorePage(); ++ contents = aboutPage(); ++ } else if (m_pageName == QLatin1String("start")) { ++ contents = startPage(); ++ } else if (m_pageName == QLatin1String("speeddial")) { ++ contents = speeddialPage(); ++ } else if (m_pageName == QLatin1String("config")) { ++ contents = configPage(); ++ } else if (m_pageName == QLatin1String("restore")) { ++ contents = restorePage(); + } + +- stream.flush(); +- m_buffer.reset(); ++ QMutexLocker lock(&m_mutex); ++ m_buffer.setData(contents.toUtf8()); ++ m_buffer.open(QIODevice::ReadOnly); ++ lock.unlock(); ++ ++ open(QIODevice::ReadOnly); ++ emit readyRead(); ++ + m_loaded = true; + } + + qint64 FalkonSchemeReply::bytesAvailable() const + { ++ QMutexLocker lock(&m_mutex); + return m_buffer.bytesAvailable(); + } + + qint64 FalkonSchemeReply::readData(char *data, qint64 maxSize) + { +- loadPage(); ++ QMutexLocker lock(&m_mutex); + return m_buffer.read(data, maxSize); + } + +diff --git a/src/lib/network/schemehandlers/falkonschemehandler.h b/src/lib/network/schemehandlers/falkonschemehandler.h +index 2c071a7..b92969d 100644 +--- a/src/lib/network/schemehandlers/falkonschemehandler.h ++++ b/src/lib/network/schemehandlers/falkonschemehandler.h +@@ -18,6 +18,7 @@ + #ifndef FALKONSCHEMEHANDLER_H + #define FALKONSCHEMEHANDLER_H + ++#include <QMutex> + #include <QBuffer> + #include <QIODevice> + #include <QWebEngineUrlSchemeHandler> +@@ -60,6 +61,7 @@ private: + QBuffer m_buffer; + QString m_pageName; + QWebEngineUrlRequestJob *m_job; ++ mutable QMutex m_mutex; + }; + + #endif // FALKONSCHEMEHANDLER_H +-- +cgit v1.1 |