[Bf-blender-cvs] [56314980ac6] soc-2019-outliner: Outliner: Add sync selection flag to main

Nathan Craddock noreply at git.blender.org
Sat Jun 22 07:08:47 CEST 2019


Commit: 56314980ac65f59b3e4b553bd157dc0efb40f472
Author: Nathan Craddock
Date:   Fri Jun 21 15:27:05 2019 -0600
Branches: soc-2019-outliner
https://developer.blender.org/rB56314980ac65f59b3e4b553bd157dc0efb40f472

Outliner: Add sync selection flag to main

The is_sync_select_dirty flag will be set after outliner and
3D viewport selection events to indicate a sync needs to occur.

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

M	source/blender/blenkernel/BKE_main.h
M	source/blender/editors/object/object_select.c
M	source/blender/windowmanager/intern/wm_event_system.c

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

diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index 1c987d5eb8e..18e36fd788f 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -81,6 +81,7 @@ typedef struct Main {
   char recovered;                  /* indicate the main->name (file) is the recovered one */
   /** All current ID's exist in the last memfile undo step. */
   char is_memfile_undo_written;
+  char is_sync_select_dirty;
 
   BlendThumbnail *blen_thumb;
 
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index afdda8d6b7f..c297514710e 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -50,6 +50,7 @@
 #include "BKE_collection.h"
 #include "BKE_context.h"
 #include "BKE_deform.h"
+#include "BKE_global.h"
 #include "BKE_layer.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
@@ -116,6 +117,9 @@ void ED_object_base_select(Base *base, eObjectSelect_Mode mode)
     }
     BKE_scene_object_base_flag_sync_from_base(base);
   }
+
+  /* Using globals to sync selection for now */
+  G_MAIN->is_sync_select_dirty = true;
 }
 
 /**
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index a95ccd65dff..7b483e31033 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -419,6 +419,26 @@ void wm_event_do_notifiers(bContext *C)
 
     CTX_wm_window_set(C, win);
 
+    ViewLayer *view_layer = CTX_data_view_layer(C);
+
+    /* This may need to be moved - A selection has occured */
+    if (G_MAIN->is_sync_select_dirty) {
+      /* Mark all outliners as dirty */
+      Main *bmain = CTX_data_main(C);
+      for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
+        for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+          for (SpaceLink *space = sa->spacedata.first; space; space = space->next) {
+            if (space->spacetype == SPACE_OUTLINER) {
+              SpaceOutliner *soutliner = (SpaceOutliner *)space;
+              /* Mark selection state as dirty */
+              soutliner->flag |= SO_IS_DIRTY;
+            }
+          }
+        }
+      }
+      G_MAIN->is_sync_select_dirty = false;
+    }
+
     for (note = wm->queue.first; note; note = next) {
       next = note->next;
 
@@ -483,7 +503,6 @@ void wm_event_do_notifiers(bContext *C)
         }
       }
       if (ELEM(note->category, NC_SCENE, NC_OBJECT, NC_GEOM, NC_WM)) {
-        ViewLayer *view_layer = CTX_data_view_layer(C);
         ED_info_stats_clear(view_layer);
         WM_event_add_notifier(C, NC_SPACE | ND_SPACE_INFO, NULL);
       }



More information about the Bf-blender-cvs mailing list