[Bf-blender-cvs] [6df4b00f5f6] blender-v2.90-release: Fix IDProps definition still being editable in liboverrides.

Bastien Montagne noreply at git.blender.org
Tue Aug 18 12:46:01 CEST 2020


Commit: 6df4b00f5f6f5e27b67814389bceb650ea335bc3
Author: Bastien Montagne
Date:   Tue Aug 18 12:43:42 2020 +0200
Branches: blender-v2.90-release
https://developer.blender.org/rB6df4b00f5f6f5e27b67814389bceb650ea335bc3

Fix IDProps definition still being editable in liboverrides.

One should be able to edit overridable IDProps values, but never their
settings/definitions.

Note that being able to add new IDProps to overrides is still a TODO.

Reported by Josephbburg (@Josephbburg) over blenderchat, thanks.

===================================================================

M	release/scripts/modules/rna_prop_ui.py
M	release/scripts/startup/bl_operators/wm.py

===================================================================

diff --git a/release/scripts/modules/rna_prop_ui.py b/release/scripts/modules/rna_prop_ui.py
index 662c1d908fc..98722ea322b 100644
--- a/release/scripts/modules/rna_prop_ui.py
+++ b/release/scripts/modules/rna_prop_ui.py
@@ -309,13 +309,15 @@ def draw(layout, context, context_member, property_type, use_edit=True):
             # Do not allow editing of overridden properties (we cannot use a poll function of the operators here
             # since they's have no access to the specific property...).
             row.enabled = not(is_lib_override and key in rna_item.id_data.override_library.reference)
-            if not is_rna:
+            if is_rna:
+                row.label(text="API Defined")
+            elif is_lib_override:
+                row.label(text="Library Override")
+            else:
                 props = row.operator("wm.properties_edit", text="Edit")
                 assign_props(props, val_draw, key)
                 props = row.operator("wm.properties_remove", text="", icon='REMOVE')
                 assign_props(props, val_draw, key)
-            else:
-                row.label(text="API Defined")
 
     del flow
 
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index 570b4663f1d..83039a5c333 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -1276,6 +1276,11 @@ class WM_OT_properties_edit(Operator):
 
         # First remove
         item = eval("context.%s" % data_path)
+
+        if (item.id_data and item.id_data.override_library and item.id_data.override_library.reference):
+            self.report({'ERROR'}, "Cannot edit properties from override data")
+            return {'CANCELLED'}
+
         prop_type_old = type(item[prop_old])
 
         rna_idprop_ui_prop_clear(item, prop_old)
@@ -1375,6 +1380,10 @@ class WM_OT_properties_edit(Operator):
 
         item = eval("context.%s" % data_path)
 
+        if (item.id_data and item.id_data.override_library and item.id_data.override_library.reference):
+            self.report({'ERROR'}, "Cannot edit properties from override data")
+            return {'CANCELLED'}
+
         # retrieve overridable static
         exec_str = "item.is_property_overridable_library('[\"%s\"]')" % (self.property)
         self.is_overridable_library = bool(eval(exec_str))
@@ -1498,6 +1507,10 @@ class WM_OT_properties_add(Operator):
         data_path = self.data_path
         item = eval("context.%s" % data_path)
 
+        if (item.id_data and item.id_data.override_library and item.id_data.override_library.reference):
+            self.report({'ERROR'}, "Cannot add properties to override data")
+            return {'CANCELLED'}
+
         def unique_name(names):
             prop = "prop"
             prop_new = prop
@@ -1550,6 +1563,11 @@ class WM_OT_properties_remove(Operator):
         )
         data_path = self.data_path
         item = eval("context.%s" % data_path)
+
+        if (item.id_data and item.id_data.override_library and item.id_data.override_library.reference):
+            self.report({'ERROR'}, "Cannot remove properties from override data")
+            return {'CANCELLED'}
+
         prop = self.property
         rna_idprop_ui_prop_update(item, prop)
         del item[prop]



More information about the Bf-blender-cvs mailing list