pmaports/main/qtwebbrowser/0001-Patch-for-usability-on-postmarketOS.patch
2018-11-27 07:47:17 +01:00

479 lines
14 KiB
Diff

From 14bdd49c5f21ff642d60b119c082c2d48a561b30 Mon Sep 17 00:00:00 2001
From: Pierre Parent <pierre.parent@pparent.fr>
Date: Sun, 23 Sep 2018 18:29:53 +0200
Subject: [PATCH 1/1] Patch for usability on postmarketOS
---
src/appengine.cpp | 37 +++++++++++++++++++++++++
src/appengine.h | 2 ++
src/main.cpp | 41 +++++++++++++++-------------
src/qml/BrowserWindow.qml | 15 +++++++++--
src/qml/NavigationBar.qml | 69 ++++++++++++++++++++++-------------------------
src/qml/PageView.qml | 42 +++++++++++++----------------
6 files changed, 125 insertions(+), 81 deletions(-)
diff --git a/src/appengine.cpp b/src/appengine.cpp
index f48325d..b32078a 100644
--- a/src/appengine.cpp
+++ b/src/appengine.cpp
@@ -33,6 +33,7 @@
#include <QtCore/QStandardPaths>
#include <QStringBuilder>
#include <QCoreApplication>
+#include <QTextStream>
AppEngine::AppEngine(QObject *parent)
: QObject(parent)
@@ -105,3 +106,39 @@ void AppEngine::saveSetting(const QString &name, const QString &value)
m_settings.setValue(name, value);
}
+
+bool AppEngine::writeFile(const QString& source, const QString& data)
+ {
+ if (source.isEmpty())
+ return false;
+
+ QFile file(source);
+ if (!file.open(QFile::WriteOnly | QFile::Truncate))
+ return false;
+
+ QTextStream out(&file);
+ out << data;
+ file.close();
+
+ return true;
+ }
+
+QString AppEngine::readFile(const QString& source)
+ {
+ if (source.isEmpty())
+ return "";
+
+ QFile file(source);
+ if(!file.open(QIODevice::ReadOnly)) {
+ return "";
+ }
+
+ QTextStream in(&file);
+
+ if (!in.atEnd()) {
+ QString line = in.readLine();
+ return line;
+ }
+ else
+ return "";
+ }
diff --git a/src/appengine.h b/src/appengine.h
index c5ad20e..c7a374e 100644
--- a/src/appengine.h
+++ b/src/appengine.h
@@ -83,6 +83,8 @@ public:
Q_INVOKABLE QString fallbackColor();
Q_INVOKABLE QString restoreSetting(const QString &name, const QString &defaultValue = QString());
Q_INVOKABLE void saveSetting(const QString &name, const QString &value);
+ Q_INVOKABLE bool writeFile(const QString& source, const QString& data);
+ Q_INVOKABLE QString readFile(const QString& source);
private:
QSettings m_settings;
diff --git a/src/main.cpp b/src/main.cpp
index 2181f15..e462b9b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -31,15 +31,17 @@
#include "navigationhistoryproxymodel.h"
#include "touchtracker.h"
-#if defined(DESKTOP_BUILD)
-#include "touchmockingapplication.h"
-#endif
-
#include <QGuiApplication>
#include <QQmlContext>
#include <QQmlEngine>
#include <QQuickView>
#include <QtWebEngine/qtwebengineglobal.h>
+#include <QtWebEngine>
+#include <csignal>
+#include <iostream>
+
+using namespace std;
+
static QObject *engine_factory(QQmlEngine *engine, QJSEngine *scriptEngine)
{
@@ -50,7 +52,15 @@ static QObject *engine_factory(QQmlEngine *engine, QJSEngine *scriptEngine)
}
int main(int argc, char **argv)
-{
+{
+ //Handle the signals
+ signal(SIGINT, SIG_IGN);
+ signal(SIGSEGV, SIG_IGN);
+ signal(SIGABRT, SIG_IGN);
+ signal(SIGIOT, SIG_IGN);
+ signal(SIGILL, SIG_IGN);
+ signal(SIGBUS, SIG_IGN);
+
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
//do not use any plugins installed on the device
@@ -71,24 +81,23 @@ int main(int argc, char **argv)
int qAppArgCount = qargv.size();
-#if defined(DESKTOP_BUILD)
- TouchMockingApplication app(qAppArgCount, qargv.data());
-#else
+
QGuiApplication app(qAppArgCount, qargv.data());
-#endif
+
+ QtWebEngine::initialize();
+
qmlRegisterType<NavigationHistoryProxyModel>("WebBrowser", 1, 0, "SearchProxyModel");
qmlRegisterType<TouchTracker>("WebBrowser", 1, 0, "TouchTracker");
qmlRegisterSingletonType<AppEngine>("WebBrowser", 1, 0, "AppEngine", engine_factory);
- QtWebEngine::initialize();
-
+
app.setOrganizationName("The Qt Company");
app.setOrganizationDomain("qt.io");
app.setApplicationName("qtwebbrowser");
QQuickView view;
- view.setTitle("Yet Another Browser");
+ view.setTitle("Qt WebBrowser");
view.setFlags(Qt::Window | Qt::WindowTitleHint);
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setColor(Qt::black);
@@ -96,13 +105,7 @@ int main(int argc, char **argv)
QObject::connect(view.engine(), SIGNAL(quit()), &app, SLOT(quit()));
-#if defined(DESKTOP_BUILD)
- view.show();
- if (view.size().isEmpty())
- view.setGeometry(0, 0, 800, 600);
-#else
- view.showFullScreen();
-#endif
+ view.showMaximized();
app.exec();
}
diff --git a/src/qml/BrowserWindow.qml b/src/qml/BrowserWindow.qml
index 05ddcff..d1d0c73 100644
--- a/src/qml/BrowserWindow.qml
+++ b/src/qml/BrowserWindow.qml
@@ -189,7 +189,7 @@ Item {
return false
return true
}
-
+
anchors {
top: navigation.bottom
left: parent.left
@@ -205,9 +205,20 @@ Item {
return
navigation.webView = tab.webView
- var url = AppEngine.initialUrl
+ var url = AppEngine.readFile("/tmp/qt-WebBrowser-last-url.txt")
+
+ tabView.page_view_url=url;
navigation.load();
+
+ if ( url == "" )
+ {
+ homeScreen.messageBox.state = "disabled"
+ homeScreen.state = "enabled"
+ homeScreen.forceActiveFocus()
+ }
+
+
}
onCurrentIndexChanged: {
if (!tabView.get(tabView.currentIndex))
diff --git a/src/qml/NavigationBar.qml b/src/qml/NavigationBar.qml
index 742ca47..0ee6388 100644
--- a/src/qml/NavigationBar.qml
+++ b/src/qml/NavigationBar.qml
@@ -40,6 +40,7 @@ ToolBar {
property alias addressBar: urlBar
property Item webView: null
+ property bool moreButtons: false
onWebViewChanged: {
@@ -159,10 +160,7 @@ ToolBar {
}
Rectangle {
width: 1
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiSeparatorColor
}
UIButton {
@@ -175,19 +173,13 @@ ToolBar {
}
Rectangle {
width: 1
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiSeparatorColor
}
Rectangle {
Layout.fillWidth: true
implicitWidth: 10
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiColor
}
TextField {
@@ -286,10 +278,7 @@ ToolBar {
visible: !cancelButton.visible
Layout.fillWidth: true
implicitWidth: 10
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiColor
}
@@ -313,18 +302,18 @@ ToolBar {
}
Rectangle {
width: 1
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiSeparatorColor
}
- UIButton {
+
+ UIButton {
id: homeButton
source: "icons/Btn_Home.png"
+ visible:moreButtons
color: uiColor
highlightColor: buttonPressedColor
onClicked: {
+ moreButtons = false
if (homeScreen.state == "disabled" || homeScreen.state == "edit") {
homeScreen.messageBox.state = "disabled"
homeScreen.state = "enabled"
@@ -336,18 +325,17 @@ ToolBar {
}
Rectangle {
width: 1
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiSeparatorColor
}
UIButton {
id: pageViewButton
+ visible:moreButtons
source: "icons/Btn_Tabs.png"
color: uiColor
highlightColor: buttonPressedColor
- onClicked: {
+ onClicked: {
+ moreButtons = false
if (tabView.viewState == "list") {
tabView.viewState = "page"
} else {
@@ -371,23 +359,22 @@ ToolBar {
}
Rectangle {
width: 1
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiSeparatorColor
}
UIButton {
id: bookmarksButton
color: uiColor
highlightColor: buttonPressedColor
- enabled: urlBar.text != "" && !settingsView.privateBrowsingEnabled
+ enabled: true
+ visible:moreButtons
property bool bookmarked: false
source: bookmarked ? "icons/Btn_Bookmark_Checked.png" : "icons/Btn_Bookmarks.png"
onClicked: {
- if (!webView)
- return
+ moreButtons = false
var icon = webView.loading ? "" : webView.icon
+ icon=icon.toString().replace("image://favicon/", "");
+ bookmarked = true
var idx = homeScreen.contains(webView.url.toString())
if (idx !== -1) {
homeScreen.remove("", idx)
@@ -400,21 +387,29 @@ ToolBar {
}
Component.onCompleted: refresh()
}
+
Rectangle {
width: 1
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiSeparatorColor
}
+
UIButton {
id: settingsButton
source: "icons/Btn_Settings.png"
color: uiColor
highlightColor: buttonPressedColor
onClicked: {
+ if ( ! moreButtons )
+ {
+ moreButtons = true
+ return
+ }
+ else
+ {
settingsView.state = "enabled"
+ moreButtons = false
+ }
}
}
}
diff --git a/src/qml/PageView.qml b/src/qml/PageView.qml
index f7e0448..d31bc69 100644
--- a/src/qml/PageView.qml
+++ b/src/qml/PageView.qml
@@ -49,6 +49,7 @@ Rectangle {
property alias count: pathView.count
property string viewState: "page"
+ property string page_view_url: ""
onViewStateChanged: {
if (viewState == "page" || viewState == "fullscreen")
@@ -107,13 +108,19 @@ Rectangle {
WebEngineView {
id: webEngineView
-
+ url: parent.parent.page_view_url
+
+ profile: WebEngineProfile{
+ httpUserAgent: "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Safari/537.361"
+ persistentCookiesPolicy : WebEngineProfile.ForcePersistentCookies
+ persistentStoragePath : "~/.qtwebbrowser/"
+ }
+
anchors {
fill: parent
top: permBar.bottom
}
- profile: settingsView.privateBrowsingEnabled ? otrProfile : defaultProfile
enabled: root.interactive
function takeSnapshot() {
@@ -134,7 +141,11 @@ Rectangle {
}
// Trigger a refresh to check if the new url is bookmarked.
- onUrlChanged: navigation.refresh()
+ onUrlChanged:
+ {
+ AppEngine.writeFile("/tmp/qt-WebBrowser-last-url.txt",webEngineView.url)
+ navigation.refresh()
+ }
settings.autoLoadImages: settingsView.autoLoadImages
@@ -295,10 +306,7 @@ Rectangle {
anchors.fill: parent
Rectangle {
width: 5
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiColor
}
TextField {
@@ -324,18 +332,12 @@ Rectangle {
}
Rectangle {
width: 5
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiColor
}
Rectangle {
width: 1
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiSeparatorColor
}
UIButton {
@@ -346,10 +348,7 @@ Rectangle {
}
Rectangle {
width: 1
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiSeparatorColor
}
UIButton {
@@ -360,10 +359,7 @@ Rectangle {
}
Rectangle {
width: 1
- anchors {
- top: parent.top
- bottom: parent.bottom
- }
+ height: parent.height
color: uiSeparatorColor
}
UIButton {
--
2.11.0