Fix crash on failed processor DnD. Fixes #3554.

git-svn-id: svn://localhost/ardour2/branches/3.0@8079 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2010-11-24 00:46:51 +00:00
parent 0ee9f216d5
commit d40e61c914
2 changed files with 32 additions and 21 deletions

View file

@ -1064,7 +1064,18 @@ ProcessorBox::compute_processor_sort_keys ()
} }
if (_route->reorder_processors (our_processors)) { if (_route->reorder_processors (our_processors)) {
/* Reorder failed, so report this to the user. As far as I can see this must be done
in an idle handler: it seems that the redisplay_processors() that happens below destroys
widgets that were involved in the drag-and-drop on the processor list, which causes problems
when the drag is torn down after this handler function is finished.
*/
Glib::signal_idle().connect_once (sigc::mem_fun (*this, &ProcessorBox::report_failed_reorder));
}
}
void
ProcessorBox::report_failed_reorder ()
{
/* reorder failed, so redisplay */ /* reorder failed, so redisplay */
redisplay_processors (); redisplay_processors ();
@ -1089,7 +1100,6 @@ outputs will not work correctly."));
dialog.show_all (); dialog.show_all ();
dialog.run (); dialog.run ();
}
} }
void void

View file

@ -244,6 +244,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD
void redisplay_processors (); void redisplay_processors ();
void add_processor_to_display (boost::weak_ptr<ARDOUR::Processor>); void add_processor_to_display (boost::weak_ptr<ARDOUR::Processor>);
void reordered (); void reordered ();
void report_failed_reorder ();
void route_processors_changed (ARDOUR::RouteProcessorChange); void route_processors_changed (ARDOUR::RouteProcessorChange);
void processors_reordered (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&, int*); void processors_reordered (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&, int*);