[Bf-blender-cvs] [a4a6ed1ba3c] blender2.8: WM: default tool was being set for space types w/o tools

Campbell Barton noreply at git.blender.org
Fri Oct 26 01:48:39 CEST 2018


Commit: a4a6ed1ba3c86ed842f4373c65d64d28d827f864
Author: Campbell Barton
Date:   Fri Oct 26 10:42:31 2018 +1100
Branches: blender2.8
https://developer.blender.org/rBa4a6ed1ba3c86ed842f4373c65d64d28d827f864

WM: default tool was being set for space types w/o tools

Add mask for space types so we don't accidentally add tools
for space types that don't support it.

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

M	release/scripts/startup/bl_operators/wm.py
M	source/blender/windowmanager/WM_toolsystem.h
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_toolsystem.c

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

diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index 9e7f8028f75..8a6b472aabf 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -2398,7 +2398,7 @@ class WM_OT_tool_set_by_name(Operator):
         if fn(context, space_type, self.name):
             return {'FINISHED'}
         else:
-            self.report({'WARNING'}, f"Tool {self.name!r} not found.")
+            self.report({'WARNING'}, f"Tool {self.name!r:s} not found for space {space_type!r:s}.")
             return {'CANCELLED'}
 
 
diff --git a/source/blender/windowmanager/WM_toolsystem.h b/source/blender/windowmanager/WM_toolsystem.h
index af9551606da..21408896877 100644
--- a/source/blender/windowmanager/WM_toolsystem.h
+++ b/source/blender/windowmanager/WM_toolsystem.h
@@ -44,6 +44,11 @@ struct StructRNA;
 
 /* wm_toolsystem.c  */
 
+#define WM_TOOLSYSTEM_SPACE_MASK ( \
+	(1 << SPACE_VIEW3D) | \
+	(1 << SPACE_IMAGE) \
+)
+
 /* Values that define a categoey of active tool. */
 typedef struct bToolKey { int space_type; int mode; } bToolKey;
 
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 955713c90f1..e5901e40b71 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -4474,7 +4474,9 @@ void WM_window_cursor_keymap_status_refresh(bContext *C, wmWindow *win)
 	/* Detect changes to the state. */
 	{
 		bToolRef *tref = NULL;
-		if (ar->regiontype == RGN_TYPE_WINDOW) {
+		if ((ar->regiontype == RGN_TYPE_WINDOW) &&
+		    ((1 << sa->spacetype) & WM_TOOLSYSTEM_SPACE_MASK))
+		{
 			ViewLayer *view_layer = WM_window_get_active_view_layer(win);
 			WorkSpace *workspace = WM_window_get_active_workspace(win);
 			const bToolKey tkey = {
diff --git a/source/blender/windowmanager/intern/wm_toolsystem.c b/source/blender/windowmanager/intern/wm_toolsystem.c
index e835ece0c6c..c5882ed9c21 100644
--- a/source/blender/windowmanager/intern/wm_toolsystem.c
+++ b/source/blender/windowmanager/intern/wm_toolsystem.c
@@ -72,6 +72,9 @@ struct bToolRef *WM_toolsystem_ref_from_context(struct bContext *C)
 	WorkSpace *workspace = CTX_wm_workspace(C);
 	ViewLayer *view_layer = CTX_data_view_layer(C);
 	ScrArea *sa = CTX_wm_area(C);
+	if (((1 << sa->spacetype) & WM_TOOLSYSTEM_SPACE_MASK) == 0) {
+		return NULL;
+	}
 	const bToolKey tkey = {
 		.space_type = sa->spacetype,
 		.mode = WM_toolsystem_mode_from_spacetype(view_layer, sa, sa->spacetype),
@@ -92,6 +95,7 @@ struct bToolRef_Runtime *WM_toolsystem_runtime_from_context(struct bContext *C)
 
 bToolRef *WM_toolsystem_ref_find(WorkSpace *workspace, const bToolKey *tkey)
 {
+	BLI_assert((1 << tkey->space_type) & WM_TOOLSYSTEM_SPACE_MASK);
 	LISTBASE_FOREACH (bToolRef *, tref, &workspace->tools) {
 		if ((tref->space_type == tkey->space_type) &&
 		    (tref->mode == tkey->mode))
@@ -404,6 +408,9 @@ void WM_toolsystem_init(bContext *C)
 			bScreen *screen = WM_window_get_active_screen(win);
 			ViewLayer *view_layer = WM_window_get_active_view_layer(win);
 			for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+				if (((1 << sa->spacetype) & WM_TOOLSYSTEM_SPACE_MASK) == 0) {
+					continue;
+				}
 				const bToolKey tkey = {
 					.space_type = sa->spacetype,
 					.mode = WM_toolsystem_mode_from_spacetype(view_layer, sa, sa->spacetype),
@@ -556,6 +563,8 @@ bToolRef *WM_toolsystem_ref_set_by_name(
 		tkey = &tkey_from_context;
 	}
 
+	BLI_assert((1 << tkey->space_type) & WM_TOOLSYSTEM_SPACE_MASK);
+
 	RNA_enum_set(&op_props, "space_type", tkey->space_type);
 	RNA_boolean_set(&op_props, "cycle", cycle);



More information about the Bf-blender-cvs mailing list