Commit: 8a410572c295243649d66c8834b87d4e7d7b33ce
Author: Campbell Barton
Date:   Sat Apr 7 10:57:26 2018 +0200
Branches: temp-object-multi-mode
https://developer.blender.org/rB8a410572c295243649d66c8834b87d4e7d7b33ce

Merge branch '28' into temp-object-multi-mode

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



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

diff --cc source/blender/blenkernel/BKE_object.h
index 7596a33afa7,c5eefedcfad..63a89ffb34c
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@@ -83,11 -81,9 +81,11 @@@ void BKE_object_make_proxy(struct Objec
  void BKE_object_copy_proxy_drivers(struct Object *ob, struct Object *target);
  
  bool BKE_object_exists_check(struct Object *obtest);
 -bool BKE_object_is_in_editmode(struct Object *ob);
 +bool BKE_object_is_in_editmode(const struct Object *ob);
  bool BKE_object_is_in_editmode_vgroup(struct Object *ob);
 +bool BKE_object_is_in_editmode_and_selected(const struct Object *ob);
- bool BKE_object_is_in_wpaint_select_vert(const struct Object *ob, eObjectMode 
object_mode);
+ bool BKE_object_is_in_wpaint_select_vert(const struct Object *ob);
 +bool BKE_object_has_mode_data(const struct Object *ob, eObjectMode 
object_mode);
  
  typedef enum eObjectVisibilityCheck {
        OB_VISIBILITY_CHECK_FOR_VIEWPORT,
diff --cc source/blender/blenkernel/intern/object_update.c
index 199e91a3dd9,de2002624c0..e6ec7e7cce3
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@@ -172,15 -172,7 +172,15 @@@ void BKE_object_handle_data_update
        switch (ob->type) {
                case OB_MESH:
                {
 +#if 0
-                       BMEditMesh *em = (eval_ctx->object_mode & OB_MODE_EDIT) 
? BKE_editmesh_from_object(ob) : NULL;
+                       BMEditMesh *em = (ob->mode & OB_MODE_EDIT) ? 
BKE_editmesh_from_object(ob) : NULL;
 +#else
-                       BMEditMesh *em = (eval_ctx->object_mode & OB_MODE_EDIT) 
? ((Mesh *)ob->data)->edit_btmesh : NULL;
++                      BMEditMesh *em = (ob->mode & OB_MODE_EDIT) ? ((Mesh 
*)ob->data)->edit_btmesh : NULL;
 +                      if (em && em->ob != ob) {
 +                              em = NULL;
 +                      }
 +#endif
 +
                        uint64_t data_mask = scene->customdata_mask | 
CD_MASK_BAREMESH;
  #ifdef WITH_FREESTYLE
                        /* make sure Freestyle edge/face marks appear in DM for 
render (see T40315) */
diff --cc source/blender/editors/include/ED_object.h
index 48b029d106d,ebd9313f7c5..19189191b3b
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@@ -125,12 -124,9 +124,12 @@@ void ED_object_parent(struct Object *ob
  #define EM_WAITCURSOR   4
  #define EM_DO_UNDO      8
  #define EM_IGNORE_LAYER 16
 +#define EM_NO_CONTEXT 32
  void ED_object_editmode_exit_ex(
-         struct bContext *C, struct WorkSpace *workspace, struct Scene *scene, 
struct Object *obedit, int flag);
+         struct bContext *C, struct Scene *scene, struct Object *obedit, int 
flag);
  void ED_object_editmode_exit(struct bContext *C, int flag);
 +
- void ED_object_editmode_enter_ex(struct WorkSpace *workspace, struct Scene 
*scene, struct Object *ob, int flag);
++void ED_object_editmode_enter_ex(struct Scene *scene, struct Object *ob, int 
flag);
  void ED_object_editmode_enter(struct bContext *C, int flag);
  bool ED_object_editmode_load(struct Object *obedit);
  
diff --cc source/blender/editors/include/ED_uvedit.h
index 0a6f9345078,2a5ad494643..2b619fa12e6
--- a/source/blender/editors/include/ED_uvedit.h
+++ b/source/blender/editors/include/ED_uvedit.h
@@@ -132,9 -129,9 +132,9 @@@ void ED_unwrap_lscm(struct Scene *scene
  
  /* uvedit_draw.c */
  void ED_image_draw_cursor(
 -struct ARegion *ar, const float cursor[2]);
 +       struct ARegion *ar, const float cursor[2]);
  void ED_uvedit_draw_main(
-         struct SpaceImage *sima, const struct EvaluationContext *eval_ctx,
+         struct SpaceImage *sima,
          struct ARegion *ar, struct Scene *scene, struct ViewLayer *view_layer,
          struct Object *obedit, struct Object *obact, struct Depsgraph 
*depsgraph);
  
diff --cc source/blender/editors/object/object_edit.c
index 23cb7667847,9306213581e..19e9eb1d6f4
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@@ -275,9 -274,12 +275,9 @@@ bool ED_object_editmode_load(Object *ob
   * - Only in exceptional cases should #EM_DO_UNDO NOT be in the flag.
   * - If #EM_FREEDATA isn't in the flag, use ED_object_editmode_load directly.
   */
- void ED_object_editmode_exit_ex(bContext *C, WorkSpace *workspace, Scene 
*scene, Object *obedit, int flag)
+ void ED_object_editmode_exit_ex(bContext *C, Scene *scene, Object *obedit, 
int flag)
  {
        BLI_assert(C || !(flag & EM_DO_UNDO));
 -      /* Note! only in exceptional cases should 'EM_DO_UNDO' NOT be in the 
flag */
 -      /* Note! if 'EM_FREEDATA' isn't in the flag, use 
ED_object_editmode_load directly */
 -      ViewLayer *view_layer = CTX_data_view_layer(C);
        const bool freedata = (flag & EM_FREEDATA) != 0;
  
        if (flag & EM_WAITCURSOR) waitcursor(1);
@@@ -285,7 -287,9 +285,9 @@@
        if (ED_object_editmode_load_ex(G.main, obedit, freedata) == false) {
                /* in rare cases (background mode) its possible active object
                 * is flagged for editmode, without 'obedit' being set [#35489] 
*/
-               workspace->object_mode &= ~OB_MODE_EDIT;
 -              if (UNLIKELY(view_layer->basact && 
(view_layer->basact->object->mode & OB_MODE_EDIT))) {
 -                      view_layer->basact->object->mode &= ~OB_MODE_EDIT;
++              if (UNLIKELY(obedit && obedit->mode & OB_MODE_EDIT)) {
++                      obedit->mode &= ~OB_MODE_EDIT;
+               }
                if (flag & EM_WAITCURSOR) waitcursor(0);
                return;
        }
@@@ -313,36 -315,43 +313,33 @@@
                if (flag & EM_DO_UNDO)
                        ED_undo_push(C, "Editmode");
  
 -              WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, 
scene);
 +              if (C != NULL) {
 +                      WM_event_add_notifier(C, NC_SCENE | ND_MODE | 
NS_MODE_OBJECT, scene);
 +              }
 +              else {
 +                      WM_main_add_notifier(NC_SCENE | ND_MODE | 
NS_MODE_OBJECT, scene);
 +              }
-       }
 +
-       ED_workspace_object_mode_sync_from_object(G.main->wm.first, workspace, 
obedit);
  
-       if (flag & EM_WAITCURSOR) waitcursor(0);
+               obedit->mode &= ~OB_MODE_EDIT;
+       }
  
-       /* This way we ensure scene's obedit is copied into all CoW scenes.  */
-       DEG_id_tag_update(&scene->id, 0);
+       if (flag & EM_WAITCURSOR) waitcursor(0);
 -
 -      /* This way we ensure scene's obedit is copied into all CoW scenes.  */
 -      DEG_id_tag_update(&scene->id, 0);
  }
  
  void ED_object_editmode_exit(bContext *C, int flag)
  {
-       WorkSpace *workspace = CTX_wm_workspace(C);
        Scene *scene = CTX_data_scene(C);
        Object *obedit = CTX_data_edit_object(C);
-       ED_object_editmode_exit_ex(C, workspace, scene, obedit, flag);
+       ED_object_editmode_exit_ex(C, scene, obedit, flag);
  }
  
- void ED_object_editmode_enter_ex(WorkSpace *workspace, Scene *scene, Object 
*ob, int flag)
 -void ED_object_editmode_enter(bContext *C, int flag)
++void ED_object_editmode_enter_ex(Scene *scene, Object *ob, int flag)
  {
 -      Scene *scene = CTX_data_scene(C);
 -      ViewLayer *view_layer = CTX_data_view_layer(C);
 -      Object *ob;
        bool ok = false;
  
 -      if (ID_IS_LINKED(scene)) return;
 -
 -      if ((flag & EM_IGNORE_LAYER) == 0) {
 -              ob = CTX_data_active_object(C); /* active layer checked here 
for view3d */
 -
 -              if (ob == NULL) return;
 -      }
 -      else {
 -              ob = view_layer->basact->object;
 -      }
 -
        if (ELEM(NULL, ob, ob->data)) return;
 +      if (ID_IS_LINKED(ob)) return;
  
        /* this checks actual object->data, for cases when other scenes have it 
in editmode context */
        if (BKE_object_is_in_editmode(ob))
@@@ -355,6 -364,15 +352,10 @@@
  
        if (flag & EM_WAITCURSOR) waitcursor(1);
  
+       ob->restore_mode = ob->mode;
+ 
 -      /* note, when switching scenes the object can have editmode data but
 -       * not be scene->obedit: bug 22954, this avoids calling self eternally 
*/
 -      if ((ob->restore_mode & OB_MODE_EDIT) == 0)
 -              ED_object_mode_toggle(C, ob->mode);
 -
+       ob->mode = OB_MODE_EDIT;
+ 
        if (ob->type == OB_MESH) {
                BMEditMesh *em;
                ok = 1;
@@@ -420,38 -438,16 +421,35 @@@
  
        if (ok) {
                DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
 -              /* This way we ensure scene's obedit is copied into all CoW 
scenes.  */
 -              DEG_id_tag_update(&scene->id, 0);
        }
        else {
 -              ob->mode &= ~OB_MODE_EDIT;
 -              WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, 
scene);
 +              if ((flag & EM_NO_CONTEXT) == 0) {
-                       workspace->object_mode &= ~OB_MODE_EDIT;
++                      ob->mode &= ~OB_MODE_EDIT;
 +              }
 +              WM_main_add_notifier(NC_SCENE | ND_MODE | NS_MODE_OBJECT, 
scene);
        }
  
-       ED_workspace_object_mode_sync_from_object(G.main->wm.first, workspace, 
ob);
- 
 -      if (flag & EM_DO_UNDO) ED_undo_push(C, "Enter Editmode");
        if (flag & EM_WAITCURSOR) waitcursor(0);
 +      BLI_assert((flag & EM_DO_UNDO) == 0);
 +}
 +
 +void ED_object_editmode_enter(bContext *C, int flag)
 +{
-       WorkSpace *workspace = CTX_wm_workspace(C);
 +      Scene *scene = CTX_data_scene(C);
 +      ViewLayer *view_layer = CTX_data_view_layer(C);
 +      Object *ob;
 +
 +      if ((flag & EM_IGNORE_LAYER) == 0) {
 +              ob = CTX_data_active_object(C); /* active layer checked here 
for view3d */
 +      }
 +      else {
 +              ob = view_layer->basact->object;
 +      }
 +      if (ob == NULL) return;
 +      if (ID_IS_LINKED(ob)) return;
 +
-       ED_object_editmode_enter_ex(workspace, scene, ob, flag & ~EM_DO_UNDO);
++      ED_object_editmode_enter_ex(scene, ob, flag & ~EM_DO_UNDO);
 +      if (flag & EM_DO_UNDO) ED_undo_push(C, "Enter Editmode");
  }
  
  static int editmode_toggle_exec(bContext *C, wmOperator *op)
@@@ -459,43 -455,18 +457,32 @@@
        const int mode_flag = OB_MODE_EDIT;
        const bool is_mode_set = (CTX_data_edit_object(C) != NULL);
        Scene *scene =  CTX_data_scene(C);
++      ViewLayer *view_layer = CTX_data_view_layer(C);
++      Object *obact = OBACT(view_layer);
  
        if (!is_mode_set) {
-               if (!ED_object_mode_compat_set(C, workspace, mode_flag, 
op->reports)) {
 -              Object *ob = CTX_data_active_object(C);
 -              if (!ED_object_mode_compat_set(C, ob, mode_flag, op->reports)) {
++              if (!ED_object_mode_compat_set(C, obact, mode_flag, 
op->reports)) {
                        return OPERATOR_CANCELLED;
                }
        }
  
 -      if (!is_mode_set)
 +      if (!is_mode_set) {
-               Object *obact = view_layer->basact->object;
- 
-               workspace->object_mode_restore = workspace->object_mode;
- 
-               /* note, when switching scenes the object can have editmode 
data but
-                * not be scene->obedit: bug 22954, this avoids calling self 
eternally */
-               if ((workspace->object_mode_restore & OB_MODE_EDIT) == 0) {
-                       ED_object_mode_toggle(C, workspace->object_mode);
-               }
-               workspace->object_mode = OB_MODE_EDIT;
- 
                ED_object_editmode_enter(C, EM_WAITCURSOR);
-               if (works

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to