Don't re-create MIDI Region Editor when it already exists

This commit is contained in:
Robin Gareus 2025-08-20 21:57:40 +02:00
parent 724340ce11
commit aba8595342
No known key found for this signature in database
GPG key ID: A090BCE02CF57F04
3 changed files with 16 additions and 21 deletions

View file

@ -9581,10 +9581,9 @@ Editor::temporal_zoom_extents ()
void
Editor::edit_region_in_pianoroll_window ()
{
selection->foreach_midi_regionview (&MidiRegionView::edit_in_pianoroll_window);
selection->foreach_midi_regionview (&MidiRegionView::show_region_editor);
}
void
Editor::find_and_display_track ()
{

View file

@ -701,23 +701,6 @@ MidiRegionView::add_control_points_to_selection (timepos_t const & start, timepo
}
}
void
MidiRegionView::edit_in_pianoroll_window ()
{
std::shared_ptr<MidiTrack> track = std::dynamic_pointer_cast<MidiTrack> (trackview.stripable());
assert (track);
PianorollWindow* pr = new PianorollWindow (string_compose (_("Pianoroll: %1"), _region->name()), track->session());
pr->set (track, midi_region());
pr->set_show_source (false);
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*)
{
@ -728,7 +711,21 @@ MidiRegionView::pianoroll_window_deleted (GdkEventAny*)
void
MidiRegionView::show_region_editor ()
{
edit_in_pianoroll_window ();
if (!_editor) {
std::shared_ptr<MidiTrack> track = std::dynamic_pointer_cast<MidiTrack> (trackview.stripable());
assert (track);
PianorollWindow* pr = new PianorollWindow (string_compose (_("Pianoroll: %1"), _region->name()), track->session());
pr->set (track, midi_region());
pr->set_show_source (false);
pr->signal_delete_event().connect (sigc::mem_fun (*this, &MidiRegionView::pianoroll_window_deleted), false);
_editor = pr;
}
_editor->show_all ();
_editor->present ();
}
void

View file

@ -134,7 +134,6 @@ public:
void set_visibility_note_range (MidiViewBackground::VisibleNoteRange, bool);
MergeableLine* make_merger ();
void edit_in_pianoroll_window ();
void show_region_editor ();
void hide_region_editor ();