Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-03-03 08:39:57 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-03-03 08:39:57 +0300
commit8d575899a17f12681beb9bdb3f7d3005d6d12103 (patch)
treecfe94562589ae081d939623196373e296a270199 /source/blender/editors/object
parentb8f7538348e6ff37d960cd933562d1f5ff15241c (diff)
WorkSpace: use existing mode data w/ scene-switch
Check if mode data exists before attempting to change the modes.
Diffstat (limited to 'source/blender/editors/object')
-rw-r--r--source/blender/editors/object/object_modes.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/source/blender/editors/object/object_modes.c b/source/blender/editors/object/object_modes.c
index 33867a9f33e..33b9ea49ec0 100644
--- a/source/blender/editors/object/object_modes.c
+++ b/source/blender/editors/object/object_modes.c
@@ -255,7 +255,7 @@ bool ED_object_mode_generic_has_data(
* 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)
+ struct bContext *C, const wmWindow *win_compare, eObjectMode object_mode)
{
WorkSpace *workspace = CTX_wm_workspace(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
@@ -267,9 +267,7 @@ bool ED_object_mode_generic_enter_or_other_window(
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;
+ bool use_object_mode = ED_workspace_object_mode_in_other_window(wm, win_compare, basact->object, &object_mode_set);
if (use_object_mode) {
workspace->object_mode = object_mode_set;
@@ -294,4 +292,27 @@ void ED_object_mode_generic_exit_or_other_window(
}
}
+/**
+ * Use to find if we need to create the mode-data.
+ *
+ * When the mode 'exists' it means we have a windowing showing an object with this mode.
+ * So it's data is already created.
+ * Used to check if we need to perform mode switching.
+ */
+bool ED_object_mode_generic_exists(
+ wmWindowManager *wm, struct Object *ob,
+ eObjectMode object_mode)
+{
+ if (ob == NULL) {
+ return false;
+ }
+ eObjectMode object_mode_test;
+ if (ED_workspace_object_mode_in_other_window(wm, NULL, ob, &object_mode_test)) {
+ if (object_mode == object_mode_test) {
+ return true;
+ }
+ }
+ return false;
+}
+
/** \} */