From 14bdd49c5f21ff642d60b119c082c2d48a561b30 Mon Sep 17 00:00:00 2001 From: Pierre Parent 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 #include #include +#include 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 #include #include #include #include +#include +#include +#include + +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("WebBrowser", 1, 0, "SearchProxyModel"); qmlRegisterType("WebBrowser", 1, 0, "TouchTracker"); qmlRegisterSingletonType("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