diff --git a/src/eventhandlerdsp.cxx b/src/eventhandlerdsp.cxx index 104a6ce..c15f5ba 100644 --- a/src/eventhandlerdsp.cxx +++ b/src/eventhandlerdsp.cxx @@ -232,7 +232,11 @@ void handleDspEvents() if ( availableRead >= sizeof(EventMetronomeActive) ) { EventMetronomeActive ev(false); jack_ringbuffer_read( rbToDsp, (char*)&ev, sizeof(EventMetronomeActive) ); - jack->getLogic()->metronomeEnable(ev.active); + if(!jack->getFreeRecMode()) { + jack->getLogic() + ->metronomeEnable( + ev.active); + } } break; } diff --git a/src/eventhandlergui.cxx b/src/eventhandlergui.cxx index 2f9900e..1d20ceb 100644 --- a/src/eventhandlergui.cxx +++ b/src/eventhandlergui.cxx @@ -120,7 +120,7 @@ void handleGuiEvents() if ( availableRead >= sizeof(EventMetronomeActive) ) { EventMetronomeActive ev(false); jack_ringbuffer_read( rbToGui, (char*)&ev, sizeof(EventMetronomeActive) ); - gui->getMasterTrack()->metronomeEnable(ev.active); + gui->getMasterTrack()->metronomeActivate(ev.active); } break; } @@ -143,6 +143,7 @@ void handleGuiEvents() sizeof(EventFreeRecordMode)); gui->getMasterTrack()->setFreeRecMode( e.enable); + gui->getMasterTrack()->metronomeEnable(!e.enable); } break; } diff --git a/src/gmastertrack.cxx b/src/gmastertrack.cxx index e8bb40d..d3c4e85 100644 --- a/src/gmastertrack.cxx +++ b/src/gmastertrack.cxx @@ -162,8 +162,7 @@ static void gmastertrack_button_callback(Fl_Widget *w, void *data) writeToDspRingbuffer( &e ); } else { Avtk::LightButton* b = (Avtk::LightButton*)w; - b->value( !b->value() ); - EventMetronomeActive e = EventMetronomeActive( b->value() ); + EventMetronomeActive e = EventMetronomeActive( !b->value() ); writeToDspRingbuffer( &e ); } @@ -367,9 +366,15 @@ void GMasterTrack::setInputToActive(int to, bool f) inputToSidechainKey.value( f ); } -void GMasterTrack::metronomeEnable( bool b ) -{ - metronomeButton.value( b ); +void GMasterTrack::metronomeEnable(bool b) { + if(b) + metronomeButton.activate(); + else + metronomeButton.deactivate(); +} + +void GMasterTrack::metronomeActivate(bool b) { + metronomeButton.value(b); } void diff --git a/src/gmastertrack.hxx b/src/gmastertrack.hxx index 33e52d0..8ab7a09 100644 --- a/src/gmastertrack.hxx +++ b/src/gmastertrack.hxx @@ -59,6 +59,7 @@ public: void setInputToActive(int to, bool f); void metronomeEnable( bool b ); + void metronomeActivate(bool b); void setClipLength(int l); void setFreeRecMode(bool e); diff --git a/src/jack.cxx b/src/jack.cxx index 10dabfa..cfde93f 100644 --- a/src/jack.cxx +++ b/src/jack.cxx @@ -790,4 +790,5 @@ void Jack::setFreeRecMode(bool e) EventFreeRecordMode ev = EventFreeRecordMode(e); writeToGuiRingbuffer(&ev); + getLogic()->metronomeEnable(false); } \ No newline at end of file