diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2019-09-29 09:20:56 +0300 |
---|---|---|
committer | Alexander Gavrilov <angavrilov@gmail.com> | 2019-09-29 09:28:02 +0300 |
commit | ba90d2efa58fe23a87f98e014bcc02ea951a6a49 (patch) | |
tree | b1c3c245493b5e7ca358108801530926031f60f4 /source | |
parent | 44d042094e21b519b38a3d78761b64bb5ceeb350 (diff) |
Fix T58683: Reload Scripts breaks toolbar button formatting.
Assuming it's actually necessary to do this check very efficiently,
replace the hack based on caching a pointer, with a different one
that caches the string comparison result in the operator object.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/interface/interface_query.c | 12 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_types.h | 2 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_operator_type.c | 5 |
3 files changed, 8 insertions, 11 deletions
diff --git a/source/blender/editors/interface/interface_query.c b/source/blender/editors/interface/interface_query.c index 457d01c5dc8..e08b13f65d4 100644 --- a/source/blender/editors/interface/interface_query.c +++ b/source/blender/editors/interface/interface_query.c @@ -139,17 +139,7 @@ bool ui_but_has_array_value(const uiBut *but) bool UI_but_is_tool(const uiBut *but) { - /* very evil! */ - if (but->optype != NULL) { - static wmOperatorType *ot = NULL; - if (ot == NULL) { - ot = WM_operatortype_find("WM_OT_tool_set_by_id", false); - } - if (but->optype == ot) { - return true; - } - } - return false; + return but->optype && but->optype->is_tool_button; } bool UI_but_has_tooltip_label(const uiBut *but) diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 15ad8cbedc4..0cf8b9c89f6 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -773,6 +773,8 @@ typedef struct wmOperatorType { /** Flag last for padding */ short flag; + /** Is the operator used by tool buttons, hack for fast checking. */ + bool is_tool_button; } wmOperatorType; /** diff --git a/source/blender/windowmanager/intern/wm_operator_type.c b/source/blender/windowmanager/intern/wm_operator_type.c index e3fe8892515..394efc856e3 100644 --- a/source/blender/windowmanager/intern/wm_operator_type.c +++ b/source/blender/windowmanager/intern/wm_operator_type.c @@ -20,6 +20,8 @@ * Operator Registry. */ +#include <string.h> + #include "MEM_guardedalloc.h" #include "CLG_log.h" @@ -127,6 +129,9 @@ static void wm_operatortype_append__end(wmOperatorType *ot) ot->srna, ot->name, ot->description ? ot->description : UNDOCUMENTED_OPERATOR_TIP); RNA_def_struct_identifier(&BLENDER_RNA, ot->srna, ot->idname); + /* A hack for efficiently detecting buttons with this specific operator. */ + ot->is_tool_button = STREQ(ot->idname, "WM_OT_tool_set_by_id"); + BLI_ghash_insert(global_ops_hash, (void *)ot->idname, ot); } |