forward unhandled button events from MidiRegionView back to Editor
[ardour.git] / gtk2_ardour / midi_channel_selector.cc
index 03f0630eb97c51ed6d12f272deb3c73f7615d656..e5416c81ff649c65ab7ddabf35b691d0d437d3a9 100644 (file)
@@ -25,7 +25,6 @@
 
 using namespace std;
 using namespace Gtk;
-using namespace sigc;
 using namespace ARDOUR;
 
 MidiChannelSelector::MidiChannelSelector(int n_rows, int n_columns, int start_row, int start_column)
@@ -49,11 +48,15 @@ MidiChannelSelector::MidiChannelSelector(int n_rows, int n_columns, int start_ro
                        _button_labels[row][column].set_justify(JUSTIFY_RIGHT);
                        _buttons[row][column].add(_button_labels[row][column]);
                        _buttons[row][column].signal_toggled().connect(
-                               bind(
-                                       mem_fun(this, &MidiChannelSelector::button_toggled),
+                               sigc::bind(
+                                       sigc::mem_fun(this, &MidiChannelSelector::button_toggled),
                                        &_buttons[row][column],
                                        channel_nr - 1));
 
+                       _buttons[row][column].signal_button_release_event().connect(
+                                sigc::mem_fun(this, &MidiChannelSelector::was_clicked), false);
+
+
                        int table_row    = start_row + row;
                        int table_column = start_column + column;
                        attach(_buttons[row][column], table_column, table_column + 1, table_row, table_row + 1);
@@ -65,6 +68,13 @@ MidiChannelSelector::~MidiChannelSelector()
 {
 }
 
+bool
+MidiChannelSelector::was_clicked (GdkEventButton*)
+{
+        clicked ();
+        return false;
+}
+
 void
 MidiChannelSelector::set_channel_colors(const uint32_t new_channel_colors[16])
 {
@@ -130,19 +140,19 @@ MidiMultipleChannelSelector::MidiMultipleChannelSelector(ChannelMode mode, uint1
 {
        _select_all.add(*manage(new Label(_("All"))));
        _select_all.signal_clicked().connect(
-                       bind(mem_fun(this, &MidiMultipleChannelSelector::select_all), true));
+                       sigc::bind(sigc::mem_fun(this, &MidiMultipleChannelSelector::select_all), true));
 
        _select_none.add(*manage(new Label(_("None"))));
        _select_none.signal_clicked().connect(
-                       bind(mem_fun(this, &MidiMultipleChannelSelector::select_all), false));
+                       sigc::bind(sigc::mem_fun(this, &MidiMultipleChannelSelector::select_all), false));
 
        _invert_selection.add(*manage(new Label(_("Invert"))));
        _invert_selection.signal_clicked().connect(
-                       mem_fun(this, &MidiMultipleChannelSelector::invert_selection));
+                       sigc::mem_fun(this, &MidiMultipleChannelSelector::invert_selection));
 
        _force_channel.add(*manage(new Label(_("Force"))));
        _force_channel.signal_toggled().connect(
-                       mem_fun(this, &MidiMultipleChannelSelector::force_channels_button_toggled));
+                       sigc::mem_fun(this, &MidiMultipleChannelSelector::force_channels_button_toggled));
 
        set_homogeneous(false);
        attach(*manage(new VSeparator()), 4, 5, 0, 4, SHRINK, FILL, 0, 0);