From 4df4574be472b599e149af2ef161ed505088e71a Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 29 Jun 2009 14:29:53 +0000 Subject: editor toggle button fix from lincoln; refresh location display when loop range changes; fix up BufferSet::merge_from() to be less fragile to wierd merge conditions git-svn-id: svn://localhost/ardour2/branches/3.0@5297 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/actions.cc | 8 ++++++-- gtk2_ardour/editor.cc | 1 + libs/ardour/buffer_set.cc | 12 +++++++----- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc index 322dd9fccf..5e9c067476 100644 --- a/gtk2_ardour/actions.cc +++ b/gtk2_ardour/actions.cc @@ -364,6 +364,7 @@ void ActionManager::toggle_config_state (const char* group, const char* action, bool (RCConfiguration::*set)(bool), bool (RCConfiguration::*get)(void) const) { Glib::RefPtr act = ActionManager::get_action (group, action); + if (act) { Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); @@ -381,12 +382,15 @@ void ActionManager::toggle_config_state_foo (const char* group, const char* action, sigc::slot set, sigc::slot get) { Glib::RefPtr act = ActionManager::get_action (group, action); + if (act) { Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); - if (tact->get_active()) { + + if (tact) { bool const x = get (); + if (x != tact->get_active ()) { - set (x); + set (!x); } } } diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 7e9d17b80e..79895f4067 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -4799,6 +4799,7 @@ Editor::post_zoom () playhead_cursor->set_position (playhead_cursor->current_frame); } + refresh_location_display(); _summary->set_overlays_dirty (); instant_save (); diff --git a/libs/ardour/buffer_set.cc b/libs/ardour/buffer_set.cc index 319444e1b9..7e6ddd68dd 100644 --- a/libs/ardour/buffer_set.cc +++ b/libs/ardour/buffer_set.cc @@ -229,17 +229,19 @@ BufferSet::read_from (BufferSet& in, nframes_t nframes) void BufferSet::merge_from (BufferSet& in, nframes_t nframes) { - assert(available() >= in.count()); + /* merge all input buffers into out existing buffers. + + NOTE: if "in" contains more buffers than this set, + we will drop the extra buffers. + + */ - /* merge all input buffers into out existing buffers */ for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) { BufferSet::iterator o = begin(*t); - for (BufferSet::iterator i = in.begin(*t); i != in.end(*t); ++i, ++o) { + for (BufferSet::iterator i = in.begin(*t); i != in.end(*t) && o != end (*t); ++i, ++o) { o->merge_from (*i, nframes); } } - - set_count (in.count()); } void -- cgit v1.2.3