Fix crash on attempting a TimeFX drag but not clicking on a region.
[ardour.git] / gtk2_ardour / port_matrix_column_labels.cc
index c10bb01a2b5ba061ac9a00ac18705b3f06f9857a..c3b10e289b53a2ab4c6225c2a4b8b01526fc1b21 100644 (file)
@@ -25,6 +25,8 @@
 #include "port_matrix_body.h"
 #include "utils.h"
 
+#include "i18n.h"
+
 using namespace std;
 
 PortMatrixColumnLabels::PortMatrixColumnLabels (PortMatrix* m, PortMatrixBody* b)
@@ -55,16 +57,16 @@ PortMatrixColumnLabels::compute_dimensions ()
                for (PortGroup::BundleList::const_iterator j = c.begin (); j != c.end(); ++j) {
 
                        cairo_text_extents_t ext;
-                       cairo_text_extents (cr, j->bundle->name().c_str(), &ext);
+                       cairo_text_extents (cr, (*j)->bundle->name().c_str(), &ext);
                        if (ext.width > _longest_bundle_name) {
                                _longest_bundle_name = ext.width;
                        }
 
-                       for (uint32_t k = 0; k < j->bundle->nchannels (); ++k) {
+                       for (uint32_t k = 0; k < (*j)->bundle->nchannels (); ++k) {
 
                                cairo_text_extents (
                                        cr,
-                                       j->bundle->channel_name (k).c_str(),
+                                       (*j)->bundle->channel_name (k).c_str(),
                                        &ext
                                        );
 
@@ -127,13 +129,13 @@ PortMatrixColumnLabels::render (cairo_t* cr)
        PortGroup::BundleList const & bundles = _matrix->visible_columns()->bundles ();
        for (PortGroup::BundleList::const_iterator i = bundles.begin (); i != bundles.end(); ++i) {
 
-               Gdk::Color c = i->has_colour ? i->colour : get_a_bundle_colour (N);
-               render_bundle_name (cr, background_colour (), c, x, 0, i->bundle);
+               Gdk::Color c = (*i)->has_colour ? (*i)->colour : get_a_bundle_colour (N);
+               render_bundle_name (cr, background_colour (), c, x, 0, (*i)->bundle);
 
                if (_matrix->show_only_bundles()) {
                        x += grid_spacing();
                } else {
-                       x += i->bundle->nchannels () * grid_spacing();
+                       x += (*i)->bundle->nchannels () * grid_spacing();
                }
                
                ++N;
@@ -147,9 +149,9 @@ PortMatrixColumnLabels::render (cairo_t* cr)
 
                for (PortGroup::BundleList::const_iterator i = bundles.begin (); i != bundles.end(); ++i) {
 
-                       for (uint32_t j = 0; j < i->bundle->nchannels(); ++j) {
-                               Gdk::Color c = i->has_colour ? i->colour : get_a_bundle_colour (N);
-                               render_channel_name (cr, background_colour (), c, x, 0, ARDOUR::BundleChannel (i->bundle, j));
+                       for (uint32_t j = 0; j < (*i)->bundle->nchannels(); ++j) {
+                               Gdk::Color c = (*i)->has_colour ? (*i)->colour : get_a_bundle_colour (N);
+                               render_channel_name (cr, background_colour (), c, x, 0, ARDOUR::BundleChannel ((*i)->bundle, j));
                                x += grid_spacing();
                        }
                        
@@ -436,11 +438,19 @@ PortMatrixColumnLabels::position_to_channel (double p, double o, boost::shared_p
 void
 PortMatrixColumnLabels::button_press (double x, double y, int b, uint32_t t, guint)
 {
-       ARDOUR::BundleChannel const gc = position_to_channel (x, y, _matrix->visible_columns());
+       ARDOUR::BundleChannel w = position_to_channel (x, y, _matrix->visible_columns());
+
+       if (
+               (_matrix->arrangement() == PortMatrix::LEFT_TO_BOTTOM && y > (_height - _longest_bundle_name * sin (angle ()))) ||
+               (_matrix->arrangement() == PortMatrix::TOP_TO_RIGHT && y < (_longest_bundle_name * sin (angle ())))
+               ) {
+
+               w.channel = -1;
+       }
 
        if (b == 3) {
                _matrix->popup_menu (
-                       gc,
+                       w,
                        ARDOUR::BundleChannel (),
                        t
                        );