forked from bartvdbraak/blender
Fix custom property UI handling names with quotes and back-slashes
Custom property names wasn't escaping strings, causing exceptions editing custom properties with characters that needed to be escaped.
This commit is contained in:
parent
9d8aefaa5c
commit
3b5a81936d
@ -49,7 +49,7 @@ def rna_idprop_ui_del(item):
|
|||||||
|
|
||||||
|
|
||||||
def rna_idprop_quote_path(prop):
|
def rna_idprop_quote_path(prop):
|
||||||
return "[\"%s\"]" % prop.replace("\"", "\\\"")
|
return "[\"%s\"]" % bpy.utils.escape_identifier(prop)
|
||||||
|
|
||||||
|
|
||||||
def rna_idprop_ui_prop_update(item, prop):
|
def rna_idprop_ui_prop_update(item, prop):
|
||||||
|
@ -1265,6 +1265,7 @@ class WM_OT_properties_edit(Operator):
|
|||||||
|
|
||||||
data_path = self.data_path
|
data_path = self.data_path
|
||||||
prop = self.property
|
prop = self.property
|
||||||
|
prop_escape = bpy.utils.escape_identifier(prop)
|
||||||
|
|
||||||
prop_old = getattr(self, "_last_prop", [None])[0]
|
prop_old = getattr(self, "_last_prop", [None])[0]
|
||||||
|
|
||||||
@ -1289,7 +1290,7 @@ class WM_OT_properties_edit(Operator):
|
|||||||
|
|
||||||
# Reassign
|
# Reassign
|
||||||
item[prop] = value_eval
|
item[prop] = value_eval
|
||||||
item.property_overridable_library_set('["%s"]' % prop, self.is_overridable_library)
|
item.property_overridable_library_set('["%s"]' % prop_escape, self.is_overridable_library)
|
||||||
rna_idprop_ui_prop_update(item, prop)
|
rna_idprop_ui_prop_update(item, prop)
|
||||||
|
|
||||||
self._last_prop[:] = [prop]
|
self._last_prop[:] = [prop]
|
||||||
@ -1322,7 +1323,7 @@ class WM_OT_properties_edit(Operator):
|
|||||||
|
|
||||||
# If we have changed the type of the property, update its potential anim curves!
|
# If we have changed the type of the property, update its potential anim curves!
|
||||||
if prop_type_old != prop_type_new:
|
if prop_type_old != prop_type_new:
|
||||||
data_path = '["%s"]' % bpy.utils.escape_identifier(prop)
|
data_path = '["%s"]' % prop_escape
|
||||||
done = set()
|
done = set()
|
||||||
|
|
||||||
def _update(fcurves):
|
def _update(fcurves):
|
||||||
@ -1364,13 +1365,16 @@ class WM_OT_properties_edit(Operator):
|
|||||||
rna_idprop_value_item_type
|
rna_idprop_value_item_type
|
||||||
)
|
)
|
||||||
|
|
||||||
|
prop = self.property
|
||||||
|
prop_escape = bpy.utils.escape_identifier(prop)
|
||||||
|
|
||||||
data_path = self.data_path
|
data_path = self.data_path
|
||||||
|
|
||||||
if not data_path:
|
if not data_path:
|
||||||
self.report({'ERROR'}, "Data path not set")
|
self.report({'ERROR'}, "Data path not set")
|
||||||
return {'CANCELLED'}
|
return {'CANCELLED'}
|
||||||
|
|
||||||
self._last_prop = [self.property]
|
self._last_prop = [prop]
|
||||||
|
|
||||||
item = eval("context.%s" % data_path)
|
item = eval("context.%s" % data_path)
|
||||||
|
|
||||||
@ -1379,7 +1383,7 @@ class WM_OT_properties_edit(Operator):
|
|||||||
return {'CANCELLED'}
|
return {'CANCELLED'}
|
||||||
|
|
||||||
# retrieve overridable static
|
# retrieve overridable static
|
||||||
is_overridable = item.is_property_overridable_library('["%s"]' % self.property)
|
is_overridable = item.is_property_overridable_library('["%s"]' % prop_escape)
|
||||||
self.is_overridable_library = bool(is_overridable)
|
self.is_overridable_library = bool(is_overridable)
|
||||||
|
|
||||||
# default default value
|
# default default value
|
||||||
@ -1390,7 +1394,7 @@ class WM_OT_properties_edit(Operator):
|
|||||||
self.default = ""
|
self.default = ""
|
||||||
|
|
||||||
# setup defaults
|
# setup defaults
|
||||||
prop_ui = rna_idprop_ui_prop_get(item, self.property, False) # don't create
|
prop_ui = rna_idprop_ui_prop_get(item, prop, False) # don't create
|
||||||
if prop_ui:
|
if prop_ui:
|
||||||
self.min = prop_ui.get("min", -1000000000)
|
self.min = prop_ui.get("min", -1000000000)
|
||||||
self.max = prop_ui.get("max", 1000000000)
|
self.max = prop_ui.get("max", 1000000000)
|
||||||
|
Loading…
Reference in New Issue
Block a user