[Bf-blender-cvs] [ba90d2efa58] master: Fix T58683: Reload Scripts breaks toolbar button formatting.

Alexander Gavrilov noreply at git.blender.org
Sun Sep 29 08:55:48 CEST 2019


Commit: ba90d2efa58fe23a87f98e014bcc02ea951a6a49
Author: Alexander Gavrilov
Date:   Sun Sep 29 09:20:56 2019 +0300
Branches: master
https://developer.blender.org/rBba90d2efa58fe23a87f98e014bcc02ea951a6a49

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.

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

M	source/blender/editors/interface/interface_query.c
M	source/blender/windowmanager/WM_types.h
M	source/blender/windowmanager/intern/wm_operator_type.c

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

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);
 }



More information about the Bf-blender-cvs mailing list