Fix user-stylesheet setting with an empty value.

This commit is contained in:
Florian Bruhin 2014-12-30 00:56:53 +01:00
parent 8b9f323f41
commit 56d844aff8

View File

@ -29,13 +29,12 @@ Module attributes:
import os.path import os.path
from PyQt5.QtWebKit import QWebSettings from PyQt5.QtWebKit import QWebSettings
from PyQt5.QtCore import QStandardPaths from PyQt5.QtCore import QStandardPaths, QUrl
from qutebrowser.config import config from qutebrowser.config import config
from qutebrowser.utils import usertypes, standarddir, objreg from qutebrowser.utils import usertypes, standarddir, objreg
MapType = usertypes.enum('MapType', ['attribute', 'setter', 'setter_none', MapType = usertypes.enum('MapType', ['attribute', 'setter', 'static_setter'])
'static_setter'])
MAPPINGS = { MAPPINGS = {
@ -71,35 +70,41 @@ MAPPINGS = {
}, },
'fonts': { 'fonts': {
'web-family-standard': 'web-family-standard':
(MapType.setter_none, lambda qws, v: (MapType.setter, lambda qws, v:
qws.setFontFamily(QWebSettings.StandardFont, v)), qws.setFontFamily(QWebSettings.StandardFont, v),
""),
'web-family-fixed': 'web-family-fixed':
(MapType.setter_none, lambda qws, v: (MapType.setter, lambda qws, v:
qws.setFontFamily(QWebSettings.FixedFont, v)), qws.setFontFamily(QWebSettings.FixedFont, v),
""),
'web-family-serif': 'web-family-serif':
(MapType.setter_none, lambda qws, v: (MapType.setter, lambda qws, v:
qws.setFontFamily(QWebSettings.SerifFont, v)), qws.setFontFamily(QWebSettings.SerifFont, v),
""),
'web-family-sans-serif': 'web-family-sans-serif':
(MapType.setter_none, lambda qws, v: (MapType.setter, lambda qws, v:
qws.setFontFamily(QWebSettings.SansSerifFont, v)), qws.setFontFamily(QWebSettings.SansSerifFont, v),
""),
'web-family-cursive': 'web-family-cursive':
(MapType.setter_none, lambda qws, v: (MapType.setter, lambda qws, v:
qws.setFontFamily(QWebSettings.CursiveFont, v)), qws.setFontFamily(QWebSettings.CursiveFont, v),
""),
'web-family-fantasy': 'web-family-fantasy':
(MapType.setter_none, lambda qws, v: (MapType.setter, lambda qws, v:
qws.setFontFamily(QWebSettings.FantasyFont, v)), qws.setFontFamily(QWebSettings.FantasyFont, v),
""),
'web-size-minimum': 'web-size-minimum':
(MapType.setter, lambda qws, v: (MapType.setter, lambda qws, v:
qws.setFontSize(QWebSettings.MinimumFontSize, v)), qws.setFontSize(QWebSettings.MinimumFontSize, v)),
'web-size-minimum-logical': 'web-size-minimum-logical':
(MapType.setter, lambda qws, v: (MapType.setter, lambda qws, v:
qws.setFontSize(QWebSettings.MinimumLogicalFontSize, v)), qws.setFontSize(QWebSettings.MinimumLogicalFontSize, v)),
'web-size-default': 'web-size-default':
(MapType.setter, lambda qws, v: (MapType.setter, lambda qws, v:
qws.setFontSize(QWebSettings.DefaultFontSize, v)), qws.setFontSize(QWebSettings.DefaultFontSize, v)),
'web-size-default-fixed': 'web-size-default-fixed':
(MapType.setter, lambda qws, v: (MapType.setter, lambda qws, v:
qws.setFontSize(QWebSettings.DefaultFixedFontSize, v)), qws.setFontSize(QWebSettings.DefaultFixedFontSize, v)),
}, },
'ui': { 'ui': {
'zoom-text-only': 'zoom-text-only':
@ -107,9 +112,12 @@ MAPPINGS = {
'frame-flattening': 'frame-flattening':
(MapType.attribute, QWebSettings.FrameFlatteningEnabled), (MapType.attribute, QWebSettings.FrameFlatteningEnabled),
'user-stylesheet': 'user-stylesheet':
(MapType.setter_none, lambda qws, v: qws.setUserStyleSheetUrl(v)), (MapType.setter, lambda qws, v:
qws.setUserStyleSheetUrl(v),
QUrl()),
'css-media-type': 'css-media-type':
(MapType.setter, lambda qws, v: qws.setCSSMediaType(v)), (MapType.setter, lambda qws, v:
qws.setCSSMediaType(v)),
#'accelerated-compositing': #'accelerated-compositing':
# (MapType.attribute, QWebSettings.AcceleratedCompositingEnabled), # (MapType.attribute, QWebSettings.AcceleratedCompositingEnabled),
#'tiled-backing-store': #'tiled-backing-store':
@ -125,16 +133,16 @@ MAPPINGS = {
(MapType.attribute, QWebSettings.LocalStorageEnabled), (MapType.attribute, QWebSettings.LocalStorageEnabled),
'maximum-pages-in-cache': 'maximum-pages-in-cache':
(MapType.static_setter, lambda v: (MapType.static_setter, lambda v:
QWebSettings.setMaximumPagesInCache(v)), QWebSettings.setMaximumPagesInCache(v)),
'object-cache-capacities': 'object-cache-capacities':
(MapType.static_setter, lambda v: (MapType.static_setter, lambda v:
QWebSettings.setObjectCacheCapacities(*v)), QWebSettings.setObjectCacheCapacities(*v)),
'offline-storage-default-quota': 'offline-storage-default-quota':
(MapType.static_setter, lambda v: (MapType.static_setter, lambda v:
QWebSettings.setOfflineStorageDefaultQuota(v)), QWebSettings.setOfflineStorageDefaultQuota(v)),
'offline-web-application-cache-quota': 'offline-web-application-cache-quota':
(MapType.static_setter, lambda v: (MapType.static_setter, lambda v:
QWebSettings.setOfflineWebApplicationCacheQuota(v)), QWebSettings.setOfflineWebApplicationCacheQuota(v)),
}, },
'general': { 'general': {
'private-browsing': 'private-browsing':
@ -148,34 +156,39 @@ MAPPINGS = {
'site-specific-quirks': 'site-specific-quirks':
(MapType.attribute, QWebSettings.SiteSpecificQuirksEnabled), (MapType.attribute, QWebSettings.SiteSpecificQuirksEnabled),
'default-encoding': 'default-encoding':
(MapType.setter_none, lambda qws, v: (MapType.setter, lambda qws, v: qws.setDefaultTextEncoding(v), ""),
qws.setDefaultTextEncoding(v)),
} }
} }
settings = None settings = None
UNSET = object()
def _set_setting(typ, arg, value): def _set_setting(typ, arg, default=UNSET, value=UNSET):
"""Set a QWebSettings setting. """Set a QWebSettings setting.
Args: Args:
typ: The type of the item. typ: The type of the item.
arg: The argument (attribute/handler) arg: The argument (attribute/handler)
default: The value to use if the user set an empty string.
value: The value to set. value: The value to set.
""" """
if not isinstance(typ, MapType): if not isinstance(typ, MapType):
raise TypeError("Type {} is no MapType member!".format(typ)) raise TypeError("Type {} is no MapType member!".format(typ))
if value is UNSET:
raise TypeError("No value given!")
if value is None:
if default is UNSET:
return
else:
value = default
if typ == MapType.attribute: if typ == MapType.attribute:
settings.setAttribute(arg, value) settings.setAttribute(arg, value)
elif typ == MapType.setter_none: elif typ == MapType.setter:
if value is None:
value = ""
arg(settings, value) arg(settings, value)
elif typ == MapType.setter and value is not None: elif typ == MapType.static_setter:
arg(settings, value)
elif typ == MapType.static_setter and value is not None:
arg(value) arg(value)
@ -194,17 +207,17 @@ def init():
global settings global settings
settings = QWebSettings.globalSettings() settings = QWebSettings.globalSettings()
for sectname, section in MAPPINGS.items(): for sectname, section in MAPPINGS.items():
for optname, (typ, arg) in section.items(): for optname, mapping in section.items():
value = config.get(sectname, optname) value = config.get(sectname, optname)
_set_setting(typ, arg, value) _set_setting(*mapping, value=value)
objreg.get('config').changed.connect(update_settings) objreg.get('config').changed.connect(update_settings)
def update_settings(section, option): def update_settings(section, option):
"""Update global settings when qwebsettings changed.""" """Update global settings when qwebsettings changed."""
try: try:
typ, arg = MAPPINGS[section][option] mapping = MAPPINGS[section][option]
except KeyError: except KeyError:
return return
value = config.get(section, option) value = config.get(section, option)
_set_setting(typ, arg, value) _set_setting(*mapping, value=value)