[Bf-blender-cvs] [c93af8529df] master: Tool System: don't unlink gizmos when changing tools

Campbell Barton noreply at git.blender.org
Thu Jun 27 10:49:26 CEST 2019


Commit: c93af8529dfec9513de3bfcead9d15fa0eeb9a81
Author: Campbell Barton
Date:   Thu Jun 27 18:42:25 2019 +1000
Branches: master
https://developer.blender.org/rBc93af8529dfec9513de3bfcead9d15fa0eeb9a81

Tool System: don't unlink gizmos when changing tools

Needed for tools not to unlink each other with multiple windows.

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

M	source/blender/windowmanager/intern/wm_toolsystem.c

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

diff --git a/source/blender/windowmanager/intern/wm_toolsystem.c b/source/blender/windowmanager/intern/wm_toolsystem.c
index f40ea55ee82..3d22981f7ba 100644
--- a/source/blender/windowmanager/intern/wm_toolsystem.c
+++ b/source/blender/windowmanager/intern/wm_toolsystem.c
@@ -128,11 +128,16 @@ bool WM_toolsystem_ref_ensure(struct WorkSpace *workspace, const bToolKey *tkey,
 
 /** \} */
 
-static void toolsystem_unlink_ref(bContext *C, WorkSpace *workspace, bToolRef *tref)
+/**
+ * \param do_gizmo: Make removing the gizmo optional because it complicates multi-window support
+ * since the tool might be used in another window. The gizmos poll function must handle this,
+ * since this is needed for switching workspaces anyway.
+ */
+static void toolsystem_unlink_ref(bContext *C, WorkSpace *workspace, bToolRef *tref, bool do_gizmo)
 {
   bToolRef_Runtime *tref_rt = tref->runtime;
 
-  if (tref_rt->gizmo_group[0]) {
+  if (do_gizmo && tref_rt->gizmo_group[0]) {
     wmGizmoGroupType *gzgt = WM_gizmogrouptype_find(tref_rt->gizmo_group, false);
     if (gzgt != NULL) {
       bool found = false;
@@ -165,7 +170,7 @@ void WM_toolsystem_unlink(bContext *C, WorkSpace *workspace, const bToolKey *tke
 {
   bToolRef *tref = WM_toolsystem_ref_find(workspace, tkey);
   if (tref && tref->runtime) {
-    toolsystem_unlink_ref(C, workspace, tref);
+    toolsystem_unlink_ref(C, workspace, tref, false);
   }
 }
 
@@ -312,7 +317,7 @@ void WM_toolsystem_unlink_all(struct bContext *C, struct WorkSpace *workspace)
   LISTBASE_FOREACH (bToolRef *, tref, &workspace->tools) {
     if (tref->runtime) {
       if (tref->tag == 0) {
-        toolsystem_unlink_ref(C, workspace, tref);
+        toolsystem_unlink_ref(C, workspace, tref, true);
         tref->tag = 1;
       }
     }
@@ -359,7 +364,7 @@ void WM_toolsystem_ref_set_from_runtime(struct bContext *C,
   Main *bmain = CTX_data_main(C);
 
   if (tref->runtime) {
-    toolsystem_unlink_ref(C, workspace, tref);
+    toolsystem_unlink_ref(C, workspace, tref, false);
   }
 
   STRNCPY(tref->idname, idname);



More information about the Bf-blender-cvs mailing list