From 01a087985e779dd6807c30d0b222a0e902fdb031 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 16 May 2025 16:43:03 -0600 Subject: [PATCH] fix set/unset of Pianoroll::ref (trigger reference) when a region is set We do want to reset things like history, but not lose the trigger reference, if any --- gtk2_ardour/pianoroll.cc | 14 ++++++++------ gtk2_ardour/pianoroll.h | 4 ++-- gtk2_ardour/trigger_page.cc | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/gtk2_ardour/pianoroll.cc b/gtk2_ardour/pianoroll.cc index 0dde4b6819..20b5796df9 100644 --- a/gtk2_ardour/pianoroll.cc +++ b/gtk2_ardour/pianoroll.cc @@ -2434,7 +2434,7 @@ Pianoroll::rec_button_press (GdkEventButton* ev) } void -Pianoroll::set (TriggerReference & tref) +Pianoroll::set_trigger (TriggerReference & tref) { if (tref.trigger() == ref.trigger()) { return; @@ -2462,7 +2462,7 @@ Pianoroll::set (TriggerReference & tref) set_track (_track); - _track->DropReferences.connect (object_connections, invalidator (*this), std::bind (&Pianoroll::unset, this), gui_context()); + _track->DropReferences.connect (object_connections, invalidator (*this), std::bind (&Pianoroll::unset, this, true), gui_context()); ref.trigger()->PropertyChanged.connect (object_connections, invalidator (*this), std::bind (&Pianoroll::trigger_prop_change, this, _1), gui_context()); ref.trigger()->ArmChanged.connect (object_connections, invalidator (*this), std::bind (&Pianoroll::trigger_arm_change, this), gui_context()); @@ -2504,14 +2504,16 @@ Pianoroll::make_a_region () } void -Pianoroll::unset () +Pianoroll::unset (bool trigger_too) { _history.clear (); _update_connection.disconnect(); object_connections.drop_connections (); _track.reset (); view->set_region (nullptr); - ref = TriggerReference (); + if (trigger_too) { + ref = TriggerReference (); + } } void @@ -2556,7 +2558,7 @@ Pianoroll::update_solo_display () void Pianoroll::set_region (std::shared_ptr r) { - unset (); + unset (false); if (!r) { return; @@ -2566,7 +2568,7 @@ Pianoroll::set_region (std::shared_ptr r) view->show_start (true); view->show_end (true); - r->DropReferences.connect (object_connections, invalidator (*this), std::bind (&Pianoroll::unset, this), gui_context()); + r->DropReferences.connect (object_connections, invalidator (*this), std::bind (&Pianoroll::unset, this, false), gui_context()); r->PropertyChanged.connect (object_connections, invalidator (*this), std::bind (&Pianoroll::region_prop_change, this, _1), gui_context()); bool provided = false; diff --git a/gtk2_ardour/pianoroll.h b/gtk2_ardour/pianoroll.h index 619f839a72..8fce1cfcf1 100644 --- a/gtk2_ardour/pianoroll.h +++ b/gtk2_ardour/pianoroll.h @@ -81,7 +81,7 @@ class Pianoroll : public CueEditor int32_t get_grid_beat_divisions (Editing::GridType gt) const { return 1; } int32_t get_grid_music_divisions (Editing::GridType gt, uint32_t event_state) const { return 1; } - void set (ARDOUR::TriggerReference&); + void set_trigger (ARDOUR::TriggerReference&); void set_region (std::shared_ptr); void set_track (std::shared_ptr); @@ -272,7 +272,7 @@ class Pianoroll : public CueEditor void trigger_prop_change (PBD::PropertyChange const &); void region_prop_change (PBD::PropertyChange const &); - void unset (); + void unset (bool trigger_too); void visual_changer (const VisualChange&); void bindings_changed (); diff --git a/gtk2_ardour/trigger_page.cc b/gtk2_ardour/trigger_page.cc index d7feb0b506..a92ab48640 100644 --- a/gtk2_ardour/trigger_page.cc +++ b/gtk2_ardour/trigger_page.cc @@ -497,7 +497,7 @@ TriggerPage::trigger_arm_changed (Trigger const * trigger) _midi_trig_box.set_trigger (ref); _midi_trig_box.show (); - _midi_editor->set (ref); + _midi_editor->set_trigger (ref); _midi_editor->viewport().show (); } @@ -548,7 +548,7 @@ TriggerPage::selection_changed () _midi_trig_box.set_trigger (ref); _midi_trig_box.show (); - _midi_editor->set (ref); + _midi_editor->set_trigger (ref); table.attach (_midi_editor->contents(), clip_editor_column, clip_editor_column + 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL); _midi_editor->contents().show_all ();