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:
authorRobert Guetzkow <gitcommit@outlook.de>2020-10-13 00:55:40 +0300
committerRobert Guetzkow <gitcommit@outlook.de>2020-10-13 02:17:36 +0300
commit8427e02abc5e7963cee14e15bc9a1c78c95d28e6 (patch)
tree5bda7dd3f5c7ef2b273674391c7bd5c1219aabe8 /source/blender/editors/space_outliner/outliner_dragdrop.c
parentdc71ad062408b138cc174f348d833b244d098a8f (diff)
Fix T81589: Correct drag type handling in outliner
Blender crashed when dragging and dropping color into the outliner. This issue was cause by a missing check for the correct drag type in `datastack_drop_poll`. The check is added in this commit. Additionally, a new drag type is introduced for the "data stack" drag option, that was introduced in commit 1572da858df4, to differentiate it from the existing WM_DRAG_ID type. Reviewed By: Severin Differential Revision: https://developer.blender.org/D9169
Diffstat (limited to 'source/blender/editors/space_outliner/outliner_dragdrop.c')
-rw-r--r--source/blender/editors/space_outliner/outliner_dragdrop.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/source/blender/editors/space_outliner/outliner_dragdrop.c b/source/blender/editors/space_outliner/outliner_dragdrop.c
index cbe6887f66e..6c0975498e0 100644
--- a/source/blender/editors/space_outliner/outliner_dragdrop.c
+++ b/source/blender/editors/space_outliner/outliner_dragdrop.c
@@ -847,6 +847,10 @@ static bool datastack_drop_poll(bContext *C,
const wmEvent *event,
const char **r_tooltip)
{
+ if (drag->type != WM_DRAG_DATASTACK) {
+ return false;
+ }
+
SpaceOutliner *space_outliner = CTX_wm_space_outliner(C);
ARegion *region = CTX_wm_region(C);
bool changed = outliner_flag_set(&space_outliner->tree, TSE_HIGHLIGHTED | TSE_DRAG_ANY, false);
@@ -1363,16 +1367,18 @@ static int outliner_item_drag_drop_invoke(bContext *C,
WM_operator_properties_free(&op_ptr);
}
- wmDrag *drag = WM_event_start_drag(C, data.icon, WM_DRAG_ID, NULL, 0.0, WM_DRAG_NOP);
+ const bool use_datastack_drag = ELEM(tselem->type,
+ TSE_MODIFIER,
+ TSE_MODIFIER_BASE,
+ TSE_CONSTRAINT,
+ TSE_CONSTRAINT_BASE,
+ TSE_GPENCIL_EFFECT,
+ TSE_GPENCIL_EFFECT_BASE);
- if (ELEM(tselem->type,
- TSE_MODIFIER,
- TSE_MODIFIER_BASE,
- TSE_CONSTRAINT,
- TSE_CONSTRAINT_BASE,
- TSE_GPENCIL_EFFECT,
- TSE_GPENCIL_EFFECT_BASE)) {
+ const int wm_drag_type = use_datastack_drag ? WM_DRAG_DATASTACK : WM_DRAG_ID;
+ wmDrag *drag = WM_event_start_drag(C, data.icon, wm_drag_type, NULL, 0.0, WM_DRAG_NOP);
+ if (use_datastack_drag) {
TreeElement *te_bone = NULL;
bPoseChannel *pchan = outliner_find_parent_bone(te, &te_bone);
datastack_drop_data_init(drag, (Object *)tselem->id, pchan, te, tselem, te->directdata);