[Bf-blender-cvs] [63ecc052568] temp-vse-preview-transform: Mostly finish

Richard Antalik noreply at git.blender.org
Mon Aug 30 00:01:28 CEST 2021


Commit: 63ecc052568dba1c498ce95272000532e9b13098
Author: Richard Antalik
Date:   Fri Aug 27 06:51:22 2021 +0200
Branches: temp-vse-preview-transform
https://developer.blender.org/rB63ecc052568dba1c498ce95272000532e9b13098

Mostly finish

===================================================================

M	source/blender/editors/space_sequencer/sequencer_select.c

===================================================================

diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c
index 69138b8adf3..fef77003988 100644
--- a/source/blender/editors/space_sequencer/sequencer_select.c
+++ b/source/blender/editors/space_sequencer/sequencer_select.c
@@ -504,8 +504,25 @@ void SEQUENCER_OT_select_inverse(struct wmOperatorType *ot)
 /** \name Select Operator
  * \{ */
 
-static void sequencer_select_do_updates(bContext *C, Scene *scene)
+static void sequencer_select_do_updates(bContext *C, Scene *scene, Sequence *seq)
 {
+  Editing *ed = SEQ_editing_get(scene, false);
+  if (seq) {
+    SEQ_select_active_set(scene, seq);
+
+    if (ELEM(seq->type, SEQ_TYPE_IMAGE, SEQ_TYPE_MOVIE)) {
+      if (seq->strip) {
+        BLI_strncpy(ed->act_imagedir, seq->strip->dir, FILE_MAXDIR);
+      }
+    }
+    else if (seq->type == SEQ_TYPE_SOUND_RAM) {
+      if (seq->strip) {
+        BLI_strncpy(ed->act_sounddir, seq->strip->dir, FILE_MAXDIR);
+      }
+    }
+    recurs_sel_seq(seq);
+  }
+
   ED_outliner_select_sync_from_sequence_tag(C);
   WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
 }
@@ -602,21 +619,23 @@ static void sequencer_select_linked_handle(
   }
 }
 
