Make it possible to provide a converter for websettings
This commit is contained in:
parent
b7c1d7fe37
commit
c5b7ed350e
@ -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:
|
||||
|
@ -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 = {
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user