+ list<PortMatrixNode> const m = _body->mouseover ();
+ for (list<PortMatrixNode>::const_iterator i = m.begin(); i != m.end(); ++i) {
+
+ ARDOUR::BundleChannel c = i->column;
+ ARDOUR::BundleChannel r = i->row;
+
+ if (PortMatrix::bundle_with_channels (c.bundle) && PortMatrix::bundle_with_channels (r.bundle)) {
+ add_channel_highlight (r);
+ } else if (r.bundle) {
+ _body->highlight_associated_channels (_matrix->row_index(), r);
+ }
+ }
+}
+
+void
+PortMatrixRowLabels::motion (double x, double y)
+{
+ ARDOUR::BundleChannel const w = position_to_channel (y, x, _matrix->visible_rows());
+
+ uint32_t const bw = _longest_bundle_name + 2 * name_pad();
+
+ bool done = false;
+
+ if (w.bundle) {
+
+ if (
+ (_matrix->arrangement() == PortMatrix::LEFT_TO_BOTTOM && x < bw) ||
+ (_matrix->arrangement() == PortMatrix::TOP_TO_RIGHT && x > (_width - bw) && x < _width)
+
+ ) {
+
+ /* if the mouse is over a bundle name, highlight all channels in the bundle */
+
+ list<PortMatrixNode> n;
+
+ for (uint32_t i = 0; i < w.bundle->nchannels().n_total(); ++i) {
+ if (!_matrix->should_show (w.bundle->channel_type (i))) {
+ continue;
+ }
+
+ ARDOUR::BundleChannel const bc (w.bundle, i);
+ n.push_back (PortMatrixNode (bc, ARDOUR::BundleChannel ()));
+ }
+
+ _body->set_mouseover (n);
+ done = true;
+
+ } else if (x < _width) {
+
+ _body->set_mouseover (PortMatrixNode (w, ARDOUR::BundleChannel ()));
+ done = true;
+
+ }
+
+ }
+
+ if (!done) {
+ /* not over any bundle */
+ _body->set_mouseover (PortMatrixNode ());
+ return;