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>2019-06-28 11:47:47 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-06-28 12:38:44 +0300
commitf35ef57c8c4f218548926b49dbc950b056d8de4e (patch)
treeb10dd3080c1035853a623fba825e8091847b6194
parent6f0de2328c7bd587799a8c72d9db17029d2b9cb7 (diff)
Revert "Fix invalid area tool being set from message passing"
This reverts commit 9ec8887599b1c14dac47cca1a073fa50b333d5ee. Causes assert when selection changes modes.
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c12
-rw-r--r--source/blender/windowmanager/WM_toolsystem.h4
-rw-r--r--source/blender/windowmanager/intern/wm_toolsystem.c17
3 files changed, 32 insertions, 1 deletions
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index a90e59745be..c1891865d6d 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -980,7 +980,7 @@ static void view3d_main_region_message_subscribe(const struct bContext *C,
struct WorkSpace *UNUSED(workspace),
struct Scene *UNUSED(scene),
struct bScreen *UNUSED(screen),
- struct ScrArea *UNUSED(sa),
+ struct ScrArea *sa,
struct ARegion *ar,
struct wmMsgBus *mbus)
{
@@ -1054,6 +1054,16 @@ static void view3d_main_region_message_subscribe(const struct bContext *C,
break;
}
}
+
+ {
+ wmMsgSubscribeValue msg_sub_value_region_tag_refresh = {
+ .owner = ar,
+ .user_data = sa,
+ .notify = WM_toolsystem_do_msg_notify_tag_refresh,
+ };
+ WM_msg_subscribe_rna_anon_prop(mbus, Object, mode, &msg_sub_value_region_tag_refresh);
+ WM_msg_subscribe_rna_anon_prop(mbus, LayerObjects, active, &msg_sub_value_region_tag_refresh);
+ }
}
/* concept is to retrieve cursor type context-less */
diff --git a/source/blender/windowmanager/WM_toolsystem.h b/source/blender/windowmanager/WM_toolsystem.h
index 4d4cb95ec1c..5afa0a88560 100644
--- a/source/blender/windowmanager/WM_toolsystem.h
+++ b/source/blender/windowmanager/WM_toolsystem.h
@@ -99,6 +99,10 @@ void WM_toolsystem_update_from_context(struct bContext *C,
bool WM_toolsystem_active_tool_is_brush(const struct bContext *C);
+void WM_toolsystem_do_msg_notify_tag_refresh(struct bContext *C,
+ struct wmMsgSubscribeKey *msg_key,
+ struct wmMsgSubscribeValue *msg_val);
+
struct IDProperty *WM_toolsystem_ref_properties_ensure_idprops(struct bToolRef *tref);
void WM_toolsystem_ref_properties_ensure_ex(struct bToolRef *tref,
const char *idname,
diff --git a/source/blender/windowmanager/intern/wm_toolsystem.c b/source/blender/windowmanager/intern/wm_toolsystem.c
index 0ba640fd6cc..9ed1322ec63 100644
--- a/source/blender/windowmanager/intern/wm_toolsystem.c
+++ b/source/blender/windowmanager/intern/wm_toolsystem.c
@@ -794,6 +794,23 @@ bool WM_toolsystem_active_tool_is_brush(const bContext *C)
return tref_rt && (tref_rt->data_block[0] != '\0');
}
+/* Follow wmMsgNotifyFn spec */
+void WM_toolsystem_do_msg_notify_tag_refresh(bContext *C,
+ wmMsgSubscribeKey *UNUSED(msg_key),
+ wmMsgSubscribeValue *msg_val)
+{
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ ScrArea *sa = msg_val->user_data;
+ int space_type = sa->spacetype;
+ const bToolKey tkey = {
+ .space_type = space_type,
+ .mode = WM_toolsystem_mode_from_spacetype(view_layer, sa, sa->spacetype),
+ };
+ WM_toolsystem_refresh(C, workspace, &tkey);
+ WM_toolsystem_refresh_screen_area(workspace, view_layer, sa);
+}
+
IDProperty *WM_toolsystem_ref_properties_ensure_idprops(bToolRef *tref)
{
if (tref->properties == NULL) {