コード例 #1
0
ファイル: memfile_undo.c プロジェクト: dfelinto/blender
static void memfile_undosys_step_decode(struct bContext *C,
                                        struct Main *bmain,
                                        UndoStep *us_p,
                                        int UNUSED(dir))
{
  ED_editors_exit(bmain, false);

  MemFileUndoStep *us = (MemFileUndoStep *)us_p;
  BKE_memfile_undo_decode(us->data, C);

  for (UndoStep *us_iter = us_p->next; us_iter; us_iter = us_iter->next) {
    if (BKE_UNDOSYS_TYPE_IS_MEMFILE_SKIP(us_iter->type)) {
      continue;
    }
    us_iter->is_applied = false;
  }
  for (UndoStep *us_iter = us_p; us_iter; us_iter = us_iter->prev) {
    if (BKE_UNDOSYS_TYPE_IS_MEMFILE_SKIP(us_iter->type)) {
      continue;
    }
    us_iter->is_applied = true;
  }

  /* bmain has been freed. */
  bmain = CTX_data_main(C);
  ED_editors_init_for_undo(bmain);

  WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, CTX_data_scene(C));
}
コード例 #2
0
ファイル: memfile_undo.c プロジェクト: Ichthyostega/blender
static void memfile_undosys_step_decode(struct bContext *C, UndoStep *us_p, int UNUSED(dir))
{
	/* Loading the content will correctly switch into compatible non-object modes. */
	ED_object_mode_set(C, OB_MODE_OBJECT);

	/* This is needed so undoing/redoing doesn't crash with threaded previews going */
	ED_viewport_render_kill_jobs(CTX_wm_manager(C), CTX_data_main(C), true);
	MemFileUndoStep *us = (MemFileUndoStep *)us_p;
	BKE_memfile_undo_decode(us->data, C);

	WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, CTX_data_scene(C));
}