return;
}
+ if (clicked_routeview->track()->has_external_redirects()) {
+ MessageDialog d (string_compose (_("<b>%1</b>\n\nThis track has at least one send/insert/return as part of its signal flow.\n\n"
+ "Freezing will only process the signal as far as the first send/insert/return."),
+ clicked_routeview->track()->name()), true, MESSAGE_INFO, BUTTONS_NONE, true);
+
+ d.add_button (_("Freeze anyway"), Gtk::RESPONSE_OK);
+ d.add_button (_("Don't freeze"), Gtk::RESPONSE_CANCEL);
+ d.set_title (_("Freeze Limits"));
+
+ int response = d.run ();
+
+ switch (response) {
+ case Gtk::RESPONSE_CANCEL:
+ return;
+ default:
+ break;
+ }
+ }
+
InterThreadInfo itt;
current_interthread_info = &itt;
void sync_order_keys (std::string const &);
static PBD::Signal1<void,std::string const &> SyncOrderKeys;
+ bool has_external_redirects() const;
+
protected:
friend class Session;
{
return MeteringRoute;
}
+
+bool
+Route::has_external_redirects () const
+{
+ for (ProcessorList::const_iterator i = _processors.begin(); i != _processors.end(); ++i) {
+
+ /* ignore inactive processors and obviously ignore the main
+ * outs since everything has them and we don't care.
+ */
+
+ if ((*i)->active() && (*i) != _main_outs && (*i)->does_routing()) {
+ return true;;
+ }
+ }
+
+ return false;
+}
+
srcs.push_back (fsource);
}
- /* tell redirects that care that we are about to use a much larger blocksize */
+ /* tell redirects that care that we are about to use a much larger
+ * blocksize. this will flush all plugins too, so that they are ready
+ * to be used for this process.
+ */
need_block_size_reset = true;
track.set_block_size (chunk_size);
- /* XXX need to flush all redirects */
-
position = start;
to_do = len;