From 38dd633fc60720be873d756140a934cc5a7cba78 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 15 May 2012 20:45:02 +0000 Subject: [PATCH] fix for crash caused by re-using the same image in the fade context menu git-svn-id: svn://localhost/ardour2/branches/3.0@12298 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor.cc | 264 +++++++++++++++++++++--------------------- 1 file changed, 132 insertions(+), 132 deletions(-) diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 5e3810977c..a6746b265d 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -1450,140 +1450,140 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i MenuList& items (fade_context_menu.items()); - items.clear (); + if (items.empty()) { + switch (item_type) { + case FadeInItem: + case FadeInHandleItem: + if (arv->audio_region()->fade_in_active()) { + items.push_back (MenuElem (_("Deactivate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_active), false))); + } else { + items.push_back (MenuElem (_("Activate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_active), true))); + } + + items.push_back (SeparatorElem()); + + if (Profile->get_sae()) { + + items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeLinear))); + items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeFast))); + + } else { + + items.push_back ( + ImageMenuElem ( + _("Linear"), + *_fade_in_images[FadeLinear], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeLinear) + ) + ); + + dynamic_cast(&items.back())->set_always_show_image (); + + items.push_back ( + ImageMenuElem ( + _("Slow"), + *_fade_in_images[FadeSlow], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeSlow) + )); + + dynamic_cast(&items.back())->set_always_show_image (); + + items.push_back ( + ImageMenuElem ( + _("Fast"), + *_fade_in_images[FadeFast], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeFast) + )); + + dynamic_cast(&items.back())->set_always_show_image (); + + items.push_back ( + ImageMenuElem ( + _("Symmetric"), + *_fade_in_images[FadeSymmetric], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeSymmetric) + )); + + items.push_back ( + ImageMenuElem ( + _("Constant Power"), + *_fade_in_images[FadeConstantPower], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeConstantPower) + )); - switch (item_type) { - case FadeInItem: - case FadeInHandleItem: - if (arv->audio_region()->fade_in_active()) { - items.push_back (MenuElem (_("Deactivate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_active), false))); - } else { - items.push_back (MenuElem (_("Activate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_active), true))); + dynamic_cast(&items.back())->set_always_show_image (); + } + + break; + + case FadeOutItem: + case FadeOutHandleItem: + if (arv->audio_region()->fade_out_active()) { + items.push_back (MenuElem (_("Deactivate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_active), false))); + } else { + items.push_back (MenuElem (_("Activate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_active), true))); + } + + items.push_back (SeparatorElem()); + + if (Profile->get_sae()) { + items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeLinear))); + items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSlow))); + } else { + + items.push_back ( + ImageMenuElem ( + _("Linear"), + *_fade_out_images[FadeLinear], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeLinear) + ) + ); + + dynamic_cast(&items.back())->set_always_show_image (); + + items.push_back ( + ImageMenuElem ( + _("Slow"), + *_fade_out_images[FadeSlow], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSlow) + )); + + dynamic_cast(&items.back())->set_always_show_image (); + + items.push_back ( + ImageMenuElem ( + _("Fast"), + *_fade_out_images[FadeFast], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeFast) + )); + + dynamic_cast(&items.back())->set_always_show_image (); + + items.push_back ( + ImageMenuElem ( + _("Symmetric"), + *_fade_out_images[FadeSymmetric], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSymmetric) + )); + + items.push_back ( + ImageMenuElem ( + _("Constant Power"), + *_fade_out_images[FadeConstantPower], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeConstantPower) + )); + + dynamic_cast(&items.back())->set_always_show_image (); + } + + break; + + default: + fatal << _("programming error: ") + << X_("non-fade canvas item passed to popup_fade_context_menu()") + << endmsg; + /*NOTREACHED*/ } - - items.push_back (SeparatorElem()); - - if (Profile->get_sae()) { - - items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeLinear))); - items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeFast))); - - } else { - - items.push_back ( - ImageMenuElem ( - _("Linear"), - *_fade_in_images[FadeLinear], - sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeLinear) - ) - ); - - dynamic_cast(&items.back())->set_always_show_image (); - - items.push_back ( - ImageMenuElem ( - _("Slow"), - *_fade_in_images[FadeSlow], - sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeSlow) - )); - - dynamic_cast(&items.back())->set_always_show_image (); - - items.push_back ( - ImageMenuElem ( - _("Fast"), - *_fade_in_images[FadeFast], - sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeFast) - )); - - dynamic_cast(&items.back())->set_always_show_image (); - - items.push_back ( - ImageMenuElem ( - _("Symmetric"), - *_fade_in_images[FadeSlow], - sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeSymmetric) - )); - - items.push_back ( - ImageMenuElem ( - _("Constant Power"), - *_fade_in_images[FadeConstantPower], - sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeConstantPower) - )); - - dynamic_cast(&items.back())->set_always_show_image (); - } - - break; - - case FadeOutItem: - case FadeOutHandleItem: - if (arv->audio_region()->fade_out_active()) { - items.push_back (MenuElem (_("Deactivate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_active), false))); - } else { - items.push_back (MenuElem (_("Activate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_active), true))); - } - - items.push_back (SeparatorElem()); - - if (Profile->get_sae()) { - items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeLinear))); - items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSlow))); - } else { - - items.push_back ( - ImageMenuElem ( - _("Linear"), - *_fade_out_images[FadeLinear], - sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeLinear) - ) - ); - - dynamic_cast(&items.back())->set_always_show_image (); - - items.push_back ( - ImageMenuElem ( - _("Slow"), - *_fade_out_images[FadeSlow], - sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSlow) - )); - - dynamic_cast(&items.back())->set_always_show_image (); - - items.push_back ( - ImageMenuElem ( - _("Fast"), - *_fade_out_images[FadeFast], - sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeFast) - )); - - dynamic_cast(&items.back())->set_always_show_image (); - - items.push_back ( - ImageMenuElem ( - _("Symmetric"), - *_fade_out_images[FadeSlow], - sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSymmetric) - )); - - items.push_back ( - ImageMenuElem ( - _("Constant Power"), - *_fade_out_images[FadeConstantPower], - sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeConstantPower) - )); - - dynamic_cast(&items.back())->set_always_show_image (); - } - - break; - - default: - fatal << _("programming error: ") - << X_("non-fade canvas item passed to popup_fade_context_menu()") - << endmsg; - /*NOTREACHED*/ } fade_context_menu.popup (button, time);