diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index 8d3d4cf55a..e879f460f5 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -823,7 +823,8 @@ Editor::canvas_region_view_name_highlight_event (GdkEvent* event, ArdourCanvas:: ret = button_release_handler (item, event, RegionViewNameHighlight); break; case GDK_MOTION_NOTIFY: - ret = motion_handler (item, event); + motion_handler (item, event); + ret = true; // force this to avoid progagating the event into the regionview break; case GDK_ENTER_NOTIFY: ret = enter_handler (item, event, RegionViewNameHighlight); diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index a3afdf4a36..231946f661 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -315,7 +315,6 @@ Drag::motion_handler (GdkEvent* event, bool from_autoscroll) return true; } } - return false; } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 2d81497e01..f9d06f03c7 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -458,7 +458,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp switch (item_type) { case RegionItem: - if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) { + if (mouse_mode != MouseRange || internal_editing() || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) { set_selected_regionview_from_click (press, op, true); } else if (event->type == GDK_BUTTON_PRESS) { selection->clear_tracks (); @@ -472,7 +472,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp case RegionViewNameHighlight: case RegionViewName: - if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) { + if (mouse_mode != MouseRange || internal_editing() || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) { set_selected_regionview_from_click (press, op, true); } else if (event->type == GDK_BUTTON_PRESS) { set_selected_track_as_side_effect (); @@ -668,6 +668,14 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT } break; + case RegionViewNameHighlight: + { + RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id); + _drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event); + return true; + break; + } + default: if (!internal_editing()) { _drags->set (new SelectionDrag (this, item, SelectionDrag::CreateSelection), event); @@ -1402,6 +1410,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ ControlPoint* cp; Marker * marker; double fraction; + bool ret = true; if (last_item_entered != item) { last_item_entered = item; @@ -1460,7 +1469,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ break; case RegionViewNameHighlight: - if (is_drawable() && mouse_mode == MouseObject) { + if (is_drawable() && (mouse_mode == MouseObject || (internal_editing() && mouse_mode == MouseRange))) { track_canvas->get_window()->set_cursor (*trimmer_cursor); } break; @@ -1590,7 +1599,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ break; } - return false; + return ret; } bool @@ -1602,6 +1611,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ Location *loc; RegionView* rv; bool is_start; + bool ret = true; switch (item_type) { case ControlPointItem: @@ -1712,7 +1722,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ break; } - return false; + return ret; } gint @@ -1843,7 +1853,6 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from if (_drags->active ()) { handled = _drags->motion_handler (event, from_autoscroll); } - if (!handled) { return false; } diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc index eaac23300b..fe03e64f72 100644 --- a/libs/ardour/midi_region.cc +++ b/libs/ardour/midi_region.cc @@ -229,8 +229,7 @@ void MidiRegion::recompute_at_end () { /* our length has changed - * (non destructively) "chop" notes that pass the end boundary, to - * prevent stuck notes. + * so what? stuck notes are dealt with via a note state tracker */ } diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index 5d043c0174..761868f29e 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -169,7 +169,7 @@ SMFSource::read_unlocked (Evoral::EventSink& destination, sframes_t s assert(time >= start_ticks); const sframes_t ev_frame_time = converter.to(time / (double)ppqn()) + stamp_offset; -#if 0 +#if 1 cerr << " frames = " << ev_frame_time << " w/offset = " << ev_frame_time - negative_stamp_offset << endl; @@ -438,6 +438,18 @@ SMFSource::load_model (bool lock, bool force_reload) if (ret > 0) { // didn't skip (meta) event ev.set_event_type(EventTypeMap::instance().midi_event_type(buf[0])); + + std::string ss; + + for (int xx = 0; xx < size; ++xx) { + char b[8]; + snprintf (b, sizeof (b), "0x%x ", buf[xx]); + ss += b; + } + + DEBUG_TRACE (DEBUG::MidiSourceIO, string_compose ("SMF %6 load model delta %1, time %2, size %3 buf %4, type %5\n", + delta_t, time, size, ss , ev.event_type(), name())); + _model->append(ev); }