[Bf-blender-cvs] [6c7ca77c8f3] temp-workspace_mode: Fix workspace mode changes to edit-mode when adding objects
Julian Eisel
noreply at git.blender.org
Sat Dec 23 16:36:43 CET 2017
Commit: 6c7ca77c8f34a199cbc4b6d32e38f628ca8b8ad5
Author: Julian Eisel
Date: Fri Dec 22 21:06:31 2017 +0100
Branches: temp-workspace_mode
https://developer.blender.org/rB6c7ca77c8f34a199cbc4b6d32e38f628ca8b8ad5
Fix workspace mode changes to edit-mode when adding objects
Steps to reproduce were:
* Change default cube to sculpt-mode
* Tab back into object-mode
* Add new mesh object
* Tab now enters edit-mode, should enter sculpt mode instead
===================================================================
M source/blender/editors/curve/editcurve_add.c
M source/blender/editors/mesh/editmesh_add.c
M source/blender/editors/mesh/mesh_navmesh.c
M source/blender/editors/object/object_add.c
===================================================================
diff --git a/source/blender/editors/curve/editcurve_add.c b/source/blender/editors/curve/editcurve_add.c
index 281f6c3c22e..c10726bc45a 100644
--- a/source/blender/editors/curve/editcurve_add.c
+++ b/source/blender/editors/curve/editcurve_add.c
@@ -473,6 +473,8 @@ Nurb *ED_curve_add_nurbs_primitive(bContext *C, Object *obedit, float mat[4][4],
static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ eObjectMode initial_workspace_mode = workspace->preferred_mode;
Object *obedit = CTX_data_edit_object(C);
ListBase *editnurb;
Nurb *nu;
@@ -532,6 +534,8 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
/* userdef */
if (newob && !enter_editmode) {
ED_object_editmode_exit(C, EM_FREEDATA);
+ /* restore workspace mode */
+ workspace->preferred_mode = initial_workspace_mode;
}
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit);
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index a21fc2fffde..c1396b8fd15 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -40,6 +40,7 @@
#include "BKE_context.h"
#include "BKE_library.h"
#include "BKE_editmesh.h"
+#include "BKE_workspace.h"
#include "RNA_define.h"
#include "RNA_access.h"
@@ -61,6 +62,7 @@
/* ********* add primitive operators ************* */
typedef struct MakePrimitiveData {
+ eObjectMode initial_workspace_mode;
float mat[4][4];
bool was_editmode;
} MakePrimitiveData;
@@ -73,6 +75,11 @@ static Object *make_prim_init(bContext *C, const char *idname,
r_creation_data->was_editmode = false;
if (obedit == NULL || obedit->type != OB_MESH) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+
+ /* may have to reset this later */
+ r_creation_data->initial_workspace_mode = workspace->preferred_mode;
+
obedit = ED_object_add_type(C, OB_MESH, idname, loc, rot, false, layer);
/* create editmode */
@@ -100,6 +107,12 @@ static void make_prim_finish(bContext *C, Object *obedit, const MakePrimitiveDat
/* userdef */
if (exit_editmode) {
ED_object_editmode_exit(C, EM_FREEDATA); /* adding EM_DO_UNDO messes up operator redo */
+
+ if (creation_data->initial_workspace_mode != OB_MODE_OBJECT) {
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ /* restore workspace mode */
+ workspace->preferred_mode = creation_data->initial_workspace_mode;
+ }
}
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit);
}
diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c
index db5f47dfec0..39b541e81b6 100644
--- a/source/blender/editors/mesh/mesh_navmesh.c
+++ b/source/blender/editors/mesh/mesh_navmesh.c
@@ -338,6 +338,8 @@ static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh,
int i, j, k;
unsigned short *v;
int face[3];
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ eObjectMode initial_workspace_mode = workspace->preferred_mode;
ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obedit;
int createob = base == NULL;
@@ -449,7 +451,9 @@ static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh,
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- ED_object_editmode_exit(C, EM_FREEDATA);
+ ED_object_editmode_exit(C, EM_FREEDATA);
+ /* restore workspace mode */
+ workspace->preferred_mode = initial_workspace_mode;
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit);
if (createob) {
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 07eeb48eaa6..870365148a2 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -92,6 +92,7 @@
#include "BKE_scene.h"
#include "BKE_screen.h"
#include "BKE_speaker.h"
+#include "BKE_workspace.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
@@ -594,6 +595,8 @@ void OBJECT_OT_lightprobe_add(wmOperatorType *ot)
/* for object add operator */
static int effector_add_exec(bContext *C, wmOperator *op)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ eObjectMode initial_workspace_mode = workspace->preferred_mode;
Object *ob;
int type;
bool enter_editmode;
@@ -619,8 +622,11 @@ static int effector_add_exec(bContext *C, wmOperator *op)
ED_object_editmode_enter(C, 0);
ED_object_new_primitive_matrix(C, ob, loc, rot, mat);
BLI_addtail(&cu->editnurb->nurbs, ED_curve_add_nurbs_primitive(C, ob, mat, CU_NURBS | CU_PRIM_PATH, dia));
- if (!enter_editmode)
+ if (!enter_editmode) {
ED_object_editmode_exit(C, EM_FREEDATA);
+ /* restore workspace mode */
+ workspace->preferred_mode = initial_workspace_mode;
+ }
}
else {
const char *name = CTX_DATA_(BLT_I18NCONTEXT_ID_OBJECT, "Field");
@@ -720,6 +726,8 @@ void OBJECT_OT_camera_add(wmOperatorType *ot)
static int object_metaball_add_exec(bContext *C, wmOperator *op)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ eObjectMode initial_workspace_mode = workspace->preferred_mode;
Object *obedit = CTX_data_edit_object(C);
bool newob = false;
bool enter_editmode;
@@ -748,6 +756,8 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op)
/* userdef */
if (newob && !enter_editmode) {
ED_object_editmode_exit(C, EM_FREEDATA);
+ /* restore workspace mode */
+ workspace->preferred_mode = initial_workspace_mode;
}
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit);
@@ -824,7 +834,9 @@ void OBJECT_OT_text_add(wmOperatorType *ot)
static int object_armature_add_exec(bContext *C, wmOperator *op)
{
Object *obedit = CTX_data_edit_object(C);
+ WorkSpace *workspace = CTX_wm_workspace(C);
RegionView3D *rv3d = CTX_wm_region_view3d(C);
+ eObjectMode initial_workspace_mode = workspace->preferred_mode;
bool newob = false;
bool enter_editmode;
unsigned int layer;
@@ -853,8 +865,11 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
ED_armature_edit_bone_add_primitive(obedit, dia, view_aligned);
/* userdef */
- if (newob && !enter_editmode)
+ if (newob && !enter_editmode) {
ED_object_editmode_exit(C, EM_FREEDATA);
+ /* restore workspace mode */
+ workspace->preferred_mode = initial_workspace_mode;
+ }
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit);
More information about the Bf-blender-cvs
mailing list