opname = _("clear");
break;
}
+
+ /* if we're deleting something, and the mouse is still pressed,
+ the thing we started a drag for will be gone when we release
+ the mouse button(s). avoid this. see part 2 at the end of
+ this function.
+ */
+
+ if (op == Cut || op == Clear) {
+ if (drag_info.item) {
+ drag_info.item->ungrab (0);
+ drag_info.item = 0;
+ }
+ }
cut_buffer->clear ();
Glib::signal_idle().connect (bind (mem_fun(*this, &Editor::really_remove_marker), loc));
}
- if (drag_info.item) {
- drag_info.item->ungrab (0);
- drag_info.item = 0;
- }
-
+ break_drag ();
+
return;
}
default:
break;
}
+
+
+ if (op == Cut || op == Clear) {
+ break_drag ();
+ }
}
void
streams));
}
+ dialog.set_border_width (PublicEditor::window_border_width);
+
+ label.set_alignment (0.5, 0.5);
dialog.get_vbox()->pack_start (label);
dialog.add_button (Stock::OK, RESPONSE_ACCEPT);
away any existing active streams.
*/
+ out = outputs;
return 1;
}
if (outputs == 1 && inputs == 1) {
/* mono plugin, replicate as needed */
+ out = in;
return in;
}
if (inputs == in) {
/* exact match */
+ out = outputs;
return 1;
}
configuration, so we can replicate.
*/
- return in/inputs;
+ int nplugs = in/inputs;
+ out = outputs * nplugs;
+ return nplugs;
}
/* sorry */
redirect_max_outs = 0;
- /* divide inserts up by placement so we get the signal flow
+ /* Step 1: build a map that links each insert to an in/out channel count
+
+ Divide inserts up by placement so we get the signal flow
properly modelled. we need to do this because the _redirects
list is not sorted by placement, and because other reasons may
exist now or in the future for this separate treatment.