diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 24f30b8d5e..b9e4fb60a5 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -693,4 +693,28 @@ MidiRegionView::edit_in_pianoroll_window () pr->set (track, midi_region()); pr->show_all (); pr->present (); + + pr->signal_delete_event().connect (sigc::mem_fun (*this, &MidiRegionView::pianoroll_window_deleted), false); + _editor = pr; +} + +bool +MidiRegionView::pianoroll_window_deleted (GdkEventAny*) +{ + _editor = nullptr; + return false; +} + +void +MidiRegionView::show_region_editor () +{ + edit_in_pianoroll_window (); +} + +void +MidiRegionView::hide_region_editor () +{ + RegionView::hide_region_editor (); + delete _editor; + _editor = nullptr; } diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 130f155437..4d2d0b26e4 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -135,6 +135,8 @@ public: MergeableLine* make_merger (); void edit_in_pianoroll_window (); + void show_region_editor (); + void hide_region_editor (); protected: void reset_width_dependent_items (double pixel_width); @@ -175,6 +177,7 @@ public: double contents_height() const { return (_height - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2); } void connect_to_diskstream (); + bool pianoroll_window_deleted (GdkEventAny*); }; diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h index 13d701a6d6..60264e09d8 100644 --- a/gtk2_ardour/region_view.h +++ b/gtk2_ardour/region_view.h @@ -87,8 +87,8 @@ public: bool set_position(Temporal::timepos_t const & pos, void* src, double* delta = 0); - void show_region_editor (); - void hide_region_editor (); + virtual void show_region_editor (); + virtual void hide_region_editor (); virtual void region_changed (const PBD::PropertyChange&);