SHA256
1
0
forked from pool/marble

Accepting request 643651 from home:wolfi323:branches:KDE:Applications

- Add Port-to-QtWebEngine.patch and build with QtWebEngine instead
  of QtWebKit where possible
- Drop QtWebKit BuildRequires, no longer supported
- Add Fix-MarbleConfig.cmake-to-find-QtWebEngine.patch to fix
  building against marble when QtWebEngine is used
- Add necessary requirements to the devel package

OBS-URL: https://build.opensuse.org/request/show/643651
OBS-URL: https://build.opensuse.org/package/show/KDE:Applications/marble?expand=0&rev=165
This commit is contained in:
Luca Beltrame 2018-10-22 09:23:39 +00:00 committed by Git OBS Bridge
parent 8cdb4c31f7
commit be5b2d49be
4 changed files with 872 additions and 16 deletions

View File

@ -0,0 +1,34 @@
From b8db30a58396060034ac76aa5f7d408b6c467d5f Mon Sep 17 00:00:00 2001
From: "Friedrich W. H. Kossebau" <kossebau@kde.org>
Date: Fri, 19 Oct 2018 17:40:43 +0200
Subject: Fix MarbleConfig.cmake file to update to port to QtWebEngine
---
src/lib/marble/MarbleConfig.cmake.in | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/lib/marble/MarbleConfig.cmake.in b/src/lib/marble/MarbleConfig.cmake.in
index 4f6fc17..ec39b79 100644
--- a/src/lib/marble/MarbleConfig.cmake.in
+++ b/src/lib/marble/MarbleConfig.cmake.in
@@ -8,13 +8,15 @@ if (_CMakeFindDependencyMacro_FOUND)
find_dependency(Qt5Xml @REQUIRED_QT_VERSION@)
find_dependency(Qt5Widgets @REQUIRED_QT_VERSION@)
if (NOT MARBLE_NO_WEBKITWIDGETS)
- find_dependency(Qt5WebKitWidgets @REQUIRED_QT_VERSION@)
+ find_dependency(Qt5WebEngine @REQUIRED_QT_VERSION@)
+ find_dependency(Qt5WebEngineWidgets @REQUIRED_QT_VERSION@)
endif()
else()
find_package(Qt5Xml REQUIRED)
find_package(Qt5Widgets REQUIRED)
if (NOT MARBLE_NO_WEBKITWIDGETS)
- find_package(Qt5WebKitWidgets REQUIRED)
+ find_package(Qt5WebEngine REQUIRED)
+ find_package(Qt5WebEngineWidgets REQUIRED)
endif()
endif()
--
cgit v0.11.2

799
Port-to-QtWebEngine.patch Normal file
View File

