Make activate/deactivate all only operate on visible
[ardour.git] / gtk2_ardour / midi_channel_selector.cc
index 03f0630eb97c51ed6d12f272deb3c73f7615d656..cdaf42e51f7c327125a787c6b51fee4eeedb7eeb 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,10 +48,14 @@ 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].set_widget_name (X_("MidiChannelSelectorButton"));
+
+                       _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;
@@ -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])
 {
@@ -85,8 +95,10 @@ MidiChannelSelector::set_default_channel_color()
 {
        for (int row = 0; row < 4; ++row) {
                for (int column = 0; column < 4; ++column) {
-                       _buttons[row][column].unset_bg(STATE_NORMAL);
-                       _buttons[row][column].unset_bg(STATE_ACTIVE);
+                       _buttons[row][column].unset_fg (STATE_NORMAL);
+                       _buttons[row][column].unset_fg (STATE_ACTIVE);
+                       _buttons[row][column].unset_bg (STATE_NORMAL);
+                       _buttons[row][column].unset_bg (STATE_ACTIVE);
                }
        }
 }
@@ -130,19 +142,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);