diff --git a/kdevplatform/documentation/CMakeLists.txt b/kdevplatform/documentation/CMakeLists.txt index 78a8fec852..b371c36ee4 100644 --- a/kdevplatform/documentation/CMakeLists.txt +++ b/kdevplatform/documentation/CMakeLists.txt @@ -1,50 +1,50 @@ add_definitions(-DTRANSLATION_DOMAIN=\"kdevplatform\") find_package(Qt5WebEngineWidgets CONFIG) if(TARGET Qt5::WebEngineWidgets) set_package_properties(Qt5WebEngineWidgets PROPERTIES PURPOSE "QtWebEngine, for integrated documentation" URL "https://qt.io/" TYPE REQUIRED) else() find_package(Qt5WebKitWidgets CONFIG) set_package_properties(Qt5WebKitWidgets PROPERTIES PURPOSE "QtWebKit, for integrated documentation" URL "https://qt.io/" TYPE REQUIRED) set(USE_QTWEBKIT 1) endif() set(KDevPlatformDocumentation_LIB_SRCS standarddocumentationview.cpp documentationfindwidget.cpp documentationview.cpp ) declare_qt_logging_category(KDevPlatformDocumentation_LIB_SRCS TYPE LIBRARY CATEGORY_BASENAME "documentation" ) ki18n_wrap_ui(KDevPlatformDocumentation_LIB_SRCS documentationfindwidget.ui) kdevplatform_add_library(KDevPlatformDocumentation SOURCES ${KDevPlatformDocumentation_LIB_SRCS}) target_link_libraries(KDevPlatformDocumentation PUBLIC KDev::Interfaces PRIVATE KDev::Util ) if(USE_QTWEBKIT) target_link_libraries(KDevPlatformDocumentation PRIVATE Qt5::WebKitWidgets) - target_compile_definitions(KDevPlatformDocumentation PRIVATE -DUSE_QTWEBKIT) + target_compile_definitions(KDevPlatformDocumentation PUBLIC -DUSE_QTWEBKIT) else() target_link_libraries(KDevPlatformDocumentation PRIVATE Qt5::WebEngineWidgets) endif() install(FILES documentationfindwidget.h standarddocumentationview.h DESTINATION ${KDE_INSTALL_INCLUDEDIR}/kdevplatform/documentation COMPONENT Devel ) diff --git a/plugins/qthelp/qthelpnetwork.cpp b/plugins/qthelp/qthelpnetwork.cpp index 1e65c89090..1aaddc3f81 100644 --- a/plugins/qthelp/qthelpnetwork.cpp +++ b/plugins/qthelp/qthelpnetwork.cpp @@ -1,86 +1,89 @@ /* This file is part of KDevelop Copyright 2009 Aleix Pol This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "qthelpnetwork.h" HelpNetworkAccessManager::HelpNetworkAccessManager(QHelpEngineCore* engine, QObject* parent) : QNetworkAccessManager(parent), m_helpEngine(engine) {} HelpNetworkAccessManager::~HelpNetworkAccessManager() { } HelpNetworkReply::HelpNetworkReply(const QNetworkRequest &request, const QByteArray &fileData, const QString &mimeType) : data(fileData), origLen(fileData.length()) { setRequest(request); setOpenMode(QIODevice::ReadOnly); // Instantly finish processing if data is empty. Without this code the loadFinished() // signal will never be emitted by the corresponding QWebView. if (!origLen) { qCDebug(QTHELP) << "Empty data for" << request.url().toDisplayString(); QTimer::singleShot(0, this, &QNetworkReply::finished); } - // Fix broken CSS images (tested on Qt 5.5.1 and 5.7.0) +#ifdef USE_QTWEBKIT + // Fix broken CSS images (tested on Qt 5.5.1, 5.7.0, 5.9.7 and 5.14.1) if (request.url().fileName() == QLatin1String("offline.css")) { data.replace("../images", "images"); } +#endif + // Fix flickering when loading, the page has the offline-simple.css stylesheet which is replaced // later by offline.css by javascript which causes flickering so we force the full stylesheet // from the beginning if (request.url().fileName().endsWith(QLatin1String(".html"))) { data.replace("offline-simple.css", "offline.css"); } setHeader(QNetworkRequest::ContentTypeHeader, mimeType); setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(origLen)); QTimer::singleShot(0, this, &QNetworkReply::metaDataChanged); QTimer::singleShot(0, this, &QIODevice::readyRead); } qint64 HelpNetworkReply::readData(char *buffer, qint64 maxlen) { qint64 len = qMin(qint64(data.length()), maxlen); if (len) { memcpy(buffer, data.constData(), len); data.remove(0, len); } if (!data.length()) QTimer::singleShot(0, this, &QNetworkReply::finished); return len; } QNetworkReply *HelpNetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData) { QString scheme = request.url().scheme(); if (scheme == QLatin1String("qthelp") || scheme == QLatin1String("about")) { QString mimeType = QMimeDatabase().mimeTypeForUrl(request.url()).name(); if (mimeType == QLatin1String("application/x-extension-html")) { // see also: https://bugs.kde.org/show_bug.cgi?id=288277 // firefox seems to add this bullshit mimetype above // which breaks displaying of qthelp documentation :( mimeType = QStringLiteral("text/html"); } return new HelpNetworkReply(request, m_helpEngine->fileData(request.url()), mimeType); } return QNetworkAccessManager::createRequest(op, request, outgoingData); }