+static bool element_already_selected(const Sequence *seq, const int handle_clicked)
+{
+  const bool handle_already_selected = ((handle_clicked == SEQ_SIDE_LEFT) &&
+                                        (seq->flag & SEQ_LEFTSEL)) ||
+                                       ((handle_clicked == SEQ_SIDE_RIGHT) &&
+                                        (seq->flag & SEQ_RIGHTSEL));
+  bool element_already_selected = (seq->flag & SELECT);
+  element_already_selected &= (handle_clicked == SEQ_SIDE_NONE || handle_already_selected);
+  return element_already_selected;
+}
+
 static int sequencer_select_exec(bContext *C, wmOperator *op)
 {
   View2D *v2d = UI_view2d_fromcontext(C);
   Scene *scene = CTX_data_scene(C);
   Editing *ed = SEQ_editing_get(scene, false);
   const bool extend = RNA_boolean_get(op->ptr, "extend");
-  const bool deselect_all = RNA_boolean_get(op->ptr, "deselect_all");
-  const bool linked_handle = RNA_boolean_get(op->ptr, "linked_handle");
-  const bool linked_time = RNA_boolean_get(op->ptr, "linked_time");
-  bool side_of_frame = RNA_boolean_get(op->ptr, "side_of_frame");
-  bool wait_to_deselect_others = RNA_boolean_get(op->ptr, "wait_to_deselect_others");
-
-  if (extend) {
-    wait_to_deselect_others = false;  // XXX this is explicitly defined later on
-  }
 
   if (ed == NULL) {
     return OPERATOR_CANCELLED;
@@ -629,114 +648,89 @@ static int sequencer_select_exec(bContext *C, wmOperator *op)
   int handle_clicked;
   Sequence *seq = find_nearest_seq(scene, v2d, &handle_clicked, mval);
 
-  /* XXX: not nice, Ctrl+RMB needs to do side_of_frame only when not over a strip. XXX ?????? */
-  if (seq && linked_time) {
-    side_of_frame = false;
+  /* Note: `side_of_frame` and `linked_time` functionality is designed to be shared on one keymap,
+   * therefore both properties can be true at the same time. */
+  if (seq && RNA_boolean_get(op->ptr, "linked_time")) {
+    if (!extend) {
+      ED_sequencer_deselect_all(scene);
+    }
+    select_linked_time(ed->seqbasep, seq);
+    sequencer_select_do_updates(C, scene, seq);
+    return OPERATOR_FINISHED;
   }
 
-  /***************************************************************************************/
-
-  /* Select left, right or overlapping the current frame.
-   * XXX isn't this duplicate functionality of sequencer_select_side_of_frame_exec? Jeez...*/
-  if (side_of_frame) {
-    /* Use different logic for this. XXX ??? */
+  /* Select left, right or overlapping the current frame. */
+  if (RNA_boolean_get(op->ptr, "side_of_frame")) {
     if (!extend) {
       ED_sequencer_deselect_all(scene);
     }
-    /* Logic. */
     sequencer_select_side_of_frame(C, v2d, mval, scene);
-    sequencer_select_do_updates(C, scene);
+    sequencer_select_do_updates(C, scene, NULL);
     return OPERATOR_FINISHED;
   }
 
-  /* Deselect all. */
-  if (!seq && deselect_all) { /* XXX Why on earth do we consider seq here? */
-    ED_sequencer_deselect_all(scene);
-    sequencer_select_do_updates(C, scene);
+  /* On Alt selection, select the strip and bordering handles. */
+  if (seq && RNA_boolean_get(op->ptr, "linked_handle")) {
+    if (!extend) {
+      ED_sequencer_deselect_all(scene);
+    }
+    sequencer_select_linked_handle(C, v2d, seq, handle_clicked, scene);
+    sequencer_select_do_updates(C, scene, seq);
     return OPERATOR_FINISHED;
   }
 
-  if (!seq) {
-    return OPERATOR_CANCELLED;
-  }
-
-  Sequence *act_orig = ed->act_seq;
-  SEQ_select_active_set(scene, seq);
-
-  if (ELEM(seq->type, SEQ_TYPE_IMAGE, SEQ_TYPE_MOVIE)) {
-    if (seq->strip) {
-      BLI_strncpy(ed->act_imagedir, seq->strip->dir, FILE_MAXDIR);
-    }
-  }
-  else if (seq->type == SEQ_TYPE_SOUND_RAM) {
-    if (seq->strip) {
-      BLI_strncpy(ed->act_sounddir, seq->strip->dir, FILE_MAXDIR);
-    }
+  bool wait_to_deselect_others = RNA_boolean_get(op->ptr, "wait_to_deselect_others");
+  if (extend) {
+    wait_to_deselect_others = false;
   }
 
-  /* XXX this may not be intended as it was explicitly defined as OPERATOR_CANCELLED, but in next
-   * condition it was set to OPERATOR_FINISHED in both control paths, so go figure... */
-  int ret_value = OPERATOR_FINISHED;
-
-  const bool handle_already_selected = ((handle_clicked == SEQ_SIDE_LEFT) &&
-                                        (seq->flag & SEQ_LEFTSEL)) ||
-                                       ((handle_clicked == SEQ_SIDE_RIGHT) &&
-                                        (seq->flag & SEQ_RIGHTSEL));
-  bool element_already_selected = (seq->flag & SELECT);
-  element_already_selected &= (handle_clicked == SEQ_SIDE_NONE || handle_already_selected);
-
   /* Clicking on already selected element falls on modal operation.
    * All strips are deselected on mouse button release unless extend mode is used. */
-  if (wait_to_deselect_others && element_already_selected) {
+  if (seq && wait_to_deselect_others && element_already_selected(seq, handle_clicked)) {
     return OPERATOR_RUNNING_MODAL;
   }
-  else if (!extend) {
+
+  int ret_value = OPERATOR_CANCELLED;
+
+  if (!extend) {
     ED_sequencer_deselect_all(scene);
     ret_value = OPERATOR_FINISHED;
   }
 
-  /***************************************************************************************/
-  /* On Alt selection, select the strip and bordering handles. */
-  if (linked_handle) {
-    sequencer_select_linked_handle(C, v2d, seq, handle_clicked, scene);
+  /* Nothing to select, but strips could be deselected. */
+  if (!seq) {
+    sequencer_select_do_updates(C, scene, NULL);
+    return ret_value;
+  }
+
+  /* Deselect strip. */
+  if (extend && (seq->flag & SELECT) && ed->act_seq == seq) {
+    switch (handle_clicked) {
+      case SEQ_SIDE_NONE:
+        seq->flag &= ~SEQ_ALLSEL;
+        break;
+      case SEQ_SIDE_LEFT:
+        seq->flag ^= SEQ_LEFTSEL;
+        break;
+      case SEQ_SIDE_RIGHT:
+        seq->flag ^= SEQ_RIGHTSEL;
+        break;
+    }
     ret_value = OPERATOR_FINISHED;
   }
-  else { /* XXX I have no idea which of 2^6 cases applies here :( */
-    if (extend && (seq->flag & SELECT) && ed->act_seq == act_orig) {
-      switch (handle_clicked) {
-        case SEQ_SIDE_NONE:
-          if (linked_handle == 0) {
-            seq->flag &= ~SEQ_ALLSEL;
-          }
-          break;
-        case SEQ_SIDE_LEFT:
-          seq->flag ^= SEQ_LEFTSEL;
-          break;
-        case SEQ_SIDE_RIGHT:
-          seq->flag ^= SEQ_RIGHTSEL;
-          break;
-      }
-      ret_value = OPERATOR_FINISHED;
+  else { /* Select strip. */
+    seq->flag |= SELECT;
+    if (handle_clicked == SEQ_SIDE_LEFT) {
+      seq->flag |= SEQ_LEFTSEL;
     }
-    else {
-      seq->flag |= SELECT;
-      if (handle_clicked == SEQ_SIDE_LEFT) {
-        seq->flag |= SEQ_LEFTSEL;
-      }
-      if (handle_clicked == SEQ_SIDE_RIGHT) {
-        seq->flag |= SEQ_RIGHTSEL;
-      }
+    if (handle_clicked == SEQ_SIDE_RIGHT) {
+      seq->flag |= SEQ_RIGHTSEL;
     }
-  }
-
-  recurs_sel_seq(seq); /* XXX should not be needed anymore (probably never was?) */
-
-  if (linked_time) {
-    select_linked_time(ed->seqbasep, seq);
+    ret_value = OPERATOR_FINISHED;
   }
 
   BLI_assert((ret_value & OPERATOR_CANCELLED) == 0);
-  sequencer_select_do_updates(C, scene);
+  sequencer_select_do_updates(C, scene, seq);
   return ret_value;
 }
 
@@ -764,13 +758,6 @@ void SEQUENCER_OT_select(wmOperatorType *ot)
   prop = RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend the selection");
   RNA_def_property_flag(prop, PROP_SKIP_SAVE);
 
-  prop = RNA_def_boolean(ot->srna,
-                         "deselect_all",
-                         false,
-                         "Deselect On Nothing",
-                         "Deselect all when nothing under the cursor");
-  RNA_def_property_flag(prop, PROP_SKIP_SAVE);
-
   prop = RNA_def_boolean(ot->srna,
                          "linked_handle",
                          false,



More information about the Bf-blender-cvs mailing list