diff --git a/source/blender/editors/animation/anim_ops.cc b/source/blender/editors/animation/anim_ops.cc index 43b627fed75..af10b3c0f50 100644 --- a/source/blender/editors/animation/anim_ops.cc +++ b/source/blender/editors/animation/anim_ops.cc @@ -156,7 +156,10 @@ static void ensure_change_frame_keylist(bContext *C, FrameChangeModalData &op_da /* Special case for the sequencer since it has retiming keys, but those have no bAnimListElem * representation. Need to manually add entries to keylist. */ op_data.keylist = ED_keylist_create(); - Scene *scene = CTX_data_scene(C); + Scene *scene = CTX_data_sequencer_scene(C); + if (!scene) { + return; + } ListBase *seqbase = blender::seq::active_seqbase_get(blender::seq::editing_get(scene)); LISTBASE_FOREACH (Strip *, strip, seqbase) { @@ -355,13 +358,22 @@ static blender::Vector seq_get_snap_targets(bContext *C, FrameChangeModalData &op_data, const float timeline_frame) { - Scene *scene = CTX_data_scene(C); + Scene *scene = CTX_data_sequencer_scene(C); + if (!scene) { + return {}; + } + ToolSettings *tool_settings = scene->toolsettings; + Editing *ed = blender::seq::editing_get(scene); + + if (ed == nullptr) { + return {}; + } blender::Vector targets; if (tool_settings->snap_playhead_mode & SCE_SNAP_TO_STRIPS) { - ListBase *seqbase = blender::seq::active_seqbase_get(blender::seq::editing_get(scene)); + ListBase *seqbase = blender::seq::active_seqbase_get(ed); append_sequencer_strip_snap_target( blender::seq::query_all_strips(seqbase), scene, timeline_frame, targets); } @@ -476,7 +488,12 @@ static float apply_frame_snap(bContext *C, FrameChangeModalData &op_data, const ScrArea *area = CTX_wm_area(C); blender::Vector targets; - Scene *scene = CTX_data_scene(C); + const bool is_sequencer = CTX_wm_space_seq(C) != nullptr; + Scene *scene = is_sequencer ? CTX_data_sequencer_scene(C) : CTX_data_scene(C); + if (!scene) { + return frame; + } + switch (area->spacetype) { case SPACE_SEQ: targets = seq_get_snap_targets(C, op_data, frame); @@ -618,7 +635,12 @@ static void change_frame_seq_preview_end(SpaceSeq *sseq) static bool use_playhead_snapping(bContext *C) { - Scene *scene = CTX_data_scene(C); + const bool is_sequencer = CTX_wm_space_seq(C) != nullptr; + Scene *scene = is_sequencer ? CTX_data_sequencer_scene(C) : CTX_data_scene(C); + if (!scene) { + return false; + } + ScrArea *area = CTX_wm_area(C); if (area->spacetype == SPACE_GRAPH) {