From 9bf55b26e808c6f1f13068e43bf17fcc60b44561 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 30 Nov 2011 16:40:05 +0000 Subject: [PATCH] fix phase invert button functionality, lost in switch to ArdourButton git-svn-id: svn://localhost/ardour2/branches/3.0@10842 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/route_ui.cc | 32 ++++++++++++-------------------- gtk2_ardour/route_ui.h | 4 ++-- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index a0f9364687..e11bf91259 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -1765,7 +1765,7 @@ void RouteUI::setup_invert_buttons () { /* remove old invert buttons */ - for (list::iterator i = _invert_buttons.begin(); i != _invert_buttons.end(); ++i) { + for (vector::iterator i = _invert_buttons.begin(); i != _invert_buttons.end(); ++i) { _invert_button_box.remove (**i); } @@ -1781,8 +1781,8 @@ RouteUI::setup_invert_buttons () for (uint32_t i = 0; i < to_add; ++i) { ArdourButton* b = manage (new ArdourButton); - b->StateChanged.connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_toggled), i, b)); b->signal_button_press_event().connect (sigc::mem_fun (*this, &RouteUI::invert_press)); + b->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_release), i)); b->set_name (X_("mixer strip button")); if (to_add == 1) { @@ -1817,37 +1817,29 @@ RouteUI::set_invert_button_state () } int j = 0; - for (list::iterator i = _invert_buttons.begin(); i != _invert_buttons.end(); ++i, ++j) { + for (vector::iterator i = _invert_buttons.begin(); i != _invert_buttons.end(); ++i, ++j) { (*i)->set_active (_route->phase_invert (j)); } --_i_am_the_modifier; } -void -RouteUI::invert_toggled (uint32_t i, ArdourButton* b) +bool +RouteUI::invert_release (GdkEventButton* ev, uint32_t i) { - if (_i_am_the_modifier) { - return; - } - - uint32_t const N = _route->input()->n_ports().n_audio(); - if (N <= _max_invert_buttons) { - _route->set_phase_invert (i, b->get_active ()); - } else { - boost::dynamic_bitset<> p (N); - if (b->get_active ()) { - p.set (); - } - _route->set_phase_invert (p); + if (ev->button == 1 && i < _invert_buttons.size()) { + _route->set_phase_invert (i, !_invert_buttons[i]->get_active()); + return true; } + return false; } + bool RouteUI::invert_press (GdkEventButton* ev) { using namespace Menu_Helpers; - + if (ev->button != 3) { return true; } @@ -1884,7 +1876,7 @@ RouteUI::invert_menu_toggled (uint32_t c) void RouteUI::set_invert_sensitive (bool yn) { - for (list::iterator b = _invert_buttons.begin(); b != _invert_buttons.end(); ++b) { + for (vector::iterator b = _invert_buttons.begin(); b != _invert_buttons.end(); ++b) { (*b)->set_sensitive (yn); } } diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h index 9420e4aa59..0501c78937 100644 --- a/gtk2_ardour/route_ui.h +++ b/gtk2_ardour/route_ui.h @@ -271,12 +271,12 @@ class RouteUI : public virtual AxisView void setup_invert_buttons (); void set_invert_button_state (); - void invert_toggled (uint32_t, ArdourButton *); void invert_menu_toggled (uint32_t); bool invert_press (GdkEventButton *); + bool invert_release (GdkEventButton *, uint32_t i); int _i_am_the_modifier; - std::list _invert_buttons; + std::vector _invert_buttons; Gtk::Menu* _invert_menu; static void set_showing_sends_to (boost::shared_ptr);