diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2007-01-10 16:19:13 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2007-01-10 16:19:13 +0000 |
commit | 1c167454eb2d498ed0ed453136ad3042aee0b556 (patch) | |
tree | 56b889a392cd0f9295359116d03c973a91ef881a /gtk2_ardour/editor.cc | |
parent | c9fd6da8b184831565fc74dd6a828596f5d77840 (diff) |
fix xfade logic and use shared_ptr for xfades
git-svn-id: svn://localhost/ardour2/trunk@1297 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor.cc')
-rw-r--r-- | gtk2_ardour/editor.cc | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 5c2acc8a2a..ebcf4ecad3 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -1649,7 +1649,7 @@ Editor::build_track_selection_context_menu (nframes_t ignored) } void -Editor::add_crossfade_context_items (AudioStreamView* view, Crossfade* xfade, Menu_Helpers::MenuList& edit_items, bool many) +Editor::add_crossfade_context_items (AudioStreamView* view, boost::shared_ptr<Crossfade> xfade, Menu_Helpers::MenuList& edit_items, bool many) { using namespace Menu_Helpers; Menu *xfade_menu = manage (new Menu); @@ -1663,8 +1663,8 @@ Editor::add_crossfade_context_items (AudioStreamView* view, Crossfade* xfade, Me str = _("Unmute"); } - items.push_back (MenuElem (str, bind (mem_fun(*this, &Editor::toggle_xfade_active), xfade))); - items.push_back (MenuElem (_("Edit"), bind (mem_fun(*this, &Editor::edit_xfade), xfade))); + items.push_back (MenuElem (str, bind (mem_fun(*this, &Editor::toggle_xfade_active), boost::weak_ptr<Crossfade> (xfade)))); + items.push_back (MenuElem (_("Edit"), bind (mem_fun(*this, &Editor::edit_xfade), boost::weak_ptr<Crossfade> (xfade)))); if (xfade->can_follow_overlap()) { @@ -3900,21 +3900,33 @@ Editor::set_follow_playhead (bool yn) } void -Editor::toggle_xfade_active (Crossfade* xfade) +Editor::toggle_xfade_active (boost::weak_ptr<Crossfade> wxfade) { - xfade->set_active (!xfade->active()); + boost::shared_ptr<Crossfade> xfade (wxfade.lock()); + if (xfade) { + xfade->set_active (!xfade->active()); + } } void -Editor::toggle_xfade_length (Crossfade* xfade) +Editor::toggle_xfade_length (boost::weak_ptr<Crossfade> wxfade) { - xfade->set_follow_overlap (!xfade->following_overlap()); + boost::shared_ptr<Crossfade> xfade (wxfade.lock()); + if (xfade) { + xfade->set_follow_overlap (!xfade->following_overlap()); + } } void -Editor::edit_xfade (Crossfade* xfade) +Editor::edit_xfade (boost::weak_ptr<Crossfade> wxfade) { - CrossfadeEditor cew (*session, *xfade, xfade->fade_in().get_min_y(), 1.0); + boost::shared_ptr<Crossfade> xfade (wxfade.lock()); + + if (!xfade) { + return; + } + + CrossfadeEditor cew (*session, xfade, xfade->fade_in().get_min_y(), 1.0); ensure_float (cew); |