From 3dc748ab5c6ac9d1bbe96c3d0a0e92dafc32a0b8 Mon Sep 17 00:00:00 2001 From: Lucas Tadeu Teixeira Date: Mon, 6 Feb 2023 07:48:45 +0000 Subject: [PATCH 1/8] [Sequencer] Don't make undo items when an empty sequencer gets clicked If the sequencer receives a click event, it looks for items to select/deselect. When the sequencer is empty (i.e., there are no sequences), we would have the `deselect_all` variable set to `true` called `ED_sequencer_deselect_all` to select any existing sequences. The code just assumed that because the `deselect_all` flag was true and we called `ED_sequencer_deselect_all` that something changed. That's not true when the sequencer is empty. Changes made ------------ I've changed `ED_sequencer_deselect_all` to return a boolean value indicating whether or not it has mark any sequences for deselection. The `changed` variable is set to the value returned by `ED_sequencer_deselect_all`. When there are no sequences present, `changed` is false. Notes ----- I noticed that if I click and drag (Box selection) around the editor even when there are no sequences an empty Box selection undo item gets created. We can either update the parent task to get that fixed or create a new task. I'm gonna deal with that after this diff. Test plan: 1. Check-out this diff 2. Build blender 3. Open the Sequencer 4. Go to Edit > Undo History and confirm the history is empty 5. Click all over the Sequencer window 6. Go to Edit > Undo History and confirm the history is still empty Differential Revision: https://developer.blender.org/D17212 --- release/scripts/addons | 2 +- source/blender/editors/include/ED_sequencer.h | 8 +++++++- source/blender/editors/space_sequencer/sequencer_edit.c | 9 ++++++--- .../blender/editors/space_sequencer/sequencer_select.c | 6 ++++-- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/release/scripts/addons b/release/scripts/addons index b3f0ffc587d..48320b2d9f3 160000 --- a/release/scripts/addons +++ b/release/scripts/addons @@ -1 +1 @@ -Subproject commit b3f0ffc587d197b37eac9a1566d1d24b7bee7d9a +Subproject commit 48320b2d9f3d829c46ae4a6a6aab0bd94e80c830 diff --git a/source/blender/editors/include/ED_sequencer.h b/source/blender/editors/include/ED_sequencer.h index fe402b91b9c..96b933d9617 100644 --- a/source/blender/editors/include/ED_sequencer.h +++ b/source/blender/editors/include/ED_sequencer.h @@ -19,7 +19,13 @@ struct bContext; void ED_sequencer_select_sequence_single(struct Scene *scene, struct Sequence *seq, bool deselect_all); -void ED_sequencer_deselect_all(struct Scene *scene); +/** + * Iterates over a scene's sequences and deselects all of them. + * + * \param scene: scene containing sequences to be deselected. + * \return true if any sequences were deselected; false otherwise. + */ +bool ED_sequencer_deselect_all(struct Scene *scene); bool ED_space_sequencer_maskedit_mask_poll(struct bContext *C); bool ED_space_sequencer_check_show_maskedit(struct SpaceSeq *sseq, struct Scene *scene); diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index c74997def2a..d95e7f9cd89 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -2492,17 +2492,20 @@ void SEQUENCER_OT_copy(wmOperatorType *ot) /** \name Paste Operator * \{ */ -void ED_sequencer_deselect_all(Scene *scene) +bool ED_sequencer_deselect_all(Scene *scene) { Editing *ed = SEQ_editing_get(scene); - + bool any_deselected = false; + if (ed == NULL) { - return; + return any_deselected; } LISTBASE_FOREACH (Sequence *, seq, SEQ_active_seqbase_get(ed)) { seq->flag &= ~SEQ_ALLSEL; + any_deselected = true; } + return any_deselected; } static void sequencer_paste_animation(bContext *C) diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index 7f7e9878dd6..59f83b6c1e9 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -974,8 +974,10 @@ static int sequencer_select_exec(bContext *C, wmOperator *op) /* Deselect everything */ if (deselect_all || (seq && (extend == false && deselect == false && toggle == false))) { - ED_sequencer_deselect_all(scene); - changed = true; + // changed will be true if any sequences otherwise. If there were no sequences to deselect, changed is false. + // This is done to prevent undo items from being created when an empty sequencer is selected. + // See T94080 for details. + changed = ED_sequencer_deselect_all(scene); } /* Nothing to select, but strips could be deselected. */ -- 2.30.2 From d71e6c9ee2f8d70fc1c84713f04ea8302a733d8e Mon Sep 17 00:00:00 2001 From: Lucas Tadeu Teixeira Date: Mon, 6 Feb 2023 08:23:35 +0000 Subject: [PATCH 2/8] Fix comment typo --- source/blender/editors/space_sequencer/sequencer_select.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index 59f83b6c1e9..ce8755bc1d8 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -974,8 +974,8 @@ static int sequencer_select_exec(bContext *C, wmOperator *op) /* Deselect everything */ if (deselect_all || (seq && (extend == false && deselect == false && toggle == false))) { - // changed will be true if any sequences otherwise. If there were no sequences to deselect, changed is false. - // This is done to prevent undo items from being created when an empty sequencer is selected. + // 'changed' will be true if any sequences were deselected. Otherwise, it'll be false. + // This is done to prevent undo items from being created when an empty sequencer is clicked. // See T94080 for details. changed = ED_sequencer_deselect_all(scene); } -- 2.30.2 From fed65c6336824dd6c0f51e397bc3821aa91d118d Mon Sep 17 00:00:00 2001 From: Lucas Tadeu Teixeira Date: Wed, 8 Feb 2023 19:15:50 +0000 Subject: [PATCH 3/8] Rename any_deselected to changed --- source/blender/editors/space_sequencer/sequencer_edit.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index d95e7f9cd89..190df93d1f7 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -2495,17 +2495,17 @@ void SEQUENCER_OT_copy(wmOperatorType *ot) bool ED_sequencer_deselect_all(Scene *scene) { Editing *ed = SEQ_editing_get(scene); - bool any_deselected = false; + bool changed = false; if (ed == NULL) { - return any_deselected; + return changed; } LISTBASE_FOREACH (Sequence *, seq, SEQ_active_seqbase_get(ed)) { seq->flag &= ~SEQ_ALLSEL; - any_deselected = true; + changed = true; } - return any_deselected; + return changed; } static void sequencer_paste_animation(bContext *C) -- 2.30.2 From 27e229f9742531630228059c03d32e95aa06369f Mon Sep 17 00:00:00 2001 From: Lucas Tadeu Teixeira Date: Wed, 8 Feb 2023 19:16:23 +0000 Subject: [PATCH 4/8] Remove redundant comment about the 'changed' variable --- source/blender/editors/space_sequencer/sequencer_select.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index ce8755bc1d8..ccc2de87b9f 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -974,9 +974,8 @@ static int sequencer_select_exec(bContext *C, wmOperator *op) /* Deselect everything */ if (deselect_all || (seq && (extend == false && deselect == false && toggle == false))) { - // 'changed' will be true if any sequences were deselected. Otherwise, it'll be false. - // This is done to prevent undo items from being created when an empty sequencer is clicked. - // See T94080 for details. + /* This is done to prevent undo items from being created when an empty sequencer is clicked. + * See T94080 for details. */ changed = ED_sequencer_deselect_all(scene); } -- 2.30.2 From 8ddad0fecf3bf8ae93410ac7cda09a12135cbff1 Mon Sep 17 00:00:00 2001 From: Lucas Tadeu Teixeira Date: Wed, 8 Feb 2023 19:24:35 +0000 Subject: [PATCH 5/8] Only set changed to true when the sequence's flag changes --- release/datafiles/locale | 2 +- release/scripts/addons | 2 +- source/blender/editors/space_sequencer/sequencer_edit.c | 6 ++++-- source/tools | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/release/datafiles/locale b/release/datafiles/locale index 4331c8e76c2..547a54b294f 160000 --- a/release/datafiles/locale +++ b/release/datafiles/locale @@ -1 +1 @@ -Subproject commit 4331c8e76c2f42b9fd903716c333d6cdeaa5cebd +Subproject commit 547a54b294f32ee11bce73273c6f183d8b235f92 diff --git a/release/scripts/addons b/release/scripts/addons index 48320b2d9f3..7d80f2f9716 160000 --- a/release/scripts/addons +++ b/release/scripts/addons @@ -1 +1 @@ -Subproject commit 48320b2d9f3d829c46ae4a6a6aab0bd94e80c830 +Subproject commit 7d80f2f97161fc8e353a657b179b9aa1f8e5280b diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 190df93d1f7..ca17e351080 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -2502,8 +2502,10 @@ bool ED_sequencer_deselect_all(Scene *scene) } LISTBASE_FOREACH (Sequence *, seq, SEQ_active_seqbase_get(ed)) { - seq->flag &= ~SEQ_ALLSEL; - changed = true; + if (seq->flag & SEQ_ALLSEL) { + seq->flag &= ~SEQ_ALLSEL; + changed = true; + } } return changed; } diff --git a/source/tools b/source/tools index e133fc08cd3..baa9ba04050 160000 --- a/source/tools +++ b/source/tools @@ -1 +1 @@ -Subproject commit e133fc08cd3254bb3d3bd1345028c8486700bca4 +Subproject commit baa9ba0405081bde968e4d340971b62e1464e816 -- 2.30.2 From f05f59b9a13fdc855883b6b14a8db490a487d4dc Mon Sep 17 00:00:00 2001 From: Lucas Tadeu Teixeira Date: Wed, 8 Feb 2023 19:26:39 +0000 Subject: [PATCH 6/8] Fix spacing --- source/blender/editors/space_sequencer/sequencer_edit.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index ca17e351080..21d998c05f4 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -2502,10 +2502,10 @@ bool ED_sequencer_deselect_all(Scene *scene) } LISTBASE_FOREACH (Sequence *, seq, SEQ_active_seqbase_get(ed)) { - if (seq->flag & SEQ_ALLSEL) { - seq->flag &= ~SEQ_ALLSEL; - changed = true; - } + if (seq->flag & SEQ_ALLSEL) { + seq->flag &= ~SEQ_ALLSEL; + changed = true; + } } return changed; } -- 2.30.2 From 2b797f8cb6d5ed4edfe7bc0d4507caad65272883 Mon Sep 17 00:00:00 2001 From: Lucas Tadeu Teixeira Date: Thu, 9 Feb 2023 05:21:42 +0000 Subject: [PATCH 7/8] Completely remove comment before call to ED_sequencer_select_all --- source/blender/editors/space_sequencer/sequencer_select.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index ccc2de87b9f..d771f680273 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -974,8 +974,6 @@ static int sequencer_select_exec(bContext *C, wmOperator *op) /* Deselect everything */ if (deselect_all || (seq && (extend == false && deselect == false && toggle == false))) { - /* This is done to prevent undo items from being created when an empty sequencer is clicked. - * See T94080 for details. */ changed = ED_sequencer_deselect_all(scene); } -- 2.30.2 From 27e1f16d400f50c89d69aeb5f989ad632c4dd9e3 Mon Sep 17 00:00:00 2001 From: Lucas Tadeu Teixeira Date: Thu, 9 Feb 2023 07:26:44 +0000 Subject: [PATCH 8/8] Or-assign result of calling ED_sequencer_deselect_all to changed --- source/blender/editors/space_sequencer/sequencer_select.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index d771f680273..a8c0e2b5d22 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -974,7 +974,7 @@ static int sequencer_select_exec(bContext *C, wmOperator *op) /* Deselect everything */ if (deselect_all || (seq && (extend == false && deselect == false && toggle == false))) { - changed = ED_sequencer_deselect_all(scene); + changed |= ED_sequencer_deselect_all(scene); } /* Nothing to select, but strips could be deselected. */ -- 2.30.2