[Bf-blender-cvs] [35bd1bb957b] blender2.8: WorkSpace: move edit mode w/ sync into own func

Campbell Barton noreply at git.blender.org
Fri Mar 2 13:02:51 CET 2018


Commit: 35bd1bb957b3c7491875d58d0092eab39c3b4e0e
Author: Campbell Barton
Date:   Fri Mar 2 23:04:19 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB35bd1bb957b3c7491875d58d0092eab39c3b4e0e

WorkSpace: move edit mode w/ sync into own func

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

M	source/blender/editors/include/ED_object.h
M	source/blender/editors/object/object_modes.c
M	source/blender/editors/scene/scene_edit.c
M	source/blender/editors/screen/workspace_edit.c

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

diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index 33a8ee133ea..80f230fd868 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -219,6 +219,9 @@ bool ED_object_mode_generic_has_data(
         const struct EvaluationContext *eval_ctx,
         struct Object *ob);
 
+bool ED_object_mode_generic_enter_or_other_window(
+        struct bContext *C, eObjectMode object_mode);
+
 /* object_modifier.c */
 enum {
 	MODIFIER_APPLY_DATA = 1,
diff --git a/source/blender/editors/object/object_modes.c b/source/blender/editors/object/object_modes.c
index 8cdec2968b3..47cbf782e07 100644
--- a/source/blender/editors/object/object_modes.c
+++ b/source/blender/editors/object/object_modes.c
@@ -45,6 +45,8 @@
 
 #include "DEG_depsgraph.h"
 
+#include "ED_screen.h"
+
 #include "ED_object.h"  /* own include */
 
 /* -------------------------------------------------------------------- */
@@ -242,3 +244,41 @@ bool ED_object_mode_generic_has_data(
 }
 
 /** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Mode Syncing Utils
+ *
+ * \{ */
+
+/**
+ * A version of #ED_object_mode_generic_enter that checks if the object
+ * has an active mode mode in another window we need to use another window first.
+ */
+bool ED_object_mode_generic_enter_or_other_window(
+        struct bContext *C, eObjectMode object_mode)
+{
+	WorkSpace *workspace = CTX_wm_workspace(C);
+	ViewLayer *view_layer = CTX_data_view_layer(C);
+	Base *basact = view_layer->basact;
+	if (basact == NULL) {
+		workspace->object_mode = OB_MODE_OBJECT;
+		return (workspace->object_mode == object_mode);
+	}
+
+	wmWindowManager *wm = CTX_wm_manager(C);
+	eObjectMode object_mode_set = OB_MODE_OBJECT;
+	view_layer->basact = NULL;
+	bool use_object_mode = ED_workspace_object_mode_in_other_window(wm, NULL, basact->object, &object_mode_set);
+	view_layer->basact = basact;
+
+	if (use_object_mode) {
+		workspace->object_mode = object_mode_set;
+		return (workspace->object_mode == object_mode);
+	}
+	else {
+		workspace->object_mode = OB_MODE_OBJECT;
+		return ED_object_mode_generic_enter(C, object_mode);
+	}
+}
+
+/** \} */
diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c
index cee73c28767..462820c93c0 100644
--- a/source/blender/editors/scene/scene_edit.c
+++ b/source/blender/editors/scene/scene_edit.c
@@ -156,20 +156,8 @@ void ED_scene_change_update(
 	if (obact_new == obact_old) {
 		/* pass */
 	}
-	else if (obact_new == NULL) {
-		workspace->object_mode = OB_MODE_OBJECT;
-	}
 	else {
-		eObjectMode object_mode_set = OB_MODE_OBJECT;
-		if (ED_workspace_object_mode_in_other_window(
-		            bmain->wm.first, win, obact_new, &object_mode_set))
-		{
-			workspace->object_mode = object_mode_set;
-		}
-		else {
-			workspace->object_mode = OB_MODE_OBJECT;
-			ED_object_mode_generic_enter(C, object_mode_old);
-		}
+		ED_object_mode_generic_enter_or_other_window(C, object_mode_old);
 	}
 
 
diff --git a/source/blender/editors/screen/workspace_edit.c b/source/blender/editors/screen/workspace_edit.c
index 7635a2644f5..23715f667fe 100644
--- a/source/blender/editors/screen/workspace_edit.c
+++ b/source/blender/editors/screen/workspace_edit.c
@@ -221,19 +221,12 @@ bool ED_workspace_change(
 		WM_toolsystem_unlink(C, workspace_old);
 		WM_toolsystem_link(C, workspace_new);
 
-		if (obact_new == NULL) {
-			workspace_new->object_mode = OB_MODE_OBJECT;
+		if (use_object_mode) {
+			ED_object_mode_generic_enter_or_other_window(C, workspace_new->object_mode);
 		}
-		else if (use_object_mode) {
-			eObjectMode object_mode_set = workspace_new->object_mode;
-			if (ED_workspace_object_mode_in_other_window(
-			            bmain->wm.first, win, obact_new, &object_mode_set))
-			{
-				workspace_new->object_mode = object_mode_set;
-			}
-			else {
+		else {
+			if (obact_new == NULL) {
 				workspace_new->object_mode = OB_MODE_OBJECT;
-				ED_object_mode_generic_enter(C, object_mode_set);
 			}
 		}



More information about the Bf-blender-cvs mailing list