[Bf-blender-cvs] [9515737b554] blender2.8: Fix missing refresh of editors when changing workspace view-layer

Julian Eisel noreply at git.blender.org
Fri Dec 15 16:10:05 CET 2017


Commit: 9515737b5542ea78b452a4623fe95fd9e1e2c53b
Author: Julian Eisel
Date:   Fri Dec 15 15:46:42 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB9515737b5542ea78b452a4623fe95fd9e1e2c53b

Fix missing refresh of editors when changing workspace view-layer

Needs to use new messaging system.

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

M	source/blender/editors/space_buttons/space_buttons.c
M	source/blender/editors/space_outliner/space_outliner.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/makesrna/intern/rna_wm.c

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

diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c
index d2f407bfa8c..878feb81e8a 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -225,6 +225,23 @@ static void buttons_header_region_draw(const bContext *C, ARegion *ar)
 	ED_region_header(C, ar);
 }
 
+static void buttons_header_region_message_subscribe(
+        const struct bContext *UNUSED(C),
+        struct WorkSpace *UNUSED(workspace), struct Scene *UNUSED(scene),
+        struct bScreen *UNUSED(screen), struct ScrArea *UNUSED(sa), struct ARegion *ar,
+        struct wmMsgBus *mbus)
+{
+	wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
+		.owner = ar,
+		.user_data = ar,
+		.notify = ED_region_do_msg_notify_tag_redraw,
+	};
+
+	/* Don't check for SpaceButs.mainb here, we may toggle between view-layers
+	 * where one has no active object, so that available contexts changes. */
+	WM_msg_subscribe_rna_anon_prop(mbus, Window, view_layer, &msg_sub_value_region_tag_redraw);
+}
+
 /* draw a certain button set only if properties area is currently
  * showing that button set, to reduce unnecessary drawing. */
 static void buttons_area_redraw(ScrArea *sa, short buttons)
@@ -503,6 +520,7 @@ void ED_spacetype_buttons(void)
 	
 	art->init = buttons_header_region_init;
 	art->draw = buttons_header_region_draw;
+	art->message_subscribe = buttons_header_region_message_subscribe;
 	BLI_addhead(&st->regiontypes, art);
 
 	BKE_spacetype_register(st);
diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c
index 1bc1a227a03..ee86bddefa7 100644
--- a/source/blender/editors/space_outliner/space_outliner.c
+++ b/source/blender/editors/space_outliner/space_outliner.c
@@ -48,6 +48,7 @@
 #include "ED_screen.h"
 
 #include "WM_api.h"
+#include "WM_message.h"
 #include "WM_types.h"
 
 #include "BIF_gl.h"
@@ -423,6 +424,24 @@ static void outliner_main_region_listener(
 	
 }
 
+static void outliner_main_region_message_subscribe(
+        const struct bContext *UNUSED(C),
+        struct WorkSpace *UNUSED(workspace), struct Scene *UNUSED(scene),
+        struct bScreen *UNUSED(screen), struct ScrArea *sa, struct ARegion *ar,
+        struct wmMsgBus *mbus)
+{
+	SpaceOops *soops = sa->spacedata.first;
+	wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
+		.owner = ar,
+		.user_data = ar,
+		.notify = ED_region_do_msg_notify_tag_redraw,
+	};
+
+	if (ELEM(soops->outlinevis, SO_ACT_LAYER, SO_COLLECTIONS)) {
+		WM_msg_subscribe_rna_anon_prop(mbus, Window, view_layer, &msg_sub_value_region_tag_redraw);
+	}
+}
+
 
 /* ************************ header outliner area region *********************** */
 
@@ -576,6 +595,7 @@ void ED_spacetype_outliner(void)
 	art->draw = outliner_main_region_draw;
 	art->free = outliner_main_region_free;
 	art->listener = outliner_main_region_listener;
+	art->message_subscribe = outliner_main_region_message_subscribe;
 	BLI_addhead(&st->regiontypes, art);
 	
 	/* regions: header */
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 728547e7a40..984ab82ee60 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -1073,6 +1073,8 @@ static void view3d_main_region_message_subscribe(
 
 	/* Only subscribe to types. */
 	StructRNA *type_array[] = {
+		&RNA_Window,
+
 		/* These object have properties that impact drawing. */
 		&RNA_AreaLamp,
 		&RNA_Camera,
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 36f07db727b..d25888e0f93 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -763,10 +763,8 @@ static PointerRNA rna_Window_view_layer_get(PointerRNA *ptr)
 	Scene *scene = WM_window_get_active_scene(win);
 	WorkSpace *workspace = WM_window_get_active_workspace(win);
 	ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene);
-	PointerRNA scene_ptr;
 
-	RNA_id_pointer_create(&scene->id, &scene_ptr);
-	return rna_pointer_inherit_refine(&scene_ptr, &RNA_ViewLayer, view_layer);
+	return rna_pointer_inherit_refine(ptr, &RNA_ViewLayer, view_layer);
 }
 
 static void rna_Window_view_layer_set(PointerRNA *ptr, PointerRNA value)



More information about the Bf-blender-cvs mailing list