diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc index 20787cdad1..8d322f68d6 100644 --- a/gtk2_ardour/marker.cc +++ b/gtk2_ardour/marker.cc @@ -95,6 +95,10 @@ RangeMarker::RangeMarker (ARDOUR::Location* l, PublicEditor& editor, ArdourCanva setup_line (); use_color (); setup_name_display (); + + /* our appearance depends on some backend parameters, so pick up changes as necessary */ + + Config->ParameterChanged.connect (parameter_connection, invalidator (*this), boost::bind (&RangeMarker::parameter_changed, this, _1), gui_context()); } RangeMarker::~RangeMarker () @@ -102,6 +106,15 @@ RangeMarker::~RangeMarker () delete _end_line; } +void +RangeMarker::parameter_changed (const std::string& s) +{ + if (s == "skip-playback") { + /* reset our color to reflect global skip-playback setting */ + pick_basic_color (0); + } +} + void RangeMarker::use_color () { @@ -411,7 +424,7 @@ Marker::pick_basic_color (ArdourCanvas::Color c) } else if (_location->is_auto_punch()) { col = ARDOUR_UI::config()->get_canvasvar_LocationPunch(); } else if (_location->is_skip()) { - if (_location->is_skipping()) { + if (_location->is_skipping() && Config->get_skip_playback()) { col = ARDOUR_UI::config()->get_canvasvar_LocationSkipping(); } else { col = ARDOUR_UI::config()->get_canvasvar_LocationSkip(); diff --git a/gtk2_ardour/marker.h b/gtk2_ardour/marker.h index f6010ed468..78a9fc889b 100644 --- a/gtk2_ardour/marker.h +++ b/gtk2_ardour/marker.h @@ -169,12 +169,14 @@ class RangeMarker : public Marker void canvas_height_set (double); protected: - void bounds_changed (); - void _set_position (framepos_t, framepos_t); - framepos_t _end_frame; ArdourCanvas::Line* _end_line; Cairo::RefPtr _pattern; + PBD::ScopedConnection parameter_connection; + + void bounds_changed (); + void _set_position (framepos_t, framepos_t); + void parameter_changed (const std::string&); }; /** A variant on RangeMarker that is used to draw markers/locations on top of the ruler using