Skip to content

Commit

Permalink
Merge pull request #169 from llewelld/sailfishos-esr91
Browse files Browse the repository at this point in the history
Changes needed for ESR 91
  • Loading branch information
rainemak authored Sep 29, 2024
2 parents ac4bc71 + 994a2f0 commit d4f2203
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 9 deletions.
62 changes: 56 additions & 6 deletions lib/webenginesettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

#include "webengine.h"
#include "webenginesettings.h"
#include "webenginesettings_p.h"

#include <silicatheme.h>

Expand All @@ -28,6 +29,7 @@
#include "logging.h"

Q_GLOBAL_STATIC(SailfishOS::WebEngineSettings, webEngineSettingsInstance)
Q_GLOBAL_STATIC(SailfishOS::WebEngineSettingsPrivate, webEngineSettingsPrivateInstance)

#define SAILFISH_WEBENGINE_DEFAULT_PIXEL_RATIO 1.5

Expand Down Expand Up @@ -67,6 +69,21 @@ int getPressAndHoldDelay()

const int PressAndHoldDelay(getPressAndHoldDelay());

SailfishOS::WebEngineSettingsPrivate *SailfishOS::WebEngineSettingsPrivate::instance()
{
return webEngineSettingsPrivateInstance();
}

SailfishOS::WebEngineSettingsPrivate::WebEngineSettingsPrivate(QObject *parent)
: QObject(parent)
{
}

SailfishOS::WebEngineSettingsPrivate::~WebEngineSettingsPrivate()
{
}


/*!
\brief Initialises the WebEngineSettings class.
Expand Down Expand Up @@ -110,17 +127,32 @@ void SailfishOS::WebEngineSettings::initialize()
engineSettings->setPreference(QStringLiteral("intl.accept_languages"),
QVariant::fromValue<QString>(langs));

// Ensure the renderer is configured correctly
engineSettings->setPreference(QStringLiteral("gfx.webrender.force-disabled"),
QVariant(true));
engineSettings->setPreference(QStringLiteral("embedlite.compositor.external_gl_context"),
QVariant(false));

Silica::Theme *silicaTheme = Silica::Theme::instance();

// Notify gecko when the ambience switches between light and dark
if (engineSettings->isInitialized()) {
engineSettings->notifyColorSchemeChanged();
engineSettings->d->notifyColorSchemeChanged();
} else {
connect(engineSettings, &QMozEngineSettings::initialized,
engineSettings, &SailfishOS::WebEngineSettings::notifyColorSchemeChanged);
engineSettings->d, &SailfishOS::WebEngineSettingsPrivate::notifyColorSchemeChanged);
}
connect(silicaTheme, &Silica::Theme::colorSchemeChanged,
engineSettings, &SailfishOS::WebEngineSettings::notifyColorSchemeChanged);
engineSettings->d, &SailfishOS::WebEngineSettingsPrivate::notifyColorSchemeChanged);

// Subscribe to gecko messages
// When the embedliteviewcreated notification is received the ambience notification will be sent again
SailfishOS::WebEngine *webEngine = SailfishOS::WebEngine::instance();
connect(webEngine, &SailfishOS::WebEngine::recvObserve,
engineSettings->d, &SailfishOS::WebEngineSettingsPrivate::oneShotNotifyColorSchemeChanged);
webEngine->addObserver(QStringLiteral("embedliteviewcreated"));

isInitialized = true;

// Guard preferences that should be written only once. If a preference needs to be
// forcefully written upon each start that should happen before this.
Expand Down Expand Up @@ -199,8 +231,6 @@ void SailfishOS::WebEngineSettings::initialize()
engineSettings->setPreference(QStringLiteral("general.useragent.updates.enabled"),
QVariant::fromValue<bool>(true));

isInitialized = true;

markerFile.open(QIODevice::ReadWrite | QIODevice::Truncate);
markerFile.close();
}
Expand All @@ -209,7 +239,7 @@ void SailfishOS::WebEngineSettings::initialize()
\internal
\brief Notifies gecko about ambience color scheme changes.
*/
void SailfishOS::WebEngineSettings::notifyColorSchemeChanged()
void SailfishOS::WebEngineSettingsPrivate::notifyColorSchemeChanged()
{
Silica::Theme *silicaTheme = Silica::Theme::instance();
QString scheme = silicaTheme->colorScheme() == Silica::Theme::LightOnDark
Expand All @@ -218,6 +248,25 @@ void SailfishOS::WebEngineSettings::notifyColorSchemeChanged()
SailfishOS::WebEngine::instance()->notifyObservers(QStringLiteral("ambience-theme-changed"), scheme);
}

/*!
\internal
\brief Notifies gecko about ambience color scheme change and removes observer.
*/
void SailfishOS::WebEngineSettingsPrivate::oneShotNotifyColorSchemeChanged(const QString &message, const QVariant &data)
{
Q_UNUSED(data);
if (message == QLatin1String("embedliteviewcreated")) {
SailfishOS::WebEngine *webEngine = SailfishOS::WebEngine::instance();
// Remove the observer and disconnect the signal
webEngine->removeObserver(QStringLiteral("embedliteviewcreated"));
disconnect(webEngine, &SailfishOS::WebEngine::recvObserve,
this, &SailfishOS::WebEngineSettingsPrivate::oneShotNotifyColorSchemeChanged);

// Notify about the ambience state
notifyColorSchemeChanged();
}
}

/*!
\brief Returns the instance of the singleton WebEngineSettings class.
Expand All @@ -241,6 +290,7 @@ SailfishOS::WebEngineSettings *SailfishOS::WebEngineSettings::instance()
*/
SailfishOS::WebEngineSettings::WebEngineSettings(QObject *parent)
: QMozEngineSettings(parent)
, d(WebEngineSettingsPrivate::instance())
{
}

Expand Down
6 changes: 4 additions & 2 deletions lib/webenginesettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

namespace SailfishOS {

class WebEngineSettingsPrivate;

class WebEngineSettings : public QMozEngineSettings
{
Q_OBJECT
Expand All @@ -31,8 +33,8 @@ class WebEngineSettings : public QMozEngineSettings
explicit WebEngineSettings(QObject *parent = 0);
virtual ~WebEngineSettings();

private slots:
void notifyColorSchemeChanged();
private:
WebEngineSettingsPrivate *d;
};

}
Expand Down
36 changes: 36 additions & 0 deletions lib/webenginesettings_p.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef SAILFISHOS_WEBENGINE_SETTINGS_P_H
#define SAILFISHOS_WEBENGINE_SETTINGS_P_H

#include <QObject>
#include <QString>
#include <webenginesettings.h>

#ifndef Q_QDOC

namespace SailfishOS {

class WebEngineSettingsPrivate : public QObject
{
Q_OBJECT

public:
static WebEngineSettingsPrivate * instance();

explicit WebEngineSettingsPrivate(QObject *parent = 0);
~WebEngineSettingsPrivate();

public slots:
void notifyColorSchemeChanged();
void oneShotNotifyColorSchemeChanged(const QString &message, const QVariant &data);

friend class WebEngineSettings;
};

}

#endif // !Q_QDOC
#endif // SAILFISHOS_WEBENGINE_SETTINGS_P_H
2 changes: 1 addition & 1 deletion rpm/sailfish-components-webview.spec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Name: sailfish-components-webview-qt5
Summary: Allows embedding Sailfish WebView into applications
Version: 1.4.2
Version: 1.5.21
Release: 1
License: MPLv2.0
Url: https://github.com/sailfishos/sailfish-components-webview
Expand Down

0 comments on commit d4f2203

Please sign in to comment.