diff --git a/gtk2_ardour/canvas_vars.h b/gtk2_ardour/canvas_vars.h
index 85757e680f..dcf5be8fb6 100644
--- a/gtk2_ardour/canvas_vars.h
+++ b/gtk2_ardour/canvas_vars.h
@@ -58,6 +58,7 @@ CANVAS_VARIABLE(canvasvar_LocationLoop, "location loop")
CANVAS_VARIABLE(canvasvar_LocationMarker, "location marker")
CANVAS_VARIABLE(canvasvar_LocationPunch, "location punch")
CANVAS_VARIABLE(canvasvar_LocationSkip, "location skip")
+CANVAS_VARIABLE(canvasvar_LocationSkipping, "location skipping")
CANVAS_VARIABLE(canvasvar_LocationRange, "location range")
CANVAS_VARIABLE(canvasvar_MarkerBar, "marker bar")
CANVAS_VARIABLE(canvasvar_MarkerBarSeparator, "marker bar separator")
diff --git a/gtk2_ardour/default_ui_config.in b/gtk2_ardour/default_ui_config.in
index 86d8337e38..8687c13f51 100644
--- a/gtk2_ardour/default_ui_config.in
+++ b/gtk2_ardour/default_ui_config.in
@@ -47,10 +47,11 @@
-
+
-
+
+
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index abb2662b7b..779c40af2c 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -3419,13 +3419,24 @@ void
MarkerDrag::finished (GdkEvent* event, bool movement_occurred)
{
if (!movement_occurred) {
-
+
if (was_double_click()) {
_editor->rename_marker (_marker);
return;
}
- /* just a click, do nothing but finish
+ /* just a single click */
+
+ Location* loc = _marker->location ();
+ if (loc) {
+ if (loc->is_skip()) {
+ /* skip range - click toggles active skip status */
+ loc->set_skipping (!loc->is_skipping());
+ return;
+ }
+ }
+
+ /* other markers: do nothing but finish
off the selection process
*/
@@ -4550,7 +4561,7 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred)
if (_operation == CreateSkipMarker) {
_editor->begin_reversible_command (_("new skip marker"));
_editor->session()->locations()->next_available_name(rangename,_("skip "));
- flags = Location::IsRangeMarker | Location::IsSkip;
+ flags = Location::IsRangeMarker | Location::IsSkip | Location::IsSkipping;
_editor->skip_drag_rect->hide();
} else if (_operation == CreateCDMarker) {
_editor->session()->locations()->next_available_name(rangename, _("CD"));
@@ -4559,7 +4570,7 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred)
_editor->cd_marker_bar_drag_rect->hide();
} else {
_editor->begin_reversible_command (_("new range marker"));
- _editor->session()->locations()->next_available_name(rangename, _("Marker "));
+ _editor->session()->locations()->next_available_name (rangename, _(Marker::default_new_marker_prefix));
flags = Location::IsRangeMarker;
_editor->range_bar_drag_rect->hide();
}
diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc
index 57154fff7b..b39ce9e374 100644
--- a/gtk2_ardour/marker.cc
+++ b/gtk2_ardour/marker.cc
@@ -40,6 +40,7 @@
* due to a conflicting definition of 'Rect' between
* Apple's MacTypes.h and GTK.
*/
+#include "gui_thread.h"
#include "marker.h"
#include "public_editor.h"
#include "utils.h"
@@ -300,6 +301,10 @@ Marker::Marker (ARDOUR::Location* l, PublicEditor& ed, ArdourCanvas::Container&
set_name (annotation);
pick_basic_color (rgba);
use_color ();
+
+ if (_location) {
+ _location->FlagsChanged.connect (flags_changed_connection, MISSING_INVALIDATOR, boost::bind (&Marker::flags_changed, this), gui_context());
+ }
}
Marker::~Marker ()
@@ -317,6 +322,12 @@ void Marker::reparent(ArdourCanvas::Container & parent)
_parent = &parent;
}
+void
+Marker::flags_changed ()
+{
+ pick_basic_color (0);
+}
+
void
Marker::set_color (ArdourCanvas::Color c)
{
@@ -345,7 +356,11 @@ 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()) {
- col = ARDOUR_UI::config()->get_canvasvar_LocationSkip();
+ if (_location->is_skipping()) {
+ col = ARDOUR_UI::config()->get_canvasvar_LocationSkipping();
+ } else {
+ col = ARDOUR_UI::config()->get_canvasvar_LocationSkip();
+ }
} else {
col = ARDOUR_UI::config()->get_canvasvar_LocationRange();
}
diff --git a/gtk2_ardour/marker.h b/gtk2_ardour/marker.h
index 59a00ebd98..5cc0d1f448 100644
--- a/gtk2_ardour/marker.h
+++ b/gtk2_ardour/marker.h
@@ -65,6 +65,7 @@ class Marker : public sigc::trackable
static PBD::Signal1 CatchDeletion;
ArdourCanvas::Item& the_item() const;
+ ARDOUR::Location* location() const { return _location; }
void set_has_scene_change (bool);
@@ -127,6 +128,7 @@ class Marker : public sigc::trackable
double _label_offset;
bool _have_scene_change;
+ void flags_changed ();
void pick_basic_color (ArdourCanvas::Color);
virtual void use_color ();
void reposition ();
@@ -139,6 +141,8 @@ private:
/* disallow copy construction */
Marker (Marker const &);
Marker & operator= (Marker const &);
+
+ PBD::ScopedConnection flags_changed_connection;
};
/** A Marker that displays a range (start+end) rather than a single location