Fix (IRC reported) inverted behavior of select more/less in VSE.

Also, cleaned up a bit that code, and added releavnt entries in Select menu.

Reported on IRC by Leon Cheung, thanks!
This commit is contained in:
Bastien Montagne 2015-07-18 11:55:08 +02:00
parent bbed6af857
commit df4d25991e
2 changed files with 27 additions and 11 deletions

@ -244,6 +244,8 @@ class SEQUENCER_MT_select(Menu):
layout.separator() layout.separator()
layout.operator_menu_enum("sequencer.select_grouped", "type", text="Grouped") layout.operator_menu_enum("sequencer.select_grouped", "type", text="Grouped")
layout.operator("sequencer.select_linked") layout.operator("sequencer.select_linked")
layout.operator("sequencer.select_less")
layout.operator("sequencer.select_more")
layout.operator("sequencer.select_all").action = 'TOGGLE' layout.operator("sequencer.select_all").action = 'TOGGLE'
layout.operator("sequencer.select_all", text="Inverse").action = 'INVERT' layout.operator("sequencer.select_all", text="Inverse").action = 'INVERT'

@ -584,21 +584,35 @@ static bool select_more_less_seq__internal(Scene *scene, bool sel, const bool li
} }
for (seq = ed->seqbasep->first; seq; seq = seq->next) { for (seq = ed->seqbasep->first; seq; seq = seq->next) {
if ((int)(seq->flag & SELECT) == sel) { if ((seq->flag & SELECT) == sel) {
if ((linked == 0 && seq->tmp) == 0) { if (linked || (seq->tmp == NULL)) {
/* only get unselected nabours */ /* only get unselected neighbors */
neighbor = find_neighboring_sequence(scene, seq, SEQ_SIDE_LEFT, isel); neighbor = find_neighboring_sequence(scene, seq, SEQ_SIDE_LEFT, isel);
if (neighbor) { if (neighbor) {
if (sel) { neighbor->flag |= SELECT; recurs_sel_seq(neighbor); } if (sel) {
else neighbor->flag &= ~SELECT; neighbor->flag |= SELECT;
if (linked == 0) neighbor->tmp = (Sequence *)1; recurs_sel_seq(neighbor);
}
else {
neighbor->flag &= ~SELECT;
}
if (!linked) {
neighbor->tmp = (Sequence *)1;
}
changed = true; changed = true;
} }
neighbor = find_neighboring_sequence(scene, seq, SEQ_SIDE_RIGHT, isel); neighbor = find_neighboring_sequence(scene, seq, SEQ_SIDE_RIGHT, isel);
if (neighbor) { if (neighbor) {
if (sel) { neighbor->flag |= SELECT; recurs_sel_seq(neighbor); } if (sel) {
else neighbor->flag &= ~SELECT; neighbor->flag |= SELECT;
if (linked == 0) neighbor->tmp = (void *)1; recurs_sel_seq(neighbor);
}
else {
neighbor->flag &= ~SELECT;
}
if (!linked) {
neighbor->tmp = (Sequence *)1;
}
changed = true; changed = true;
} }
} }
@ -615,7 +629,7 @@ static int sequencer_select_more_exec(bContext *C, wmOperator *UNUSED(op))
{ {
Scene *scene = CTX_data_scene(C); Scene *scene = CTX_data_scene(C);
if (!select_more_less_seq__internal(scene, 0, 0)) if (!select_more_less_seq__internal(scene, true, false))
return OPERATOR_CANCELLED; return OPERATOR_CANCELLED;
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene); WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
@ -646,7 +660,7 @@ static int sequencer_select_less_exec(bContext *C, wmOperator *UNUSED(op))
{ {
Scene *scene = CTX_data_scene(C); Scene *scene = CTX_data_scene(C);
if (!select_more_less_seq__internal(scene, 1, 0)) if (!select_more_less_seq__internal(scene, false, false))
return OPERATOR_CANCELLED; return OPERATOR_CANCELLED;
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene); WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);