correctly track range selection trim and drag creation w.r.t playback priority
authorPaul Davis <paul@linuxaudiosystems.com>
Sat, 17 Jan 2015 17:40:46 +0000 (12:40 -0500)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 29 Jun 2015 18:18:13 +0000 (14:18 -0400)
gtk2_ardour/editor_drag.cc
gtk2_ardour/editor_selection.cc

index b079972a1b32f64493692f96360bafb6a08de3ac..99b8ff628385fc1a8566729ea84e2ab37075d992 100644 (file)
@@ -96,8 +96,6 @@ DragManager::abort ()
 {
        _ending = true;
 
-       cerr << "Aborting drag\n";
-
        for (list<Drag*>::const_iterator i = _drags.begin(); i != _drags.end(); ++i) {
                (*i)->abort ();
                delete *i;
@@ -4895,7 +4893,7 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred)
 
                /* XXX what if its a music time selection? */
                if (s) {
-                       if ( s->get_play_range() && s->transport_rolling() ) {
+                       if (s->get_play_range() && s->transport_rolling()) {
                                s->request_play_range (&_editor->selection->time, true);
                        } else {
                                if (ARDOUR_UI::config()->get_follow_edits() && !s->transport_rolling()) {
@@ -4905,8 +4903,14 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred)
                                                s->request_locate (_editor->get_selection().time.start());
                                }
                        }
-               }
 
+                       if (_editor->get_selection().time.length() != 0) {
+                               s->set_range_selection (_editor->get_selection().time.start(), _editor->get_selection().time.end_frame());
+                       } else {
+                               s->clear_range_selection ();
+                       }
+               }
+               
        } else {
                /* just a click, no pointer movement.
                 */
index 135f15da2953ee9e3283428fd1c5b369c9cfde7b..5bb777d7391ab2aed4a4f33dfd35c11b02a849ff 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "control_protocol/control_protocol.h"
 
+#include "editor_drag.h"
 #include "editor.h"
 #include "actions.h"
 #include "audio_time_axis.h"
@@ -1031,9 +1032,12 @@ Editor::time_selection_changed ()
                ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, true);
        }
 
-       /* propagate into backend */
+       /* propagate into backend, but only when there is no drag or we are at
+        * the end of a drag, otherwise this is too expensive (could case a
+        * locate per mouse motion event.
+        */
 
-       if (_session) {
+       if (_session && !_drags->active()) {
                if (selection->time.length() != 0) {
                        _session->set_range_selection (selection->time.start(), selection->time.end_frame());
                } else {