[Bf-blender-cvs] [b7deea0] master: Fix T47780: Icons don't update in floating panels

Campbell Barton noreply at git.blender.org
Tue Mar 15 11:22:18 CET 2016


Commit: b7deea029a2ad80757ab6859c88990d036c5729c
Author: Campbell Barton
Date:   Tue Mar 15 21:12:37 2016 +1100
Branches: master
https://developer.blender.org/rBb7deea029a2ad80757ab6859c88990d036c5729c

Fix T47780: Icons don't update in floating panels

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

M	source/blender/editors/interface/interface.c
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_access.c

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

diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index e18066f..daef84c 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -2855,14 +2855,16 @@ void ui_but_update_ex(uiBut *but, const bool validate)
 				if (but->block->flag & UI_BLOCK_LOOP) {
 					if (but->rnaprop && (RNA_property_type(but->rnaprop) == PROP_ENUM)) {
 						int value_enum = RNA_property_enum_get(&but->rnapoin, but->rnaprop);
-						const char *buf;
-						if (RNA_property_enum_name_gettexted(
+
+						EnumPropertyItem item;
+						if (RNA_property_enum_item_from_value_gettexted(
 						        but->block->evil_C,
-						        &but->rnapoin, but->rnaprop, value_enum, &buf))
+						        &but->rnapoin, but->rnaprop, value_enum, &item))
 						{
-							size_t slen = strlen(buf);
+							size_t slen = strlen(item.name);
 							ui_but_string_free_internal(but);
-							ui_but_string_set_internal(but, buf, slen);
+							ui_but_string_set_internal(but, item.name, slen);
+							but->icon = item.icon;
 						}
 					}
 				}
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 6dee89e..3a19211 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -831,6 +831,14 @@ bool RNA_property_enum_value(struct bContext *C, PointerRNA *ptr, PropertyRNA *p
 bool RNA_property_enum_identifier(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier);
 bool RNA_property_enum_name(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **name);
 bool RNA_property_enum_name_gettexted(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **name);
+
+bool RNA_property_enum_item_from_value(
+        struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value,
+        EnumPropertyItem *r_item);
+bool RNA_property_enum_item_from_value_gettexted(
+        struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value,
+        EnumPropertyItem *r_item);
+
 int RNA_property_enum_bitflag_identifiers(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier);
 
 StructRNA *RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop);
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 6d48c69..97c7171 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -1521,6 +1521,51 @@ bool RNA_property_enum_name_gettexted(bContext *C, PointerRNA *ptr, PropertyRNA
 	return result;
 }
 
+bool RNA_property_enum_item_from_value(
+        bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value,
+        EnumPropertyItem *r_item)
+{
+	EnumPropertyItem *item = NULL;
+	bool free;
+
+	RNA_property_enum_items(C, ptr, prop, &item, NULL, &free);
+	if (item) {
+		const int i = RNA_enum_from_value(item, value);
+		bool result;
+
+		if (i != -1) {
+			*r_item = item[i];
+			result = true;
+		}
+		else {
+			result = false;
+		}
+
+		if (free)
+			MEM_freeN(item);
+
+		return result;
+	}
+	return false;
+}
+
+bool RNA_property_enum_item_from_value_gettexted(
+        bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value,
+        EnumPropertyItem *r_item)
+{
+	bool result;
+
+	result = RNA_property_enum_item_from_value(C, ptr, prop, value, r_item);
+
+	if (!(prop->flag & PROP_ENUM_NO_TRANSLATE)) {
+		if (BLT_translate_iface()) {
+			r_item->name = BLT_pgettext(prop->translation_context, r_item->name);
+		}
+	}
+
+	return result;
+}
+
 int RNA_property_enum_bitflag_identifiers(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value,
                                           const char **identifier)
 {




More information about the Bf-blender-cvs mailing list