diff --git a/gtk2_ardour/canvas-program-change.cc b/gtk2_ardour/canvas-program-change.cc index 24f13f2605..35e4671c31 100644 --- a/gtk2_ardour/canvas-program-change.cc +++ b/gtk2_ardour/canvas-program-change.cc @@ -36,9 +36,9 @@ CanvasProgramChange::CanvasProgramChange( , _event_time(event_time) , _channel(channel) , _program(program) + , _popup_initialized(false) { set_text(text); - initialize_popup_menus(); } CanvasProgramChange::~CanvasProgramChange() @@ -100,6 +100,11 @@ CanvasProgramChange::on_event(GdkEvent* ev) switch (ev->type) { case GDK_BUTTON_PRESS: if (ev->button.button == 3) { + // lazy init + if (!_popup_initialized) { + initialize_popup_menus(); + _popup_initialized = true; + } _popup.popup(ev->button.button, ev->button.time); return true; } diff --git a/gtk2_ardour/canvas-program-change.h b/gtk2_ardour/canvas-program-change.h index 39c11dc090..1db5708296 100644 --- a/gtk2_ardour/canvas-program-change.h +++ b/gtk2_ardour/canvas-program-change.h @@ -61,6 +61,7 @@ private: uint8_t _channel; uint8_t _program; Gtk::Menu _popup; + bool _popup_initialized; }; } // namespace Canvas