diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 270593f8e6..1495a3b42c 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -7034,17 +7034,10 @@ Editor::start_track_drag (TimeAxisView& tav, int y, Gtk::Widget& w) { track_drag = new TrackDrag (dynamic_cast (&tav), *_session); DEBUG_TRACE (DEBUG::TrackDrag, string_compose ("start track drag with %1\n", track_drag)); - PBD::stacktrace (std::cerr, 20); - - track_drag->drag_cursor = _cursors->move->gobj(); - track_drag->predrag_cursor = gdk_window_get_cursor (edit_controls_vbox.get_window()->gobj()); - - gdk_window_set_cursor (edit_controls_vbox.get_toplevel()->get_window()->gobj(), track_drag->drag_cursor); int xo, yo; w.translate_coordinates (edit_controls_vbox, 0, y, xo, yo); - track_drag->have_predrag_cursor = true; track_drag->bump_track = nullptr; track_drag->previous = yo; track_drag->start = yo; @@ -7067,6 +7060,12 @@ Editor::mid_track_drag (GdkEventMotion* ev, Gtk::Widget& w) if (!track_drag->track->selected()) { set_selected_track (*track_drag->track, Selection::Set, false); } + + track_drag->drag_cursor = _cursors->move->gobj(); + track_drag->predrag_cursor = gdk_window_get_cursor (edit_controls_vbox.get_window()->gobj()); + gdk_window_set_cursor (edit_controls_vbox.get_toplevel()->get_window()->gobj(), track_drag->drag_cursor); + track_drag->have_predrag_cursor = true; + track_drag->first_move = false; } diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index 9ae1aade6e..49a1d885dc 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -411,8 +411,28 @@ TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev) bool TimeAxisView::controls_ebox_button_press (GdkEventButton* event) { - if (event->button == 1) { + /* double-click inside the name area */ + + if ((event->button == 1 && event->type == GDK_2BUTTON_PRESS) || Keyboard::is_edit_event (event)) { + + /* Remember, for a dbl-click, X Window/GDK sends: + + button press + button release + button press + 2button press + (and later, button release) + + since we would have "started" a track drag + on the button press that precded the 2button press, + we need to cancel it here. + */ + + _editor.end_track_drag (); + /* see if it is inside the name label */ + + if (name_label.is_ancestor (controls_ebox)) { int nlx; @@ -426,13 +446,13 @@ TimeAxisView::controls_ebox_button_press (GdkEventButton* event) begin_name_edit (); _ebox_release_can_act = false; return true; - } else { - return true; } } } } + /* double-click outside the name area */ + if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { if (_effective_height < preset_height (HeightLargest)) { set_height_enum (HeightLargest); @@ -447,10 +467,8 @@ TimeAxisView::controls_ebox_button_press (GdkEventButton* event) _resize_drag_start = event->y_root; - } else { - if (event->button == 1) { - _editor.start_track_drag (*this, event->y, controls_ebox); - } + } else if (event->button == 1 && event->type == GDK_BUTTON_PRESS) { + _editor.start_track_drag (*this, event->y, controls_ebox); } return true;