fixes so that cursor changes inside a MidiRegionView work as intended

They already worked in the PianorollMidiView, because that hands off enter/leave events
to the parent EditingContext (a Pianoroll). But MidiRegionView and Editor were
not interacting in the same way, so leaving a note object would not cause the Editor
to do the right thing with the cursor.
This commit is contained in:
Paul Davis 2025-04-25 11:28:45 -06:00
parent 52996e7a8d
commit 8d7b4f7991
5 changed files with 26 additions and 3 deletions

View file

@ -275,7 +275,7 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider,
virtual bool canvas_control_point_event (GdkEvent* event, ArdourCanvas::Item*, ControlPoint*) = 0;
virtual bool canvas_cue_start_event (GdkEvent* event, ArdourCanvas::Item*) { return true; }
virtual bool canvas_cue_end_event (GdkEvent* event, ArdourCanvas::Item*) { return true; }
virtual bool canvas_bg_event (GdkEvent* event, ArdourCanvas::Item*) { return true; }
virtual bool canvas_bg_event (GdkEvent* event, ArdourCanvas::Item*) = 0;
Temporal::Beats get_grid_type_as_beats (bool& success, Temporal::timepos_t const & position) const;
Temporal::Beats get_draw_length_as_beats (bool& success, Temporal::timepos_t const & position) const;

View file

@ -1536,6 +1536,7 @@ private:
bool canvas_bbt_marker_event (GdkEvent* event,ArdourCanvas::Item*, BBTMarker*);
bool canvas_automation_track_event(GdkEvent* event, ArdourCanvas::Item*, AutomationTimeAxisView*);
bool canvas_note_event (GdkEvent* event, ArdourCanvas::Item*);
bool canvas_bg_event (GdkEvent* event, ArdourCanvas::Item*);
bool canvas_ruler_event (GdkEvent* event, ArdourCanvas::Item*, ItemType);
bool canvas_ruler_bar_event (GdkEvent* event, ArdourCanvas::Item*, ItemType, std::string const&);

View file

@ -1200,6 +1200,16 @@ Editor::canvas_note_event (GdkEvent *event, ArdourCanvas::Item* item)
return typed_event (item, event, NoteItem);
}
bool
Editor::canvas_bg_event (GdkEvent *event, ArdourCanvas::Item* item)
{
if (!internal_editing()) {
return false;
}
return typed_event (item, event, RegionItem);
}
bool
Editor::canvas_drop_zone_event (GdkEvent* event)
{

View file

@ -308,7 +308,20 @@ MidiRegionView::canvas_group_event(GdkEvent* ev)
return RegionView::canvas_group_event (ev);
}
return MidiView::midi_canvas_group_event (ev);
/* Let MidiView do its thing */
if (MidiView::midi_canvas_group_event (ev)) {
switch (ev->type) {
case GDK_ENTER_NOTIFY:
case GDK_LEAVE_NOTIFY:
break;
default:
return true;
}
}
return _editing_context.canvas_bg_event (ev, get_canvas_group());
}
bool

View file

@ -309,7 +309,6 @@ NoteBase::event_handler (GdkEvent* ev)
break;
case GDK_LEAVE_NOTIFY:
set_mouse_fractions (ev);
_view.note_left (this);
break;