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