@ -0,0 +1,799 @@
From b42ee5c83d77761ef7d8bf8635662159bc2884bb Mon Sep 17 00:00:00 2001
From: Torsten Rahn <rahn@kde.org>
Date: Wed, 17 Oct 2018 15:21:28 +0200
Subject: Differential Revision: https://phabricator.kde.org/D698
Port to QtWebEngine (finally!)
---
CMakeLists.txt | 6 +-
src/apps/behaim/CMakeLists.txt | 2 +
src/apps/marble-maps/CMakeLists.txt | 2 +
src/lib/marble/CMakeLists.txt | 3 +-
src/lib/marble/LegendWidget.cpp | 2 -
src/lib/marble/LegendWidget.ui | 2 +-
src/lib/marble/MarbleLegendBrowser.cpp | 108 ++++++++++-----------
src/lib/marble/MarbleLegendBrowser.h | 31 ++++--
src/lib/marble/MarbleWebView.cpp | 4 +-
src/lib/marble/MarbleWebView.h | 25 ++++-
src/lib/marble/PopupItem.cpp | 47 ++++-----
src/lib/marble/PopupItem.h | 6 +-
src/lib/marble/TinyWebBrowser.cpp | 23 +++--
src/lib/marble/TinyWebBrowser.h | 10 +-
src/lib/marble/WebPopupWidget.ui | 14 ++-
src/lib/marble/cloudsync/RouteItemDelegate.cpp | 2 +-
.../geodata/handlers/dgml/DgmlIconTagHandler.cpp | 4 +-
17 files changed, 165 insertions(+), 126 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2ea05eb..dd13e4c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -130,11 +130,11 @@ if(CMAKE_SYSTEM_NAME STREQUAL Android)
else()
find_package(Qt5 ${REQUIRED_QT_VERSION}
COMPONENTS
- WebKit
- WebKitWidgets
+ WebEngine
+ WebEngineWidgets
)
- if ( NOT Qt5WebKitWidgets_FOUND )
+ if ( NOT Qt5WebEngineWidgets_FOUND )
set ( MARBLE_NO_WEBKITWIDGETS TRUE )
endif()
endif()
diff --git a/src/apps/behaim/CMakeLists.txt b/src/apps/behaim/CMakeLists.txt
index b8ad26c..bbed8a9 100644
--- a/src/apps/behaim/CMakeLists.txt
+++ b/src/apps/behaim/CMakeLists.txt
@@ -25,6 +25,8 @@ if (CMAKE_SYSTEM_NAME STREQUAL Android)
Qt5::Positioning
Qt5::AndroidExtras
Qt5::Multimedia
+ Qt5::WebEngineWidgets
+ Qt5::WebEngine
)
else()
set(TARGET marble-behaim)
diff --git a/src/apps/marble-maps/CMakeLists.txt b/src/apps/marble-maps/CMakeLists.txt
index 14be2c0..a52818c 100644
--- a/src/apps/marble-maps/CMakeLists.txt
+++ b/src/apps/marble-maps/CMakeLists.txt
@@ -30,6 +30,8 @@ if (CMAKE_SYSTEM_NAME STREQUAL Android)
Qt5::AndroidExtras
Qt5::Multimedia
Qt5::QuickControls2
+ Qt5::WebEngineWidgets
+ Qt5::WebEngine
)
else()
set(TARGET marble-maps)
diff --git a/src/lib/marble/CMakeLists.txt b/src/lib/marble/CMakeLists.txt
index 3f1afa7..64d0cec 100644
--- a/src/lib/marble/CMakeLists.txt
+++ b/src/lib/marble/CMakeLists.txt
@@ -394,7 +394,8 @@ target_link_libraries(marblewidget
if (NOT MARBLE_NO_WEBKITWIDGETS)
target_link_libraries(marblewidget
LINK_PUBLIC
- Qt5::WebKitWidgets
+ Qt5::WebEngineWidgets
+ Qt5::WebEngine
)
endif ()
if (NOT MARBLE_NO_DBUS)
diff --git a/src/lib/marble/LegendWidget.cpp b/src/lib/marble/LegendWidget.cpp
index c6949ae..8f9c237 100644
--- a/src/lib/marble/LegendWidget.cpp
+++ b/src/lib/marble/LegendWidget.cpp
@@ -22,8 +22,6 @@ using namespace Marble;
#include "ui_LegendWidget.h"
#endif
-#include "MarbleLegendBrowser.h"
-
namespace Marble
{
diff --git a/src/lib/marble/LegendWidget.ui b/src/lib/marble/LegendWidget.ui
index 5a41ffd..14c7633 100644
--- a/src/lib/marble/LegendWidget.ui
+++ b/src/lib/marble/LegendWidget.ui
@@ -28,7 +28,7 @@
<customwidgets>
<customwidget>
<class>MarbleLegendBrowser</class>
- <extends>QWebView</extends>
+ <extends>QWebEngineView</extends>
<header>MarbleLegendBrowser.h</header>
</customwidget>
</customwidgets>
diff --git a/src/lib/marble/MarbleLegendBrowser.cpp b/src/lib/marble/MarbleLegendBrowser.cpp
index c06fe9a..d5a4a87 100644
--- a/src/lib/marble/MarbleLegendBrowser.cpp
+++ b/src/lib/marble/MarbleLegendBrowser.cpp
@@ -24,8 +24,9 @@
#include <QRegExp>
#ifndef MARBLE_NO_WEBKITWIDGETS
-#include <QWebFrame>
-#include <QWebElement>
+#include <QWebEnginePage>
+#include <QWebChannel>
+#include "MarbleWebView.h"
#endif
#include <QTextDocument>
@@ -49,10 +50,11 @@ namespace Marble
class MarbleLegendBrowserPrivate
{
public:
- MarbleModel *m_marbleModel;
+ MarbleModel *m_marbleModel;
QMap<QString, bool> m_checkBoxMap;
QMap<QString, QPixmap> m_symbolMap;
QString m_currentThemeId;
+ MarbleJsWrapper *m_jsWrapper;
};
@@ -64,14 +66,7 @@ MarbleLegendBrowser::MarbleLegendBrowser( QWidget *parent )
d( new MarbleLegendBrowserPrivate )
{
d->m_marbleModel = nullptr;
-
-#ifndef MARBLE_NO_WEBKITWIDGETS
- QWebFrame *frame = page()->mainFrame();
- connect(frame, SIGNAL(javaScriptWindowObjectCleared()),
- this, SLOT(injectCheckBoxChecker()));
- page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
- connect( this, SIGNAL(linkClicked(QUrl)), this, SLOT(openLinkExternally(QUrl)) );
-#endif
+ d->m_jsWrapper = new MarbleJsWrapper(this);
}
MarbleLegendBrowser::~MarbleLegendBrowser()
@@ -92,7 +87,7 @@ void MarbleLegendBrowser::setMarbleModel( MarbleModel *marbleModel )
QSize MarbleLegendBrowser::sizeHint() const
{
- return QSize( 180, 320 );
+ return QSize( 320, 320 );
}
void MarbleLegendBrowser::initTheme()
@@ -153,6 +148,7 @@ void MarbleLegendBrowser::loadLegend()
TemplateDocument doc(finalHtml);
finalHtml = doc.finalText();
+ injectWebChannel(finalHtml);
reverseSupportCheckboxes(finalHtml);
// Generate some parts of the html from the MapTheme <Legend> tag.
@@ -166,18 +162,20 @@ void MarbleLegendBrowser::loadLegend()
QUrl baseUrl = QUrl::fromLocalFile( legendPath );
// Set the html string in the QTextBrowser.
- setHtml(finalHtml, baseUrl);
+ MarbleWebPage * page = new MarbleWebPage(this);
+ connect( page, SIGNAL(linkClicked(QUrl)), this, SLOT(openLinkExternally(QUrl)) );
+ page->setHtml(finalHtml, baseUrl);
+ setPage(page);
- QTextDocument *document = new QTextDocument(page()->mainFrame()->toHtml());
- d->m_marbleModel->setLegend( document );
-#endif
-}
+ QWebChannel *channel = new QWebChannel(page);
+ channel->registerObject(QStringLiteral("Marble"), d->m_jsWrapper);
+ page->setWebChannel(channel);
-void MarbleLegendBrowser::injectCheckBoxChecker()
-{
-#ifndef MARBLE_NO_WEBKITWIDGETS
- QWebFrame *frame = page()->mainFrame();
- frame->addToJavaScriptWindowObject( "Marble", this );
+ if ( d->m_marbleModel ) {
+ page->toHtml([=]( QString document ) {
+ d->m_marbleModel->setLegend( new QTextDocument(document) );
+ });
+ }
#endif
}
@@ -194,6 +192,7 @@ bool MarbleLegendBrowser::event( QEvent * event )
{
// "Delayed initialization": legend gets created only
if ( event->type() == QEvent::Show ) {
+ setVisible(true);
loadLegend();
return true;
}
@@ -218,8 +217,7 @@ QString MarbleLegendBrowser::readHtml( const QUrl & name )
void MarbleLegendBrowser::translateHtml( QString & html )
{
// must match string extraction in Messages.sh
- // TODO: html.remove also changes html, is that intended?
- QString s = html.remove(0, html.indexOf(QLatin1String("<body>")));
+ QString s = html;
QRegExp rx( "</?\\w+((\\s+\\w+(\\s*=\\s*(?:\".*\"|'.*'|[^'\">\\s]+))?)+\\s*|\\s*)/?>" );
rx.setMinimal( true );
s.replace( rx, "\n" );
@@ -232,6 +230,18 @@ void MarbleLegendBrowser::translateHtml( QString & html )
html.replace(*i, QCoreApplication::translate("Legends", (*i).toUtf8().constData()));
}
+void MarbleLegendBrowser::injectWebChannel(QString &html)
+{
+ QString webChannelCode = "<script type=\"text/javascript\" src=\"qrc:///qtwebchannel/qwebchannel.js\"></script>";
+ webChannelCode += "<script> document.addEventListener(\"DOMContentLoaded\", function() {"
+ "new QWebChannel(qt.webChannelTransport, function (channel) {"
+ "Marble = channel.objects.Marble;"
+ "});"
+ "}); </script>"
+ "</head>";
+ html.replace("</head>", webChannelCode);
+}
+
void MarbleLegendBrowser::reverseSupportCheckboxes(QString &html)
{
const QString old = "<a href=\"checkbox:cities\"/>";
@@ -241,7 +251,7 @@ void MarbleLegendBrowser::reverseSupportCheckboxes(QString &html)
checked = "checked";
const QString repair = QLatin1String(
- "<input type=\"checkbox\" "
+ "<input style=\"position: relative; top: -4px;\" type=\"checkbox\" "
"onchange=\"Marble.setCheckedProperty(this.name, this.checked);\" ") + checked + QLatin1String(" name=\"cities\"/>");
html.replace(old, repair);
@@ -283,7 +293,7 @@ QString MarbleLegendBrowser::generateSectionsHtml()
if(!section->radio().isEmpty()) {
checkBoxString = QLatin1String(
"<label class=\"section-head\">"
- "<input type=\"radio\" "
+ "<input style=\"position: relative; top: -4px;\" type=\"radio\" "
"onchange=\"Marble.setRadioCheckedProperty(this.value, this.name ,this.checked);\" ") +
checked + QLatin1String(" value=\"") + section->connectTo() + QLatin1String("\" name=\"") + section->radio() + QLatin1String("\" /><span>")
+ heading +
@@ -292,7 +302,7 @@ QString MarbleLegendBrowser::generateSectionsHtml()
} else {
checkBoxString = QLatin1String(
"<label class=\"section-head\">"
- "<input type=\"checkbox\" "
+ "<input style=\"position: relative; top: -4px;\" type=\"checkbox\" "
"onchange=\"Marble.setCheckedProperty(this.name, this.checked);\" ") + checked + QLatin1String(" name=\"") + section->connectTo() + QLatin1String("\" /><span>")
+ heading +
QLatin1String("</span></label>");
@@ -330,20 +340,24 @@ QString MarbleLegendBrowser::generateSectionsHtml()
src = QUrl::fromLocalFile( path ).toString();
styleDiv = QLatin1String("width: ") + QString::number(pixmapWidth) + QLatin1String("px; height: ") +
QString::number(pixmapHeight) + QLatin1String("px;");
+ } else {
+ // Workaround for rendered border around empty images in webkit
+ src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
}
// NOTICE. There are some pixmaps without image, so we should
// create just a plain rectangle with set color
- else if (item->icon()->color().isValid()) {
+ if (QColor(item->icon()->color()).isValid()) {
const QColor color = item->icon()->color();
styleDiv = QLatin1String("width: ") + QString::number(pixmapWidth) + QLatin1String("px; height: ") +
QString::number(pixmapHeight) + QLatin1String("px; background-color: ") + color.name() + QLatin1Char(';');
}
+ styleDiv += " position: relative; top: -3px;";
const QString text = QCoreApplication::translate("DGML", item->text().toUtf8().constData());
QString html = QLatin1String(
"<div class=\"legend-entry\">"
" <label>") + checkBoxString + QLatin1String(
" <img class=\"image-pic\" src=\"") + src + QLatin1String("\" style=\"") + styleDiv + QLatin1String("\"/>"
- " <span class=\"notation\">") + text + QLatin1String("</span>"
+ " <span class=\"kotation\" >") + text + QLatin1String("</span>"
" </label>"
"</div>");
customLegendString += html;
@@ -356,39 +370,19 @@ QString MarbleLegendBrowser::generateSectionsHtml()
void MarbleLegendBrowser::setCheckedProperty( const QString& name, bool checked )
{
-#ifndef MARBLE_NO_WEBKITWIDGETS
- QWebElement box = page()->mainFrame()->findFirstElement(QLatin1String("input[name=") + name + QLatin1Char(']'));
- if (!box.isNull()) {
- if (checked != d->m_checkBoxMap[name]) {
- d->m_checkBoxMap[name] = checked;
- emit toggledShowProperty( name, checked );
- }
+ if (checked != d->m_checkBoxMap[name]) {
+ d->m_checkBoxMap[name] = checked;
+ emit toggledShowProperty( name, checked );
}
-
- update();
-#endif
}
void MarbleLegendBrowser::setRadioCheckedProperty( const QString& value, const QString& name , bool checked )
{
-#ifndef MARBLE_NO_WEBKITWIDGETS
- QWebElement box = page()->mainFrame()->findFirstElement(QLatin1String("input[value=") + value + QLatin1Char(']'));
- QWebElementCollection boxes = page()->mainFrame()->findAllElements(QLatin1String("input[name=") + name + QLatin1Char(']'));
- QString currentValue;
- for(int i=0; i<boxes.count(); ++i) {
- currentValue = boxes.at(i).attribute("value");
- d->m_checkBoxMap[currentValue]=false;
- emit toggledShowProperty( currentValue, false );
- }
- if (!box.isNull()) {
- if (checked != d->m_checkBoxMap[value]) {
- d->m_checkBoxMap[value] = checked;
- emit toggledShowProperty( value, checked );
- }
- }
-
- update();
-#endif
+ Q_UNUSED(value)
+ if (checked != d->m_checkBoxMap[name]) {
+ d->m_checkBoxMap[name] = checked;
+ emit toggledShowProperty( name, checked );
+ }
}
}
diff --git a/src/lib/marble/MarbleLegendBrowser.h b/src/lib/marble/MarbleLegendBrowser.h
index b77b035..6f568e9 100644
--- a/src/lib/marble/MarbleLegendBrowser.h
+++ b/src/lib/marble/MarbleLegendBrowser.h
@@ -46,19 +46,17 @@ class MARBLE_EXPORT MarbleLegendBrowser : public MarbleWebView
void setMarbleModel( MarbleModel *marbleModel );
QSize sizeHint() const override;
- public Q_SLOTS:
- void setCheckedProperty( const QString& name, bool checked );
- void setRadioCheckedProperty( const QString& value,const QString& name, bool checked );
-
-
Q_SIGNALS:
void toggledShowProperty( const QString&, bool );
void tourLinkClicked( const QString &url );
+ public Q_SLOTS:
+ void setCheckedProperty( const QString& name, bool checked );
+ void setRadioCheckedProperty( const QString& value,const QString& name, bool checked );
+
private Q_SLOTS:
void initTheme();
void loadLegend();
- void injectCheckBoxChecker();
void openLinkExternally( const QUrl &url );
protected:
@@ -68,13 +66,32 @@ class MARBLE_EXPORT MarbleLegendBrowser : public MarbleWebView
static void translateHtml(QString &html);
private:
+ void injectWebChannel( QString &html );
void reverseSupportCheckboxes( QString &html );
-
private:
Q_DISABLE_COPY( MarbleLegendBrowser )
MarbleLegendBrowserPrivate * const d;
};
+class MarbleJsWrapper : public QObject
+{
+ Q_OBJECT
+public:
+ explicit MarbleJsWrapper( MarbleLegendBrowser* parent ) : m_parent(parent) {}
+
+public Q_SLOTS:
+ void setCheckedProperty( const QString& name, bool checked )
+ {
+ m_parent->setCheckedProperty(name, checked);
+ }
+ void setRadioCheckedProperty( const QString& value,const QString& name, bool checked )
+ {
+ m_parent->setRadioCheckedProperty(value, name, checked);
+ }
+private:
+ MarbleLegendBrowser * m_parent;
+};
+
}
#endif
diff --git a/src/lib/marble/MarbleWebView.cpp b/src/lib/marble/MarbleWebView.cpp
index 16ec4ea..a4982f0 100644
--- a/src/lib/marble/MarbleWebView.cpp
+++ b/src/lib/marble/MarbleWebView.cpp
@@ -16,7 +16,7 @@
#include <QClipboard>
MarbleWebView::MarbleWebView(QWidget *parent) :
- QWebView(parent),
+ QWebEngineView(parent),
m_contextMenu(new QMenu(this)),
m_copyAction(new QAction(this))
{
@@ -52,7 +52,7 @@ void MarbleWebView::keyPressEvent(QKeyEvent *event)
return;
}
- QWebView::keyPressEvent(event);
+ QWebEngineView::keyPressEvent(event);
}
#include "moc_MarbleWebView.cpp"
diff --git a/src/lib/marble/MarbleWebView.h b/src/lib/marble/MarbleWebView.h
index 8c84b7b..7ae71fc 100644
--- a/src/lib/marble/MarbleWebView.h
+++ b/src/lib/marble/MarbleWebView.h
@@ -11,11 +11,32 @@
#ifndef MARBLEWEBVIEW_H
#define MARBLEWEBVIEW_H
-#include <QWebView>
+#include <QWebEngineView>
+#include <QWebEnginePage>
+#include <QPaintEvent>
#include "marble_export.h"
-class MARBLE_EXPORT MarbleWebView : public QWebView
+class MARBLE_EXPORT MarbleWebPage : public QWebEnginePage
+{
+ Q_OBJECT
+public:
+ explicit MarbleWebPage(QObject *parent = nullptr) : QWebEnginePage(parent){}
+
+Q_SIGNALS:
+ void linkClicked(const QUrl & url);
+protected:
+ bool acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame) override {
+ Q_UNUSED(isMainFrame)
+ if (type == QWebEnginePage::NavigationTypeLinkClicked) {
+ emit linkClicked(url);
+ return false;
+ }
+ return true;
+ }
+};
+
+class MARBLE_EXPORT MarbleWebView : public QWebEngineView
{
Q_OBJECT
public:
diff --git a/src/lib/marble/PopupItem.cpp b/src/lib/marble/PopupItem.cpp
index 2415f88..16b6949 100644
--- a/src/lib/marble/PopupItem.cpp
+++ b/src/lib/marble/PopupItem.cpp
@@ -17,11 +17,13 @@
#ifdef MARBLE_NO_WEBKITWIDGETS
#include "NullMarbleWebView.h"
#else
-#include <QWebView>
-#include <QWebHistory>
+#include <QWebEngineView>
+#include <QWebEngineHistory>
+#include <QWebEngineSettings>
#include "MarbleWebView.h"
#endif
+#include <QDebug>
#include <QPointer>
#include <QPrinter>
#include <QPrintDialog>
@@ -38,17 +40,16 @@ namespace Marble
PopupItem::PopupItem( QObject* parent ) :
QObject( parent ),
BillboardGraphicsItem(),
- m_widget( new QWidget ),
+ m_widget( new QWidget() ),
m_textColor( QColor(Qt::black) ),
m_backColor( QColor(Qt::white) ),
m_needMouseRelease(false)
{
- setCacheMode( ItemCoordinateCache );
+// setCacheMode( ItemCoordinateCache );
setVisible( false );
setSize( QSizeF( 300.0, 320.0 ) );
m_ui.setupUi( m_widget );
-
m_ui.goBackButton->setVisible( false );
connect( m_ui.goBackButton, SIGNAL(clicked()), this, SLOT(goBack()) );
@@ -59,13 +60,15 @@ PopupItem::PopupItem( QObject* parent ) :
connect( m_ui.printButton, SIGNAL(clicked()), this, SLOT(printContent()) );
#endif
+ m_widget->setVisible(true);
+ m_widget->setAttribute(Qt::WA_DontShowOnScreen);
m_widget->setAttribute( Qt::WA_NoSystemBackground, true );
QPalette palette = m_ui.webView->palette();
palette.setBrush(QPalette::Base, Qt::transparent);
- m_ui.webView->setPalette(palette);
#ifndef MARBLE_NO_WEBKITWIDGETS
- m_ui.webView->page()->setPalette(palette);
- m_ui.webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
+ m_ui.webView->setPalette(palette);
+ m_ui.webView->page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
+ m_ui.webView->page()->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
#endif
m_ui.webView->setAttribute(Qt::WA_OpaquePaintEvent, false);
m_ui.webView->setUrl( QUrl( "about:blank" ) );
@@ -73,11 +76,10 @@ PopupItem::PopupItem( QObject* parent ) :
connect( m_ui.hideButton, SIGNAL(clicked()), this, SIGNAL(hide()) );
#ifndef MARBLE_NO_WEBKITWIDGETS
- connect( m_ui.webView, SIGNAL(titleChanged(QString)), m_ui.titleText, SLOT(setText(QString)) );
- connect( m_ui.webView, SIGNAL(urlChanged(QUrl)), this, SLOT(updateBackButton()) );
+ connect( m_ui.webView->page(), SIGNAL(titleChanged(QString)), m_ui.titleText, SLOT(setText(QString)) );
+ connect( m_ui.webView->page(), SIGNAL(urlChanged(QUrl)), this, SLOT(updateBackButton()) );
// Update the popupitem on changes while loading the webpage
- connect( m_ui.webView->page(), SIGNAL(repaintRequested(QRect)), this, SLOT(requestUpdate()) );
- connect(m_ui.webView->page(), SIGNAL(linkClicked(QUrl)), this, SLOT(openUrl(QUrl)));
+ connect(m_ui.webView, SIGNAL(loadFinished(bool)), this, SLOT(requestUpdate()));
#endif
}
@@ -99,13 +101,11 @@ void PopupItem::setPrintButtonVisible( bool display )
void PopupItem::setUrl( const QUrl &url )
{
m_ui.webView->setUrl( url );
- setVisible( true );
QPalette palette = m_ui.webView->palette();
palette.setBrush(QPalette::Base, Qt::transparent);
- m_ui.webView->setPalette(palette);
#ifndef MARBLE_NO_WEBKITWIDGETS
- m_ui.webView->page()->setPalette(palette);
+ m_ui.webView->setPalette(palette);
#endif
m_ui.webView->setAttribute(Qt::WA_OpaquePaintEvent, false);
@@ -181,7 +181,7 @@ void PopupItem::paint( QPainter *painter )
image = pixmap("marble/webpopup/arrow2_topleft");
painter->drawPixmap( 0, size().height() / 2, image );
}
- m_widget->render( painter, QPoint( image.width() - 3, 0 ), QRegion() );
+ m_widget->render( painter, QPoint( image.width() - 3, 0 ) );
} else if ( alignment() & Qt::AlignLeft ) {
popupRect.setRect( -10, -10,
size().width() - ( image.width() - 3 ),
@@ -359,7 +359,7 @@ void PopupItem::printContent() const
QPrinter printer;
QPointer<QPrintDialog> dialog = new QPrintDialog(&printer);
if (dialog->exec() == QPrintDialog::Accepted) {
- m_ui.webView->print(&printer);
+ m_ui.webView->page()->print(&printer, [=](bool){});
}
delete dialog;
#endif
@@ -369,10 +369,11 @@ void PopupItem::printContent() const
void PopupItem::updateBackButton()
{
#ifndef MARBLE_NO_WEBKITWIDGETS
- bool const hasHistory = m_ui.webView->history()->count() > 1;
- bool const previousIsHtml = !m_content.isEmpty() && m_ui.webView->history()->currentItemIndex() == 1;
- bool const atStart = m_ui.webView->history()->currentItemIndex() <= 1;
- bool const currentIsHtml = m_ui.webView->url() == QUrl( "about:blank" );
+ bool const hasHistory = m_ui.webView->page()->history()->count() > 1;
+ bool const previousIsHtml = !m_content.isEmpty() && m_ui.webView->page()->history()->currentItemIndex() == 1;
+ bool const atStart = m_ui.webView->page()->history()->currentItemIndex() <= 1;
+ bool const currentIsHtml = m_ui.webView->page()->url() == QUrl( "about:blank" );
+
m_ui.goBackButton->setVisible( hasHistory && !currentIsHtml && ( previousIsHtml || !atStart ) );
#endif
}
@@ -380,8 +381,8 @@ void PopupItem::updateBackButton()
void PopupItem::goBack()
{
#ifndef MARBLE_NO_WEBKITWIDGETS
- if ( m_ui.webView->history()->currentItemIndex() == 1 && !m_content.isEmpty() ) {
- m_ui.webView->setHtml( m_content, m_baseUrl );
+ if ( m_ui.webView->page()->history()->currentItemIndex() == 1 && !m_content.isEmpty() ) {
+ m_ui.webView->page()->setHtml( m_content, m_baseUrl );
} else {
m_ui.webView->back();
}
diff --git a/src/lib/marble/PopupItem.h b/src/lib/marble/PopupItem.h
index bf2f209..220dd3d 100644
--- a/src/lib/marble/PopupItem.h
+++ b/src/lib/marble/PopupItem.h
@@ -35,7 +35,7 @@ namespace Marble
* This class represents graphics item for information bubble.
* Mostly used by @see MapInfoDialog.
*
- * It has nice API for QWebView and methods for styling it.
+ * It has nice API for QWebEngineView and methods for styling it.
*
*/
class PopupItem : public QObject, public BillboardGraphicsItem
@@ -49,7 +49,7 @@ public:
* @brief Print button visibility indicator
*
* There is a button in the header of item with print icon.
- * It used to print the content of QWebView inside.
+ * It used to print the content of QWebEngineView inside.
* This method indicates visibility of this button.
*
* @see setPrintButtonVisible();
@@ -62,7 +62,7 @@ public:
* @brief Sets visibility of the print button
*
* There is a button in the header of item with print icon.
- * It used to print the content of QWebView inside
+ * It used to print the content of QWebEngineView inside
*
* This method sets visibility of this button.
*
diff --git a/src/lib/marble/TinyWebBrowser.cpp b/src/lib/marble/TinyWebBrowser.cpp
index dbce339..0220f38 100644
--- a/src/lib/marble/TinyWebBrowser.cpp
+++ b/src/lib/marble/TinyWebBrowser.cpp
@@ -26,6 +26,7 @@
#include "MarbleDebug.h"
#include "MarbleDirs.h"
#include "MarbleLocale.h"
+#include "MarbleWebView.h"
namespace Marble
{
@@ -42,20 +43,22 @@ static QString guessWikipediaDomain()
}
TinyWebBrowser::TinyWebBrowser( QWidget* parent )
- : QWebView( parent ),
+ : QWebEngineView( parent ),
d( nullptr )
{
+ MarbleWebPage * page = new MarbleWebPage();
+ setPage(page);
+
connect( this, SIGNAL(statusBarMessage(QString)),
this, SIGNAL(statusMessage(QString)) );
- page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
- connect( this, SIGNAL(linkClicked(QUrl)),
+ connect( page, SIGNAL(linkClicked(QUrl)),
this, SLOT(openExternalLink(QUrl)) );
connect( this, SIGNAL(titleChanged(QString)),
this, SLOT(setWindowTitle(QString)) );
- pageAction( QWebPage::OpenLinkInNewWindow )->setEnabled( false );
- pageAction( QWebPage::OpenLinkInNewWindow )->setVisible( false );
+ pageAction( QWebEnginePage::OpenLinkInNewWindow )->setEnabled( false );
+ pageAction( QWebEnginePage::OpenLinkInNewWindow )->setVisible( false );
}
TinyWebBrowser::~TinyWebBrowser()
@@ -79,19 +82,15 @@ void TinyWebBrowser::print()
QPointer<QPrintDialog> dlg = new QPrintDialog( &printer, this );
if ( dlg->exec() )
- QWebView::print( &printer );
+ page()->print( &printer, [=](bool){} );
delete dlg;
#endif
}
-QWebView *TinyWebBrowser::createWindow( QWebPage::WebWindowType type )
+QWebEngineView *TinyWebBrowser::createWindow( QWebEnginePage::WebWindowType type )
{
+ Q_UNUSED(type)
TinyWebBrowser *view = new TinyWebBrowser( this );
-
- if ( type == QWebPage::WebModalDialog ) {
- view->setWindowModality( Qt::WindowModal );
- }
-
return view;
}
diff --git a/src/lib/marble/TinyWebBrowser.h b/src/lib/marble/TinyWebBrowser.h
index c6103b2..0475b23 100644
--- a/src/lib/marble/TinyWebBrowser.h
+++ b/src/lib/marble/TinyWebBrowser.h
@@ -13,7 +13,7 @@
#define MARBLE_TINYWEBBROWSER_H
// Qt
-#include <QWebView>
+#include <QWebEngineView>
// Marble
#include "marble_export.h"
@@ -27,12 +27,12 @@ namespace Marble
class TinyWebBrowserPrivate;
/**
- * This class provides a tiny web browser based on QWebView (WebKit).
- * It is different from QWebView as it has the button "Open in new Window"
+ * This class provides a tiny web browser based on QWebEngineView (WebKit).
+ * It is different from QWebEngineView as it has the button "Open in new Window"
* disabled per default and instead opens every link in the default web
* browser of the user.
*/
-class MARBLE_EXPORT TinyWebBrowser : public QWebView
+class MARBLE_EXPORT TinyWebBrowser : public QWebEngineView
{
Q_OBJECT
@@ -48,7 +48,7 @@ class MARBLE_EXPORT TinyWebBrowser : public QWebView
void statusMessage( const QString& );
protected:
- QWebView *createWindow( QWebPage::WebWindowType type ) override;
+ QWebEngineView *createWindow( QWebEnginePage::WebWindowType type ) override;
private Q_SLOTS:
void openExternalLink( const QUrl& );
diff --git a/src/lib/marble/WebPopupWidget.ui b/src/lib/marble/WebPopupWidget.ui
index 8cf7103..e129b73 100644
--- a/src/lib/marble/WebPopupWidget.ui
+++ b/src/lib/marble/WebPopupWidget.ui
@@ -18,9 +18,6 @@
</property>
</widget>
</item>
- <item row="1" column="0" colspan="4">
- <widget class="MarbleWebView" name="webView" native="true"/>
- </item>
<item row="0" column="0">
<widget class="QToolButton" name="goBackButton">
<property name="text">
@@ -58,11 +55,20 @@
<iconset resource="libmarble.qrc">
<normaloff>:/marble/webpopup/icon-remove.png</normaloff>:/marble/webpopup/icon-remove.png</iconset>
</property>
+ <property name="popupMode">
+ <enum>QToolButton::DelayedPopup</enum>
+ </property>
<property name="autoRaise">
<bool>true</bool>
</property>
- </widget>
+ <property name="arrowType">
+ <enum>Qt::NoArrow</enum>
+ </property>
+ </widget>
</item>
+ <item row="1" column="0" colspan="4">
+ <widget class="MarbleWebView" name="webView" native="true"/>
+ </item>
</layout>
</widget>
<customwidgets>
diff --git a/src/lib/marble/cloudsync/RouteItemDelegate.cpp b/src/lib/marble/cloudsync/RouteItemDelegate.cpp
index 98ad8bb..586ba22 100644
--- a/src/lib/marble/cloudsync/RouteItemDelegate.cpp
+++ b/src/lib/marble/cloudsync/RouteItemDelegate.cpp
@@ -5,7 +5,7 @@
#ifdef MARBLE_NO_WEBKITWIDGETS
#include <QWidget>
#else
-#include <QWebView>
+#include <QWebEngineView>
#endif
#include <QApplication>
diff --git a/src/lib/marble/geodata/handlers/dgml/DgmlIconTagHandler.cpp b/src/lib/marble/geodata/handlers/dgml/DgmlIconTagHandler.cpp
index d0c49ec..e26bf72 100644
--- a/src/lib/marble/geodata/handlers/dgml/DgmlIconTagHandler.cpp
+++ b/src/lib/marble/geodata/handlers/dgml/DgmlIconTagHandler.cpp
@@ -47,9 +47,7 @@ GeoNode* DgmlIconTagHandler::parse(GeoParser& parser) const
QString pixmapRelativePath = parser.attribute(dgmlAttr_pixmap).trimmed();
QColor color;
- if (pixmapRelativePath.isEmpty()) {
- color.setNamedColor(parser.attribute(dgmlAttr_color).trimmed());
- }
+ color.setNamedColor(parser.attribute(dgmlAttr_color).trimmed());
GeoSceneIcon *icon = nullptr;
--
cgit v0.11.2

View File

@ -1,3 +1,13 @@
-------------------------------------------------------------------
Sun Oct 21 09:10:15 UTC 2018 - wbauer@tmo.at
- Add Port-to-QtWebEngine.patch and build with QtWebEngine instead
of QtWebKit where possible
- Drop QtWebKit BuildRequires, no longer supported
- Add Fix-MarbleConfig.cmake-to-find-QtWebEngine.patch to fix
building against marble when QtWebEngine is used
- Add necessary requirements to the devel package
-------------------------------------------------------------------
Thu Oct 11 20:07:16 UTC 2018 - lbeltrame@kde.org

View File

@ -32,6 +32,10 @@ License: LGPL-2.1+
Group: Amusements/Teaching/Other
Url: http://edu.kde.org
Source0: marble-%{version}.tar.xz
# PATCH-FEATURE-UPSTREAM
Patch0: Port-to-QtWebEngine.patch
# PATCH-FIX-UPSTREAM
Patch1: Fix-MarbleConfig.cmake-to-find-QtWebEngine.patch
BuildRequires: extra-cmake-modules
BuildRequires: fdupes
BuildRequires: gpsd-devel
@ -54,22 +58,25 @@ BuildRequires: perl
BuildRequires: phonon4qt5-devel
BuildRequires: pkgconfig
BuildRequires: plasma-framework-devel
BuildRequires: pkgconfig(Qt5Concurrent) >= 5.2.0
BuildRequires: pkgconfig(Qt5Core) >= 5.2.0
BuildRequires: pkgconfig(Qt5DBus) >= 5.2.0
BuildRequires: pkgconfig(Qt5Designer) >= 5.2.0
BuildRequires: pkgconfig(Qt5Network) >= 5.2.0
BuildRequires: pkgconfig(Qt5OpenGL) >= 5.2.0
BuildRequires: pkgconfig(Qt5PrintSupport) >= 5.2.0
BuildRequires: pkgconfig(Qt5Quick) >= 5.2.0
BuildRequires: pkgconfig(Qt5Script) >= 5.2.0
BuildRequires: pkgconfig(Qt5SerialPort) >= 5.2.0
BuildRequires: pkgconfig(Qt5Sql) >= 5.2.0
BuildRequires: pkgconfig(Qt5Svg) >= 5.2.0
BuildRequires: pkgconfig(Qt5Test) >= 5.2.0
BuildRequires: pkgconfig(Qt5WebKitWidgets) >= 5.2.0
BuildRequires: pkgconfig(Qt5Widgets) >= 5.2.0
BuildRequires: pkgconfig(Qt5Xml) >= 5.2.0
BuildRequires: pkgconfig(Qt5Concurrent)
BuildRequires: pkgconfig(Qt5Core)
BuildRequires: pkgconfig(Qt5DBus)
BuildRequires: pkgconfig(Qt5Designer)
BuildRequires: pkgconfig(Qt5Network)
BuildRequires: pkgconfig(Qt5OpenGL)
BuildRequires: pkgconfig(Qt5PrintSupport)
BuildRequires: pkgconfig(Qt5Quick)
BuildRequires: pkgconfig(Qt5Script)
BuildRequires: pkgconfig(Qt5SerialPort)
BuildRequires: pkgconfig(Qt5Sql)
BuildRequires: pkgconfig(Qt5Svg)
BuildRequires: pkgconfig(Qt5Test)
%ifarch %{ix86} x86_64 %{arm} aarch64 mips mips64
# Only include WebEngine on platforms where it is available
BuildRequires: pkgconfig(Qt5WebEngineWidgets)
%endif
BuildRequires: pkgconfig(Qt5Widgets)
BuildRequires: pkgconfig(Qt5Xml)
Requires: %{name}-data = %{version}
Requires: libastro%{_so_astro} = %{version}
Requires: libmarblewidget-qt5%{_so} = %{version}
@ -122,6 +129,11 @@ Summary: Generic map viewer: Build Environment
Group: Development/Libraries/KDE
Requires: libastro%{_so_astro} = %{version}
Requires: libmarblewidget-qt5%{_so} = %{version}
%ifarch %{ix86} x86_64 %{arm} aarch64 mips mips64
Requires: pkgconfig(Qt5WebEngineWidgets)
%endif
Requires: pkgconfig(Qt5Widgets)
Requires: pkgconfig(Qt5Xml)
Obsoletes: marble5-devel < %{version}
Provides: marble5-devel = %{version}
@ -162,6 +174,7 @@ The astronomy library for the satellites plugin.
%prep
%setup -q -n marble-%{version}
%autopatch -p1
%build
export SUSE_ASNEEDED=0