From 955a8d8a05d494f74238565d1a60fa6bd29c4f2b Mon Sep 17 00:00:00 2001 From: Pierre Rossi Date: Thu, 15 May 2014 16:51:50 +0200 Subject: Widgets settings implementation Implementing what is already available, namely the WebAttributes, font preferences and default text encoding, as well as a slightly different take on privateBrowsing. Change-Id: I128f060a4661d19aa1c9c4d6daae1f80fb33204b Reviewed-by: Allan Sandfeld Jensen --- src/webenginewidgets/api/qwebenginesettings.cpp | 217 ++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 src/webenginewidgets/api/qwebenginesettings.cpp (limited to 'src/webenginewidgets/api/qwebenginesettings.cpp') diff --git a/src/webenginewidgets/api/qwebenginesettings.cpp b/src/webenginewidgets/api/qwebenginesettings.cpp new file mode 100644 index 000000000..52cc59a80 --- /dev/null +++ b/src/webenginewidgets/api/qwebenginesettings.cpp @@ -0,0 +1,217 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwebenginesettings.h" +#include "qwebenginesettings_p.h" + +#include + +QT_USE_NAMESPACE + +static WebEngineSettings::Attribute toWebEngineAttribute(QWebEngineSettings::WebAttribute attribute) { + switch (attribute) { + case QWebEngineSettings::AutoLoadImages: + return WebEngineSettings::AutoLoadImages; + case QWebEngineSettings::JavascriptEnabled: + return WebEngineSettings::JavascriptEnabled; + case QWebEngineSettings::JavascriptCanOpenWindows: + return WebEngineSettings::JavascriptCanOpenWindows; + case QWebEngineSettings::JavascriptCanAccessClipboard: + return WebEngineSettings::JavascriptCanAccessClipboard; + case QWebEngineSettings::LinksIncludedInFocusChain: + return WebEngineSettings::LinksIncludedInFocusChain; + case QWebEngineSettings::LocalStorageEnabled: + return WebEngineSettings::LocalStorageEnabled; + case QWebEngineSettings::LocalContentCanAccessRemoteUrls: + return WebEngineSettings::LocalContentCanAccessRemoteUrls; + case QWebEngineSettings::XSSAuditingEnabled: + return WebEngineSettings::XSSAuditingEnabled; + case QWebEngineSettings::SpatialNavigationEnabled: + return WebEngineSettings::SpatialNavigationEnabled; + case QWebEngineSettings::LocalContentCanAccessFileUrls: + return WebEngineSettings::LocalContentCanAccessFileUrls; + case QWebEngineSettings::HyperlinkAuditingEnabled: + return WebEngineSettings::HyperlinkAuditingEnabled; + case QWebEngineSettings::ScrollAnimatorEnabled: + return WebEngineSettings::ScrollAnimatorEnabled; + default: + return WebEngineSettings::UnsupportedInCoreSettings; + } +} + +Q_GLOBAL_STATIC(QList, allSettings); + +QWebEngineSettingsPrivate::QWebEngineSettingsPrivate() + : coreSettings(new WebEngineSettings(this)) +{ +} + +QWebEngineSettingsPrivate::QWebEngineSettingsPrivate(WebContentsAdapter *adapter) + : coreSettings(new WebEngineSettings(this, adapter)) +{ +} + +void QWebEngineSettingsPrivate::apply() +{ + coreSettings->scheduleApply(); + QWebEngineSettingsPrivate *globals = QWebEngineSettings::globalSettings()->d; + if (this == globals) { + Q_FOREACH (QWebEngineSettingsPrivate *settings, *allSettings) + settings->coreSettings->scheduleApply(); + } +} + +void QWebEngineSettingsPrivate::initDefaults() +{ + coreSettings->initDefaults(); +} + +WebEngineSettings *QWebEngineSettingsPrivate::fallbackSettings() const { + return QWebEngineSettings::globalSettings()->d->coreSettings.data(); +} + +QWebEngineSettings *QWebEngineSettings::globalSettings() +{ + static QWebEngineSettings* globalSettings = 0; + if (!globalSettings) + globalSettings = new QWebEngineSettings; + return globalSettings; +} + +Q_STATIC_ASSERT_X(static_cast(WebEngineSettings::StandardFont) == static_cast(QWebEngineSettings::StandardFont), "The enum values must match"); +Q_STATIC_ASSERT_X(static_cast(WebEngineSettings::FixedFont) == static_cast(QWebEngineSettings::FixedFont), "The enum values must match"); +Q_STATIC_ASSERT_X(static_cast(WebEngineSettings::SerifFont) == static_cast(QWebEngineSettings::SerifFont), "The enum values must match"); +Q_STATIC_ASSERT_X(static_cast(WebEngineSettings::SansSerifFont) == static_cast(QWebEngineSettings::SansSerifFont), "The enum values must match"); +Q_STATIC_ASSERT_X(static_cast(WebEngineSettings::CursiveFont) == static_cast(QWebEngineSettings::CursiveFont), "The enum values must match"); +Q_STATIC_ASSERT_X(static_cast(WebEngineSettings::FantasyFont) == static_cast(QWebEngineSettings::FantasyFont), "The enum values must match"); + +void QWebEngineSettings::setFontFamily(QWebEngineSettings::FontFamily which, const QString &family) +{ + d->coreSettings->setFontFamily(static_cast(which), family); +} + +QString QWebEngineSettings::fontFamily(QWebEngineSettings::FontFamily which) const +{ + return d->coreSettings->fontFamily(static_cast(which)); +} + +void QWebEngineSettings::resetFontFamily(QWebEngineSettings::FontFamily which) +{ + d->coreSettings->resetFontFamily(static_cast(which)); +} + +Q_STATIC_ASSERT_X(static_cast(WebEngineSettings::DefaultFixedFontSize) == static_cast(QWebEngineSettings::DefaultFixedFontSize), "The enum values must match"); +Q_STATIC_ASSERT_X(static_cast(WebEngineSettings::DefaultFontSize) == static_cast(QWebEngineSettings::DefaultFontSize), "The enum values must match"); +Q_STATIC_ASSERT_X(static_cast(WebEngineSettings::MinimumFontSize) == static_cast(QWebEngineSettings::MinimumFontSize), "The enum values must match"); +Q_STATIC_ASSERT_X(static_cast(WebEngineSettings::MinimumLogicalFontSize) == static_cast(QWebEngineSettings::MinimumLogicalFontSize), "The enum values must match"); + +void QWebEngineSettings::setFontSize(QWebEngineSettings::FontSize type, int size) +{ + d->coreSettings->setFontSize(static_cast(type), size); +} + +int QWebEngineSettings::fontSize(QWebEngineSettings::FontSize type) const +{ + return d->coreSettings->fontSize(static_cast(type)); +} + +void QWebEngineSettings::resetFontSize(QWebEngineSettings::FontSize type) +{ + d->coreSettings->resetFontSize(static_cast(type)); +} + + +QWebEngineSettings::QWebEngineSettings() + : d(new QWebEngineSettingsPrivate) +{ + d->initDefaults(); +} + + +QWebEngineSettings::QWebEngineSettings(QWebEngineSettingsPrivate *p) + : d(p) +{ + Q_ASSERT(d); + allSettings->append(d); + d->coreSettings->scheduleApply(); +} + + +QWebEngineSettings::~QWebEngineSettings() +{ + allSettings->removeAll(d); + delete d; +} + +void QWebEngineSettings::setDefaultTextEncoding(const QString &encoding) +{ + d->coreSettings->setDefaultTextEncoding(encoding); +} + +QString QWebEngineSettings::defaultTextEncoding() const +{ + return d->coreSettings->defaultTextEncoding(); +} + +void QWebEngineSettings::setAttribute(QWebEngineSettings::WebAttribute attr, bool on) +{ + WebEngineSettings::Attribute webEngineAttribute = toWebEngineAttribute(attr); + if (webEngineAttribute != WebEngineSettings::UnsupportedInCoreSettings) + return d->coreSettings->setAttribute(webEngineAttribute, on); + qDebug() << Q_FUNC_INFO << "Missing support for:" << attr; +} + +bool QWebEngineSettings::testAttribute(QWebEngineSettings::WebAttribute attr) const +{ + WebEngineSettings::Attribute webEngineAttribute = toWebEngineAttribute(attr); + if (webEngineAttribute != WebEngineSettings::UnsupportedInCoreSettings) + return d->coreSettings->testAttribute(webEngineAttribute); + + + + qDebug() << Q_FUNC_INFO << "Missing support for:" << attr; + return false; +} + +void QWebEngineSettings::resetAttribute(QWebEngineSettings::WebAttribute attr) +{ + setAttribute(attr, globalSettings()->testAttribute(attr)); +} -- cgit v1.2.3