13
0

redesign track drag so that we can start from anywhere in the header, including the name

This commit is contained in:
Paul Davis 2024-06-03 17:17:59 -06:00
parent 40ef5f3b15
commit c7b8840f8f
2 changed files with 31 additions and 14 deletions

View File

@ -7034,17 +7034,10 @@ Editor::start_track_drag (TimeAxisView& tav, int y, Gtk::Widget& w)
{
track_drag = new TrackDrag (dynamic_cast<RouteTimeAxisView*> (&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;
}

View File

@ -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;