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)
 {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to