diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index 3a5e138d3..6492e6828 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -32,6 +32,7 @@ from PyQt5.QtWebEngineWidgets import (QWebEngineSettings, QWebEngineProfile, from qutebrowser.browser.webengine import spell from qutebrowser.config import config, websettings +from qutebrowser.config.websettings import AttributeInfo as Attr from qutebrowser.utils import utils, standarddir, qtutils, message, log # The default QWebEngineProfile @@ -88,35 +89,35 @@ class WebEngineSettings(websettings.AbstractSettings): _ATTRIBUTES = { 'content.xss_auditing': - [QWebEngineSettings.XSSAuditingEnabled], + Attr(QWebEngineSettings.XSSAuditingEnabled), 'content.images': - [QWebEngineSettings.AutoLoadImages], + Attr(QWebEngineSettings.AutoLoadImages), 'content.javascript.enabled': - [QWebEngineSettings.JavascriptEnabled], + Attr(QWebEngineSettings.JavascriptEnabled), 'content.javascript.can_open_tabs_automatically': - [QWebEngineSettings.JavascriptCanOpenWindows], + Attr(QWebEngineSettings.JavascriptCanOpenWindows), 'content.javascript.can_access_clipboard': - [QWebEngineSettings.JavascriptCanAccessClipboard], + Attr(QWebEngineSettings.JavascriptCanAccessClipboard), 'content.plugins': - [QWebEngineSettings.PluginsEnabled], + Attr(QWebEngineSettings.PluginsEnabled), 'content.hyperlink_auditing': - [QWebEngineSettings.HyperlinkAuditingEnabled], + Attr(QWebEngineSettings.HyperlinkAuditingEnabled), 'content.local_content_can_access_remote_urls': - [QWebEngineSettings.LocalContentCanAccessRemoteUrls], + Attr(QWebEngineSettings.LocalContentCanAccessRemoteUrls), 'content.local_content_can_access_file_urls': - [QWebEngineSettings.LocalContentCanAccessFileUrls], + Attr(QWebEngineSettings.LocalContentCanAccessFileUrls), 'content.webgl': - [QWebEngineSettings.WebGLEnabled], + Attr(QWebEngineSettings.WebGLEnabled), 'content.local_storage': - [QWebEngineSettings.LocalStorageEnabled], + Attr(QWebEngineSettings.LocalStorageEnabled), 'input.spatial_navigation': - [QWebEngineSettings.SpatialNavigationEnabled], + Attr(QWebEngineSettings.SpatialNavigationEnabled), 'input.links_included_in_focus_chain': - [QWebEngineSettings.LinksIncludedInFocusChain], + Attr(QWebEngineSettings.LinksIncludedInFocusChain), 'scrolling.smooth': - [QWebEngineSettings.ScrollAnimatorEnabled], + Attr(QWebEngineSettings.ScrollAnimatorEnabled), } _FONT_SIZES = { @@ -163,7 +164,7 @@ class WebEngineSettings(websettings.AbstractSettings): except AttributeError: continue - self._ATTRIBUTES[name] = [value] + self._ATTRIBUTES[name] = Attr(value) class ProfileSetter: diff --git a/qutebrowser/browser/webkit/webkitsettings.py b/qutebrowser/browser/webkit/webkitsettings.py index 5a6484fcd..cce1dcec0 100644 --- a/qutebrowser/browser/webkit/webkitsettings.py +++ b/qutebrowser/browser/webkit/webkitsettings.py @@ -30,6 +30,7 @@ from PyQt5.QtGui import QFont from PyQt5.QtWebKit import QWebSettings from qutebrowser.config import config, websettings +from qutebrowser.config.websettings import AttributeInfo as Attr from qutebrowser.utils import standarddir, urlutils from qutebrowser.browser import shared @@ -44,48 +45,48 @@ class WebKitSettings(websettings.AbstractSettings): _ATTRIBUTES = { 'content.images': - [QWebSettings.AutoLoadImages], + Attr(QWebSettings.AutoLoadImages), 'content.javascript.enabled': - [QWebSettings.JavascriptEnabled], + Attr(QWebSettings.JavascriptEnabled), 'content.javascript.can_open_tabs_automatically': - [QWebSettings.JavascriptCanOpenWindows], + Attr(QWebSettings.JavascriptCanOpenWindows), 'content.javascript.can_close_tabs': - [QWebSettings.JavascriptCanCloseWindows], + Attr(QWebSettings.JavascriptCanCloseWindows), 'content.javascript.can_access_clipboard': - [QWebSettings.JavascriptCanAccessClipboard], + Attr(QWebSettings.JavascriptCanAccessClipboard), 'content.plugins': - [QWebSettings.PluginsEnabled], + Attr(QWebSettings.PluginsEnabled), 'content.webgl': - [QWebSettings.WebGLEnabled], + Attr(QWebSettings.WebGLEnabled), 'content.hyperlink_auditing': - [QWebSettings.HyperlinkAuditingEnabled], + Attr(QWebSettings.HyperlinkAuditingEnabled), 'content.local_content_can_access_remote_urls': - [QWebSettings.LocalContentCanAccessRemoteUrls], + Attr(QWebSettings.LocalContentCanAccessRemoteUrls), 'content.local_content_can_access_file_urls': - [QWebSettings.LocalContentCanAccessFileUrls], + Attr(QWebSettings.LocalContentCanAccessFileUrls), 'content.dns_prefetch': - [QWebSettings.DnsPrefetchEnabled], + Attr(QWebSettings.DnsPrefetchEnabled), 'content.frame_flattening': - [QWebSettings.FrameFlatteningEnabled], + Attr(QWebSettings.FrameFlatteningEnabled), 'content.cache.appcache': - [QWebSettings.OfflineWebApplicationCacheEnabled], + Attr(QWebSettings.OfflineWebApplicationCacheEnabled), 'content.local_storage': - [QWebSettings.LocalStorageEnabled, - QWebSettings.OfflineStorageDatabaseEnabled], + Attr(QWebSettings.LocalStorageEnabled, + QWebSettings.OfflineStorageDatabaseEnabled), 'content.print_element_backgrounds': - [QWebSettings.PrintElementBackgrounds], + Attr(QWebSettings.PrintElementBackgrounds), 'content.xss_auditing': - [QWebSettings.XSSAuditingEnabled], + Attr(QWebSettings.XSSAuditingEnabled), 'input.spatial_navigation': - [QWebSettings.SpatialNavigationEnabled], + Attr(QWebSettings.SpatialNavigationEnabled), 'input.links_included_in_focus_chain': - [QWebSettings.LinksIncludedInFocusChain], + Attr(QWebSettings.LinksIncludedInFocusChain), 'zoom.text_only': - [QWebSettings.ZoomTextOnly], + Attr(QWebSettings.ZoomTextOnly), 'scrolling.smooth': - [QWebSettings.ScrollAnimatorEnabled], + Attr(QWebSettings.ScrollAnimatorEnabled), } _FONT_SIZES = { diff --git a/qutebrowser/config/websettings.py b/qutebrowser/config/websettings.py index cfb53e658..fb80c543b 100644 --- a/qutebrowser/config/websettings.py +++ b/qutebrowser/config/websettings.py @@ -28,6 +28,18 @@ from qutebrowser.misc import objects UNSET = object() +class AttributeInfo: + + """Info about a settings attribute.""" + + def __init__(self, *attributes, converter=None): + self.attributes = attributes + if converter is None: + self.converter = lambda val: val + else: + self.converter = converter + + class AbstractSettings: """Abstract base class for settings set via QWeb(Engine)Settings.""" @@ -50,12 +62,13 @@ class AbstractSettings: """ old_value = self.test_attribute(name) - for attribute in self._ATTRIBUTES[name]: + info = self._ATTRIBUTES[name] + for attribute in info.attributes: if value is configutils.UNSET: self._settings.resetAttribute(attribute) new_value = self.test_attribute(name) else: - self._settings.setAttribute(attribute, value) + self._settings.setAttribute(attribute, info.converter(value)) new_value = value return old_value != new_value @@ -66,7 +79,8 @@ class AbstractSettings: If the setting resolves to a list of attributes, only the first attribute is tested. """ - return self._settings.testAttribute(self._ATTRIBUTES[name][0]) + info = self._ATTRIBUTES[name] + return self._settings.testAttribute(info.attributes[0]) def set_font_size(self, name, value): """Set the given QWebSettings/QWebEngineSettings font size.