479 lines
14 KiB
Diff
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
|
|
|