avoid .h pollution in last commit
[ardour.git] / gtk2_ardour / editor_mouse.cc
index 164f09dfcf347c1ef522a06682b4022ff82daa9f..52105155417dd9fd90336da1f529f40fed3261af 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
-    Copyright (C) 2000-2001 Paul Davis 
+    Copyright (C) 2000-2001 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -67,6 +67,7 @@
 #include "ardour/utils.h"
 #include "ardour/region_factory.h"
 #include "ardour/source_factory.h"
 #include "ardour/utils.h"
 #include "ardour/region_factory.h"
 #include "ardour/source_factory.h"
+#include "ardour/session.h"
 
 #include <bitset>
 
 
 #include <bitset>
 
@@ -91,7 +92,7 @@ Editor::mouse_frame (nframes64_t& where, bool& in_track_canvas) const
        if (!canvas_window) {
                return false;
        }
        if (!canvas_window) {
                return false;
        }
-       
+
        pointer_window = canvas_window->get_pointer (x, y, mask);
 
        if (pointer_window == track_canvas->get_bin_window()) {
        pointer_window = canvas_window->get_pointer (x, y, mask);
 
        if (pointer_window == track_canvas->get_bin_window()) {
@@ -108,7 +109,7 @@ Editor::mouse_frame (nframes64_t& where, bool& in_track_canvas) const
        event.type = GDK_BUTTON_RELEASE;
        event.button.x = wx;
        event.button.y = wy;
        event.type = GDK_BUTTON_RELEASE;
        event.button.x = wx;
        event.button.y = wy;
-       
+
        where = event_frame (&event, 0, 0);
        return true;
 }
        where = event_frame (&event, 0, 0);
        return true;
 }
@@ -139,7 +140,7 @@ Editor::event_frame (GdkEvent const * event, double* pcx, double* pcy) const
                _trackview_group->w2i(*pcx, *pcy);
                break;
        case GDK_MOTION_NOTIFY:
                _trackview_group->w2i(*pcx, *pcy);
                break;
        case GDK_MOTION_NOTIFY:
-       
+
                *pcx = event->motion.x;
                *pcy = event->motion.y;
                _trackview_group->w2i(*pcx, *pcy);
                *pcx = event->motion.x;
                *pcy = event->motion.y;
                _trackview_group->w2i(*pcx, *pcy);
@@ -161,7 +162,7 @@ Editor::event_frame (GdkEvent const * event, double* pcx, double* pcy) const
           position is negative (as can be the case with motion events in particular),
           the frame location is always positive.
        */
           position is negative (as can be the case with motion events in particular),
           the frame location is always positive.
        */
-       
+
        return pixel_to_frame (*pcx);
 }
 
        return pixel_to_frame (*pcx);
 }
 
@@ -175,11 +176,11 @@ Editor::which_grabber_cursor ()
                case MouseRange:
                        c = midi_pencil_cursor;
                        break;
                case MouseRange:
                        c = midi_pencil_cursor;
                        break;
-                       
+
                case MouseObject:
                        c = grabber_cursor;
                        break;
                case MouseObject:
                        c = grabber_cursor;
                        break;
-                       
+
                case MouseTimeFX:
                        c = midi_resize_cursor;
                        break;
                case MouseTimeFX:
                        c = midi_resize_cursor;
                        break;
@@ -211,11 +212,11 @@ Editor::set_canvas_cursor ()
                case MouseRange:
                        current_canvas_cursor = midi_pencil_cursor;
                        break;
                case MouseRange:
                        current_canvas_cursor = midi_pencil_cursor;
                        break;
-                       
+
                case MouseObject:
                        current_canvas_cursor = which_grabber_cursor();
                        break;
                case MouseObject:
                        current_canvas_cursor = which_grabber_cursor();
                        break;
-                       
+
                case MouseTimeFX:
                        current_canvas_cursor = midi_resize_cursor;
                        break;
                case MouseTimeFX:
                        current_canvas_cursor = midi_resize_cursor;
                        break;
@@ -230,23 +231,23 @@ Editor::set_canvas_cursor ()
                case MouseRange:
                        current_canvas_cursor = selector_cursor;
                        break;
                case MouseRange:
                        current_canvas_cursor = selector_cursor;
                        break;
-                       
+
                case MouseObject:
                        current_canvas_cursor = which_grabber_cursor();
                        break;
                case MouseObject:
                        current_canvas_cursor = which_grabber_cursor();
                        break;
-                       
+
                case MouseGain:
                        current_canvas_cursor = cross_hair_cursor;
                        break;
                case MouseGain:
                        current_canvas_cursor = cross_hair_cursor;
                        break;
-                       
+
                case MouseZoom:
                        current_canvas_cursor = zoom_cursor;
                        break;
                case MouseZoom:
                        current_canvas_cursor = zoom_cursor;
                        break;
-                       
+
                case MouseTimeFX:
                        current_canvas_cursor = time_fx_cursor; // just use playhead
                        break;
                case MouseTimeFX:
                        current_canvas_cursor = time_fx_cursor; // just use playhead
                        break;
-                       
+
                case MouseAudition:
                        current_canvas_cursor = speaker_cursor;
                        break;
                case MouseAudition:
                        current_canvas_cursor = speaker_cursor;
                        break;
@@ -329,7 +330,7 @@ Editor::mouse_mode_toggled (MouseMode m)
 
        } else {
 
 
        } else {
 
-               /* 
+               /*
                   in range mode,show the range selection.
                */
 
                   in range mode,show the range selection.
                */
 
@@ -379,12 +380,12 @@ Editor::step_mouse_mode (bool next)
                        }
                }
                break;
                        }
                }
                break;
-       
+
        case MouseGain:
                if (next) set_mouse_mode (MouseTimeFX);
                else set_mouse_mode (MouseZoom);
                break;
        case MouseGain:
                if (next) set_mouse_mode (MouseTimeFX);
                else set_mouse_mode (MouseZoom);
                break;
-       
+
        case MouseTimeFX:
                if (next) {
                        set_mouse_mode (MouseAudition);
        case MouseTimeFX:
                if (next) {
                        set_mouse_mode (MouseAudition);
@@ -423,16 +424,16 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
             (mouse_mode != MouseRange)) ||
 
            ((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3)) {
             (mouse_mode != MouseRange)) ||
 
            ((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3)) {
-               
+
                return;
        }
 
        if (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) {
 
                if ((event->button.state & Keyboard::RelevantModifierKeyMask) && event->button.button != 1) {
                return;
        }
 
        if (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) {
 
                if ((event->button.state & Keyboard::RelevantModifierKeyMask) && event->button.button != 1) {
-                       
+
                        /* almost no selection action on modified button-2 or button-3 events */
                        /* almost no selection action on modified button-2 or button-3 events */
-               
+
                        if (item_type != RegionItem && event->button.button != 2) {
                                return;
                        }
                        if (item_type != RegionItem && event->button.button != 2) {
                                return;
                        }
@@ -443,7 +444,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
        bool press = (event->type == GDK_BUTTON_PRESS);
 
        // begin_reversible_command (_("select on click"));
        bool press = (event->type == GDK_BUTTON_PRESS);
 
        // begin_reversible_command (_("select on click"));
-       
+
        switch (item_type) {
        case RegionItem:
                if (mouse_mode != MouseRange) {
        switch (item_type) {
        case RegionItem:
                if (mouse_mode != MouseRange) {
@@ -452,7 +453,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
                        set_selected_track_as_side_effect ();
                }
                break;
                        set_selected_track_as_side_effect ();
                }
                break;
-               
+
        case RegionViewNameHighlight:
        case RegionViewName:
                if (mouse_mode != MouseRange) {
        case RegionViewNameHighlight:
        case RegionViewName:
                if (mouse_mode != MouseRange) {
@@ -480,7 +481,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
                        set_selected_control_point_from_click (op, false);
                }
                break;
                        set_selected_control_point_from_click (op, false);
                }
                break;
-               
+
        case StreamItem:
                /* for context click or range selection, select track */
                if (event->button.button == 3) {
        case StreamItem:
                /* for context click or range selection, select track */
                if (event->button.button == 3) {
@@ -489,11 +490,11 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
                        set_selected_track_as_side_effect ();
                }
                break;
                        set_selected_track_as_side_effect ();
                }
                break;
-                   
+
        case AutomationTrackItem:
                set_selected_track_as_side_effect (true);
                break;
        case AutomationTrackItem:
                set_selected_track_as_side_effect (true);
                break;
-               
+
        default:
                break;
        }
        default:
                break;
        }
@@ -504,21 +505,23 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 {
        if (_drag) {
                _drag->item()->ungrab (event->button.time);
 {
        if (_drag) {
                _drag->item()->ungrab (event->button.time);
+               delete _drag;
+               _drag = 0;
        }
        }
-       
+
        /* single mouse clicks on any of these item types operate
           independent of mouse mode, mostly because they are
           not on the main track canvas or because we want
           them to be modeless.
        */
        /* single mouse clicks on any of these item types operate
           independent of mouse mode, mostly because they are
           not on the main track canvas or because we want
           them to be modeless.
        */
-       
+
        switch (item_type) {
        case PlayheadCursorItem:
                assert (_drag == 0);
                _drag = new CursorDrag (this, item, true);
                _drag->start_grab (event);
                return true;
        switch (item_type) {
        case PlayheadCursorItem:
                assert (_drag == 0);
                _drag = new CursorDrag (this, item, true);
                _drag->start_grab (event);
                return true;
-               
+
        case MarkerItem:
                if (Keyboard::modifier_state_equals (event->button.state, Keyboard::ModifierMask(Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
                        hide_marker (item, event);
        case MarkerItem:
                if (Keyboard::modifier_state_equals (event->button.state, Keyboard::ModifierMask(Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
                        hide_marker (item, event);
@@ -528,7 +531,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        _drag->start_grab (event);
                }
                return true;
                        _drag->start_grab (event);
                }
                return true;
-               
+
        case TempoMarkerItem:
                assert (_drag == 0);
                _drag = new TempoMarkerDrag (
        case TempoMarkerItem:
                assert (_drag == 0);
                _drag = new TempoMarkerDrag (
@@ -538,17 +541,17 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        );
                _drag->start_grab (event);
                return true;
                        );
                _drag->start_grab (event);
                return true;
-               
+
        case MeterMarkerItem:
                assert (_drag == 0);
                _drag = new MeterMarkerDrag (
                        this,
        case MeterMarkerItem:
                assert (_drag == 0);
                _drag = new MeterMarkerDrag (
                        this,
-                       item, 
+                       item,
                        Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)
                        );
                _drag->start_grab (event);
                return true;
                        Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)
                        );
                _drag->start_grab (event);
                return true;
-               
+
        case MarkerBarItem:
        case TempoBarItem:
        case MeterBarItem:
        case MarkerBarItem:
        case TempoBarItem:
        case MeterBarItem:
@@ -560,18 +563,18 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                return true;
                break;
 
                return true;
                break;
 
-                               
+
        case RangeMarkerBarItem:
                assert (_drag == 0);
                if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
                        _drag = new CursorDrag (this, &playhead_cursor->canvas_item, false);
                } else {
        case RangeMarkerBarItem:
                assert (_drag == 0);
                if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
                        _drag = new CursorDrag (this, &playhead_cursor->canvas_item, false);
                } else {
-                       _drag = new RangeMarkerBarDrag (this, item, RangeMarkerBarDrag::CreateRangeMarker); 
-               }       
+                       _drag = new RangeMarkerBarDrag (this, item, RangeMarkerBarDrag::CreateRangeMarker);
+               }
                _drag->start_grab (event);
                return true;
                break;
                _drag->start_grab (event);
                return true;
                break;
-               
+
        case CdMarkerBarItem:
                assert (_drag == 0);
                if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
        case CdMarkerBarItem:
                assert (_drag == 0);
                if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
@@ -582,7 +585,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                _drag->start_grab (event);
                return true;
                break;
                _drag->start_grab (event);
                return true;
                break;
-               
+
        case TransportMarkerBarItem:
                assert (_drag == 0);
                if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
        case TransportMarkerBarItem:
                assert (_drag == 0);
                if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
@@ -593,11 +596,11 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                _drag->start_grab (event);
                return true;
                break;
                _drag->start_grab (event);
                return true;
                break;
-               
+
        default:
                break;
        }
        default:
                break;
        }
-       
+
        if (internal_editing()) {
                switch (item_type) {
                case StreamItem:
        if (internal_editing()) {
                switch (item_type) {
                case StreamItem:
@@ -605,6 +608,22 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        _drag = new RegionCreateDrag (this, item, clicked_axisview);
                        _drag->start_grab (event);
                        return true;
                        _drag = new RegionCreateDrag (this, item, clicked_axisview);
                        _drag->start_grab (event);
                        return true;
+               case NoteItem:
+                       /* Note: we don't get here if not in internal_editing() mode */
+                       if (mouse_mode == MouseTimeFX) {
+                               assert (_drag == 0);
+                               _drag = new NoteResizeDrag (this, item);
+                               _drag->start_grab (event);
+                               return true;
+                       } else if (mouse_mode == MouseObject) {
+                               assert (_drag == 0);
+                               _drag = new NoteDrag (this, item);
+                               _drag->start_grab (event);
+                               return true;
+                       } else {
+                               return false;
+                       }
+                       break;
                default:
                        return true;
                }
                default:
                        return true;
                }
@@ -617,15 +636,15 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                _drag = new SelectionDrag (this, item, SelectionDrag::SelectionStartTrim);
                                _drag->start_grab (event);
                                break;
                                _drag = new SelectionDrag (this, item, SelectionDrag::SelectionStartTrim);
                                _drag->start_grab (event);
                                break;
-                               
+
                        case EndSelectionTrimItem:
                                assert (_drag == 0);
                                _drag = new SelectionDrag (this, item, SelectionDrag::SelectionEndTrim);
                                _drag->start_grab (event);
                                break;
                        case EndSelectionTrimItem:
                                assert (_drag == 0);
                                _drag = new SelectionDrag (this, item, SelectionDrag::SelectionEndTrim);
                                _drag->start_grab (event);
                                break;
-                               
+
                        case SelectionItem:
                        case SelectionItem:
-                               if (Keyboard::modifier_state_contains 
+                               if (Keyboard::modifier_state_contains
                                    (event->button.state, Keyboard::ModifierMask(Keyboard::SecondaryModifier))) {
                                        // contains and not equals because I can't use alt as a modifier alone.
                                        start_selection_grab (item, event);
                                    (event->button.state, Keyboard::ModifierMask(Keyboard::SecondaryModifier))) {
                                        // contains and not equals because I can't use alt as a modifier alone.
                                        start_selection_grab (item, event);
@@ -642,7 +661,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                        _drag->start_grab (event);
                                }
                                break;
                                        _drag->start_grab (event);
                                }
                                break;
-                               
+
                        default:
                                assert (_drag == 0);
                                _drag = new SelectionDrag (this, item, SelectionDrag::CreateSelection);
                        default:
                                assert (_drag == 0);
                                _drag = new SelectionDrag (this, item, SelectionDrag::CreateSelection);
@@ -650,17 +669,17 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        }
                        return true;
                        break;
                        }
                        return true;
                        break;
-                       
+
                case MouseObject:
                        if (Keyboard::modifier_state_contains (event->button.state, Keyboard::ModifierMask(Keyboard::PrimaryModifier|Keyboard::SecondaryModifier)) &&
                            event->type == GDK_BUTTON_PRESS) {
                case MouseObject:
                        if (Keyboard::modifier_state_contains (event->button.state, Keyboard::ModifierMask(Keyboard::PrimaryModifier|Keyboard::SecondaryModifier)) &&
                            event->type == GDK_BUTTON_PRESS) {
-                               
+
                                assert (_drag == 0);
                                _drag = new RubberbandSelectDrag (this, item);
                                _drag->start_grab (event);
                                assert (_drag == 0);
                                _drag = new RubberbandSelectDrag (this, item);
                                _drag->start_grab (event);
-                               
+
                        } else if (event->type == GDK_BUTTON_PRESS) {
                        } else if (event->type == GDK_BUTTON_PRESS) {
-                               
+
                                switch (item_type) {
                                case FadeInHandleItem:
                                {
                                switch (item_type) {
                                case FadeInHandleItem:
                                {
@@ -670,7 +689,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                        _drag->start_grab (event);
                                        return true;
                                }
                                        _drag->start_grab (event);
                                        return true;
                                }
-                               
+
                                case FadeOutHandleItem:
                                {
                                        assert (_drag == 0);
                                case FadeOutHandleItem:
                                {
                                        assert (_drag == 0);
@@ -679,7 +698,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                        _drag->start_grab (event);
                                        return true;
                                }
                                        _drag->start_grab (event);
                                        return true;
                                }
-                               
+
                                case RegionItem:
                                        if (Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)) {
                                                start_region_copy_grab (item, event, clicked_regionview);
                                case RegionItem:
                                        if (Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)) {
                                                start_region_copy_grab (item, event, clicked_regionview);
@@ -689,7 +708,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                                start_region_grab (item, event, clicked_regionview);
                                        }
                                        break;
                                                start_region_grab (item, event, clicked_regionview);
                                        }
                                        break;
-                                       
+
                                case RegionViewNameHighlight:
                                {
                                        assert (_drag == 0);
                                case RegionViewNameHighlight:
                                {
                                        assert (_drag == 0);
@@ -699,7 +718,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                        return true;
                                        break;
                                }
                                        return true;
                                        break;
                                }
-                               
+
                                case RegionViewName:
                                {
                                        /* rename happens on edit clicks */
                                case RegionViewName:
                                {
                                        /* rename happens on edit clicks */
@@ -710,14 +729,14 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                        return true;
                                        break;
                                }
                                        return true;
                                        break;
                                }
-                               
+
                                case ControlPointItem:
                                        assert (_drag == 0);
                                        _drag = new ControlPointDrag (this, item);
                                        _drag->start_grab (event);
                                        return true;
                                        break;
                                case ControlPointItem:
                                        assert (_drag == 0);
                                        _drag = new ControlPointDrag (this, item);
                                        _drag->start_grab (event);
                                        return true;
                                        break;
-                                       
+
                                case AutomationLineItem:
                                        assert (_drag == 0);
                                        _drag = new LineDrag (this, item);
                                case AutomationLineItem:
                                        assert (_drag == 0);
                                        _drag = new LineDrag (this, item);
@@ -731,7 +750,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                        _drag = new RubberbandSelectDrag (this, item);
                                        _drag->start_grab (event);
                                        break;
                                        _drag = new RubberbandSelectDrag (this, item);
                                        _drag->start_grab (event);
                                        break;
-                                       
+
 #ifdef WITH_CMT
                                case ImageFrameHandleStartItem:
                                        imageframe_start_handle_op(item, event) ;
 #ifdef WITH_CMT
                                case ImageFrameHandleStartItem:
                                        imageframe_start_handle_op(item, event) ;
@@ -756,18 +775,18 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                        start_imageframe_grab(item, event) ;
                                        break ;
 #endif
                                        start_imageframe_grab(item, event) ;
                                        break ;
 #endif
-                                       
+
                                case MarkerBarItem:
                                case MarkerBarItem:
-                                       
+
                                        break;
                                        break;
-                                       
+
                                default:
                                        break;
                                }
                        }
                        return true;
                        break;
                                default:
                                        break;
                                }
                        }
                        return true;
                        break;
-                       
+
                case MouseGain:
                        switch (item_type) {
                        case RegionItem:
                case MouseGain:
                        switch (item_type) {
                        case RegionItem:
@@ -778,61 +797,61 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                _drag = new RegionGainDrag (this, item);
                                _drag->start_grab (event, current_canvas_cursor);
                                break;
                                _drag = new RegionGainDrag (this, item);
                                _drag->start_grab (event, current_canvas_cursor);
                                break;
-                               
+
                        case GainLineItem:
                                assert (_drag == 0);
                                _drag = new LineDrag (this, item);
                                _drag->start_grab (event);
                                return true;
                        case GainLineItem:
                                assert (_drag == 0);
                                _drag = new LineDrag (this, item);
                                _drag->start_grab (event);
                                return true;
-                               
+
                        case ControlPointItem:
                                assert (_drag == 0);
                                _drag = new ControlPointDrag (this, item);
                                _drag->start_grab (event);
                                return true;
                                break;
                        case ControlPointItem:
                                assert (_drag == 0);
                                _drag = new ControlPointDrag (this, item);
                                _drag->start_grab (event);
                                return true;
                                break;
-                               
+
                        default:
                                break;
                        }
                        return true;
                        break;
                        default:
                                break;
                        }
                        return true;
                        break;
-                       
+
                        switch (item_type) {
                        case ControlPointItem:
                                assert (_drag == 0);
                                _drag = new ControlPointDrag (this, item);
                                _drag->start_grab (event);
                                break;
                        switch (item_type) {
                        case ControlPointItem:
                                assert (_drag == 0);
                                _drag = new ControlPointDrag (this, item);
                                _drag->start_grab (event);
                                break;
-                               
+
                        case AutomationLineItem:
                                assert (_drag == 0);
                                _drag = new LineDrag (this, item);
                                _drag->start_grab (event);
                                break;
                        case AutomationLineItem:
                                assert (_drag == 0);
                                _drag = new LineDrag (this, item);
                                _drag->start_grab (event);
                                break;
-                               
+
                        case RegionItem:
                                // XXX need automation mode to identify which
                                // line to use
                                // start_line_grab_from_regionview (item, event);
                                break;
                        case RegionItem:
                                // XXX need automation mode to identify which
                                // line to use
                                // start_line_grab_from_regionview (item, event);
                                break;
-                               
+
                        default:
                                break;
                        }
                        return true;
                        break;
                        default:
                                break;
                        }
                        return true;
                        break;
-                       
+
                case MouseZoom:
                        if (event->type == GDK_BUTTON_PRESS) {
                                assert (_drag == 0);
                                _drag = new MouseZoomDrag (this, item);
                                _drag->start_grab (event);
                        }
                case MouseZoom:
                        if (event->type == GDK_BUTTON_PRESS) {
                                assert (_drag == 0);
                                _drag = new MouseZoomDrag (this, item);
                                _drag->start_grab (event);
                        }
-                       
+
                        return true;
                        break;
                        return true;
                        break;
-                       
+
                case MouseTimeFX:
                        if (item_type == RegionItem) {
                                assert (_drag == 0);
                case MouseTimeFX:
                        if (item_type == RegionItem) {
                                assert (_drag == 0);
@@ -840,7 +859,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                _drag->start_grab (event);
                        }
                        break;
                                _drag->start_grab (event);
                        }
                        break;
-                       
+
                case MouseAudition:
                        _drag = new ScrubDrag (this, item);
                        _drag->start_grab (event);
                case MouseAudition:
                        _drag = new ScrubDrag (this, item);
                        _drag->start_grab (event);
@@ -850,7 +869,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        scrubbing_direction = 0;
                        track_canvas->get_window()->set_cursor (*transparent_cursor);
                        break;
                        scrubbing_direction = 0;
                        track_canvas->get_window()->set_cursor (*transparent_cursor);
                        break;
-                       
+
                default:
                        break;
                }
                default:
                        break;
                }
@@ -879,11 +898,11 @@ Editor::button_press_handler_2 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        _drag->start_grab (event);
                        return true;
                        break;
                        _drag->start_grab (event);
                        return true;
                        break;
-                       
+
                default:
                        break;
                }
                default:
                        break;
                }
-                       
+
                switch (item_type) {
                case RegionViewNameHighlight:
                        assert (_drag == 0);
                switch (item_type) {
                case RegionViewNameHighlight:
                        assert (_drag == 0);
@@ -891,26 +910,26 @@ Editor::button_press_handler_2 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        _drag->start_grab (event);
                        return true;
                        break;
                        _drag->start_grab (event);
                        return true;
                        break;
-                       
+
                case RegionViewName:
                        assert (_drag == 0);
                        _drag = new TrimDrag (this, clicked_regionview->get_name_highlight(), clicked_regionview, selection->regions.by_layer());
                        _drag->start_grab (event);
                        return true;
                        break;
                case RegionViewName:
                        assert (_drag == 0);
                        _drag = new TrimDrag (this, clicked_regionview->get_name_highlight(), clicked_regionview, selection->regions.by_layer());
                        _drag->start_grab (event);
                        return true;
                        break;
-                       
+
                default:
                        break;
                }
                default:
                        break;
                }
-               
+
                break;
 
        case MouseRange:
                /* relax till release */
                return true;
                break;
                break;
 
        case MouseRange:
                /* relax till release */
                return true;
                break;
-               
-               
+
+
        case MouseZoom:
                if (Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
                        temporal_zoom_session();
        case MouseZoom:
                if (Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
                        temporal_zoom_session();
@@ -919,7 +938,7 @@ Editor::button_press_handler_2 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                }
                return true;
                break;
                }
                return true;
                break;
-               
+
        default:
                break;
        }
        default:
                break;
        }
@@ -933,7 +952,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
        if (event->type != GDK_BUTTON_PRESS) {
                return false;
        }
        if (event->type != GDK_BUTTON_PRESS) {
                return false;
        }
-       
+
        Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->track_canvas->get_window();
 
        if (canvas_window) {
        Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->track_canvas->get_window();
 
        if (canvas_window) {
@@ -943,7 +962,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
                Gdk::ModifierType mask;
 
                pointer_window = canvas_window->get_pointer (x, y, mask);
                Gdk::ModifierType mask;
 
                pointer_window = canvas_window->get_pointer (x, y, mask);
-               
+
                if (pointer_window == track_canvas->get_bin_window()) {
                        track_canvas->window_to_world (x, y, wx, wy);
                        allow_vertical_scroll = true;
                if (pointer_window == track_canvas->get_bin_window()) {
                        track_canvas->window_to_world (x, y, wx, wy);
                        allow_vertical_scroll = true;
@@ -964,7 +983,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
            (Keyboard::is_delete_event (&event->button) ||
             Keyboard::is_context_menu_event (&event->button) ||
             Keyboard::is_edit_event (&event->button))) {
            (Keyboard::is_delete_event (&event->button) ||
             Keyboard::is_context_menu_event (&event->button) ||
             Keyboard::is_edit_event (&event->button))) {
-               
+
                /* handled by button release */
                return true;
        }
                /* handled by button release */
                return true;
        }
@@ -994,9 +1013,9 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 {
        nframes64_t where = event_frame (event, 0, 0);
        AutomationTimeAxisView* atv = 0;
 {
        nframes64_t where = event_frame (event, 0, 0);
        AutomationTimeAxisView* atv = 0;
-       
+
        /* no action if we're recording */
        /* no action if we're recording */
-                                               
+
        if (session && session->actively_recording()) {
                return true;
        }
        if (session && session->actively_recording()) {
                return true;
        }
@@ -1015,7 +1034,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 
                were_dragging = true;
        }
 
                were_dragging = true;
        }
-       
+
        button_selection (item, event, item_type);
 
        /* edit events get handled here */
        button_selection (item, event, item_type);
 
        /* edit events get handled here */
@@ -1029,11 +1048,11 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                case TempoMarkerItem:
                        edit_tempo_marker (item);
                        break;
                case TempoMarkerItem:
                        edit_tempo_marker (item);
                        break;
-                       
+
                case MeterMarkerItem:
                        edit_meter_marker (item);
                        break;
                case MeterMarkerItem:
                        edit_meter_marker (item);
                        break;
-                       
+
                case RegionViewName:
                        if (clicked_regionview->name_active()) {
                                return mouse_rename_region (item, event);
                case RegionViewName:
                        if (clicked_regionview->name_active()) {
                                return mouse_rename_region (item, event);
@@ -1067,17 +1086,17 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        case FadeOutHandleItem:
                                popup_fade_context_menu (1, event->button.time, item, item_type);
                                break;
                        case FadeOutHandleItem:
                                popup_fade_context_menu (1, event->button.time, item, item_type);
                                break;
-                       
+
                        case StreamItem:
                                popup_track_context_menu (1, event->button.time, item_type, false, where);
                                break;
                        case StreamItem:
                                popup_track_context_menu (1, event->button.time, item_type, false, where);
                                break;
-                               
+
                        case RegionItem:
                        case RegionViewNameHighlight:
                        case RegionViewName:
                                popup_track_context_menu (1, event->button.time, item_type, false, where);
                                break;
                        case RegionItem:
                        case RegionViewNameHighlight:
                        case RegionViewName:
                                popup_track_context_menu (1, event->button.time, item_type, false, where);
                                break;
-                               
+
                        case SelectionItem:
                                popup_track_context_menu (1, event->button.time, item_type, true, where);
                                break;
                        case SelectionItem:
                                popup_track_context_menu (1, event->button.time, item_type, true, where);
                                break;
@@ -1086,8 +1105,8 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                popup_track_context_menu (1, event->button.time, item_type, false, where);
                                break;
 
                                popup_track_context_menu (1, event->button.time, item_type, false, where);
                                break;
 
-                       case MarkerBarItem: 
-                       case RangeMarkerBarItem: 
+                       case MarkerBarItem:
+                       case RangeMarkerBarItem:
                        case TransportMarkerBarItem:
                        case CdMarkerBarItem:
                        case TempoBarItem:
                        case TransportMarkerBarItem:
                        case CdMarkerBarItem:
                        case TempoBarItem:
@@ -1102,11 +1121,11 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        case TempoMarkerItem:
                                tm_marker_context_menu (&event->button, item);
                                break;
                        case TempoMarkerItem:
                                tm_marker_context_menu (&event->button, item);
                                break;
-                               
+
                        case MeterMarkerItem:
                                tm_marker_context_menu (&event->button, item);
                                break;
                        case MeterMarkerItem:
                                tm_marker_context_menu (&event->button, item);
                                break;
-                       
+
                        case CrossfadeViewItem:
                                popup_track_context_menu (1, event->button.time, item_type, false, where);
                                break;
                        case CrossfadeViewItem:
                                popup_track_context_menu (1, event->button.time, item_type, false, where);
                                break;
@@ -1125,7 +1144,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                popup_marker_time_axis_edit_menu(1, event->button.time, item, false) ;
                                break ;
 #endif
                                popup_marker_time_axis_edit_menu(1, event->button.time, item, false) ;
                                break ;
 #endif
-                               
+
                        default:
                                break;
                        }
                        default:
                                break;
                        }
@@ -1142,7 +1161,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                case TempoMarkerItem:
                        remove_tempo_marker (item);
                        break;
                case TempoMarkerItem:
                        remove_tempo_marker (item);
                        break;
-                       
+
                case MeterMarkerItem:
                        remove_meter_marker (item);
                        break;
                case MeterMarkerItem:
                        remove_meter_marker (item);
                        break;
@@ -1156,7 +1175,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                remove_clicked_region ();
                        }
                        break;
                                remove_clicked_region ();
                        }
                        break;
-                       
+
                case ControlPointItem:
                        if (mouse_mode == MouseGain) {
                                remove_gain_control_point (item, event);
                case ControlPointItem:
                        if (mouse_mode == MouseGain) {
                                remove_gain_control_point (item, event);
@@ -1205,18 +1224,18 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                mouse_add_new_tempo_event (where);
                        }
                        return true;
                                mouse_add_new_tempo_event (where);
                        }
                        return true;
-                       
+
                case MeterBarItem:
                        if (!_dragging_playhead) {
                                mouse_add_new_meter_event (pixel_to_frame (event->button.x));
                case MeterBarItem:
                        if (!_dragging_playhead) {
                                mouse_add_new_meter_event (pixel_to_frame (event->button.x));
-                       } 
+                       }
                        return true;
                        break;
 
                default:
                        break;
                }
                        return true;
                        break;
 
                default:
                        break;
                }
-               
+
                switch (mouse_mode) {
                case MouseObject:
                        switch (item_type) {
                switch (mouse_mode) {
                case MouseObject:
                        switch (item_type) {
@@ -1224,11 +1243,10 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                atv = dynamic_cast<AutomationTimeAxisView*>(clicked_axisview);
                                if (atv) {
                                        atv->add_automation_event (item, event, where, event->button.y);
                                atv = dynamic_cast<AutomationTimeAxisView*>(clicked_axisview);
                                if (atv) {
                                        atv->add_automation_event (item, event, where, event->button.y);
-                               } 
+                               }
                                return true;
                                return true;
-                               
                                break;
                                break;
-                               
+
                        default:
                                break;
                        }
                        default:
                                break;
                        }
@@ -1252,7 +1270,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                }
                                return true;
                                break;
                                }
                                return true;
                                break;
-                               
+
                        case AutomationTrackItem:
                                dynamic_cast<AutomationTimeAxisView*>(clicked_axisview)->
                                        add_automation_event (item, event, where, event->button.y);
                        case AutomationTrackItem:
                                dynamic_cast<AutomationTimeAxisView*>(clicked_axisview)->
                                        add_automation_event (item, event, where, event->button.y);
@@ -1262,7 +1280,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                break;
                        }
                        break;
                                break;
                        }
                        break;
-                       
+
                case MouseAudition:
                        track_canvas->get_window()->set_cursor (*current_canvas_cursor);
                        if (scrubbing_direction == 0) {
                case MouseAudition:
                        track_canvas->get_window()->set_cursor (*current_canvas_cursor);
                        if (scrubbing_direction == 0) {
@@ -1277,9 +1295,9 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        } else {
                                /* make sure we stop */
                                session->request_transport_speed (0.0);
                        } else {
                                /* make sure we stop */
                                session->request_transport_speed (0.0);
-                       }
+                       }
                        break;
                        break;
-                       
+
                default:
                        break;
 
                default:
                        break;
 
@@ -1291,7 +1309,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 
        case 2:
                switch (mouse_mode) {
 
        case 2:
                switch (mouse_mode) {
-                       
+
                case MouseObject:
                        switch (item_type) {
                        case RegionItem:
                case MouseObject:
                        switch (item_type) {
                        case RegionItem:
@@ -1303,29 +1321,29 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                        // Button2 click is unused
                                }
                                return true;
                                        // Button2 click is unused
                                }
                                return true;
-                               
+
                                break;
                                break;
-                               
+
                        default:
                                break;
                        }
                        break;
                        default:
                                break;
                        }
                        break;
-                       
+
                case MouseRange:
                case MouseRange:
-                       
+
                        // x_style_paste (where, 1.0);
                        return true;
                        break;
                        // x_style_paste (where, 1.0);
                        return true;
                        break;
-                       
+
                default:
                        break;
                }
 
                break;
                default:
                        break;
                }
 
                break;
-       
+
        case 3:
                break;
        case 3:
                break;
-               
+
        default:
                break;
        }
        default:
                break;
        }
@@ -1338,7 +1356,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* /*event*/, ItemType i
        ControlPoint* cp;
        Marker * marker;
        double fraction;
        ControlPoint* cp;
        Marker * marker;
        double fraction;
-       
+
        if (last_item_entered != item) {
                last_item_entered = item;
                last_item_entered_n = 0;
        if (last_item_entered != item) {
                last_item_entered = item;
                last_item_entered_n = 0;
@@ -1381,7 +1399,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* /*event*/, ItemType i
                        }
                }
                break;
                        }
                }
                break;
-                       
+
        case AutomationLineItem:
                if (mouse_mode == MouseGain || mouse_mode == MouseObject) {
                        {
        case AutomationLineItem:
                if (mouse_mode == MouseGain || mouse_mode == MouseObject) {
                        {
@@ -1394,7 +1412,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* /*event*/, ItemType i
                        }
                }
                break;
                        }
                }
                break;
-               
+
        case RegionViewNameHighlight:
                if (is_drawable() && mouse_mode == MouseObject) {
                        track_canvas->get_window()->set_cursor (*trimmer_cursor);
        case RegionViewNameHighlight:
                if (is_drawable() && mouse_mode == MouseObject) {
                        track_canvas->get_window()->set_cursor (*trimmer_cursor);
@@ -1430,14 +1448,14 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* /*event*/, ItemType i
                break;
 
        case RegionViewName:
                break;
 
        case RegionViewName:
-               
+
                /* when the name is not an active item, the entire name highlight is for trimming */
 
                if (!reinterpret_cast<RegionView *> (item->get_data ("regionview"))->name_active()) {
                        if (mouse_mode == MouseObject && is_drawable()) {
                                track_canvas->get_window()->set_cursor (*trimmer_cursor);
                        }
                /* when the name is not an active item, the entire name highlight is for trimming */
 
                if (!reinterpret_cast<RegionView *> (item->get_data ("regionview"))->name_active()) {
                        if (mouse_mode == MouseObject && is_drawable()) {
                                track_canvas->get_window()->set_cursor (*trimmer_cursor);
                        }
-               } 
+               }
                break;
 
 
                break;
 
 
@@ -1546,14 +1564,14 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* /*event*/, ItemType i
                                cp->set_visible (false);
                        }
                }
                                cp->set_visible (false);
                        }
                }
-               
+
                if (is_drawable()) {
                        track_canvas->get_window()->set_cursor (*current_canvas_cursor);
                }
 
                hide_verbose_canvas_cursor ();
                break;
                if (is_drawable()) {
                        track_canvas->get_window()->set_cursor (*current_canvas_cursor);
                }
 
                hide_verbose_canvas_cursor ();
                break;
-               
+
        case RegionViewNameHighlight:
        case StartSelectionTrimItem:
        case EndSelectionTrimItem:
        case RegionViewNameHighlight:
        case StartSelectionTrimItem:
        case EndSelectionTrimItem:
@@ -1603,7 +1621,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* /*event*/, ItemType i
                        track_canvas->get_window()->set_cursor (*current_canvas_cursor);
                }
                break;
                        track_canvas->get_window()->set_cursor (*current_canvas_cursor);
                }
                break;
-               
+
        case MarkerItem:
                if ((marker = static_cast<Marker *> (item->get_data ("marker"))) == 0) {
                        break;
        case MarkerItem:
                if ((marker = static_cast<Marker *> (item->get_data ("marker"))) == 0) {
                        break;
@@ -1615,7 +1633,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* /*event*/, ItemType i
                // fall through
        case MeterMarkerItem:
        case TempoMarkerItem:
                // fall through
        case MeterMarkerItem:
        case TempoMarkerItem:
-               
+
                if (is_drawable()) {
                        track_canvas->get_window()->set_cursor (*timebar_cursor);
                }
                if (is_drawable()) {
                        track_canvas->get_window()->set_cursor (*timebar_cursor);
                }
@@ -1641,7 +1659,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* /*event*/, ItemType i
                        Glib::signal_idle().connect (mem_fun(*this, &Editor::left_automation_track));
                }
                break;
                        Glib::signal_idle().connect (mem_fun(*this, &Editor::left_automation_track));
                }
                break;
-               
+
        default:
                break;
        }
        default:
                break;
        }
@@ -1663,63 +1681,63 @@ void
 Editor::scrub ()
 {
        double delta;
 Editor::scrub ()
 {
        double delta;
-       
+
        if (scrubbing_direction == 0) {
                /* first move */
                session->request_locate (_drag->current_pointer_frame(), false);
                session->request_transport_speed (0.1);
                scrubbing_direction = 1;
        if (scrubbing_direction == 0) {
                /* first move */
                session->request_locate (_drag->current_pointer_frame(), false);
                session->request_transport_speed (0.1);
                scrubbing_direction = 1;
-               
+
        } else {
        } else {
-               
+
                if (last_scrub_x > _drag->current_pointer_x()) {
                if (last_scrub_x > _drag->current_pointer_x()) {
-                       
+
                        /* pointer moved to the left */
                        /* pointer moved to the left */
-                       
+
                        if (scrubbing_direction > 0) {
                        if (scrubbing_direction > 0) {
-                               
+
                                /* we reversed direction to go backwards */
                                /* we reversed direction to go backwards */
-                               
+
                                scrub_reversals++;
                                scrub_reverse_distance += (int) (last_scrub_x - _drag->current_pointer_x());
                                scrub_reversals++;
                                scrub_reverse_distance += (int) (last_scrub_x - _drag->current_pointer_x());
-                               
+
                        } else {
                        } else {
-                               
+
                                /* still moving to the left (backwards) */
                                /* still moving to the left (backwards) */
-                               
+
                                scrub_reversals = 0;
                                scrub_reverse_distance = 0;
                                scrub_reversals = 0;
                                scrub_reverse_distance = 0;
-                               
+
                                delta = 0.01 * (last_scrub_x - _drag->current_pointer_x());
                                session->request_transport_speed (session->transport_speed() - delta);
                        }
                                delta = 0.01 * (last_scrub_x - _drag->current_pointer_x());
                                session->request_transport_speed (session->transport_speed() - delta);
                        }
-                       
+
                } else {
                        /* pointer moved to the right */
                } else {
                        /* pointer moved to the right */
-                       
+
                        if (scrubbing_direction < 0) {
                                /* we reversed direction to go forward */
                        if (scrubbing_direction < 0) {
                                /* we reversed direction to go forward */
-                               
+
                                scrub_reversals++;
                                scrub_reverse_distance += (int) (_drag->current_pointer_x() - last_scrub_x);
                                scrub_reversals++;
                                scrub_reverse_distance += (int) (_drag->current_pointer_x() - last_scrub_x);
-                               
+
                        } else {
                                /* still moving to the right */
                        } else {
                                /* still moving to the right */
-                               
+
                                scrub_reversals = 0;
                                scrub_reverse_distance = 0;
                                scrub_reversals = 0;
                                scrub_reverse_distance = 0;
-                               
+
                                delta = 0.01 * (_drag->current_pointer_x() - last_scrub_x);
                                session->request_transport_speed (session->transport_speed() + delta);
                        }
                }
                                delta = 0.01 * (_drag->current_pointer_x() - last_scrub_x);
                                session->request_transport_speed (session->transport_speed() + delta);
                        }
                }
-               
+
                /* if there have been more than 2 opposite motion moves detected, or one that moves
                   back more than 10 pixels, reverse direction
                */
                /* if there have been more than 2 opposite motion moves detected, or one that moves
                   back more than 10 pixels, reverse direction
                */
-               
+
                if (scrub_reversals >= 2 || scrub_reverse_distance > 10) {
                if (scrub_reversals >= 2 || scrub_reverse_distance > 10) {
-                       
+
                        if (scrubbing_direction > 0) {
                                /* was forwards, go backwards */
                                session->request_transport_speed (-0.1);
                        if (scrubbing_direction > 0) {
                                /* was forwards, go backwards */
                                session->request_transport_speed (-0.1);
@@ -1729,12 +1747,12 @@ Editor::scrub ()
                                session->request_transport_speed (0.1);
                                scrubbing_direction = 1;
                        }
                                session->request_transport_speed (0.1);
                                scrubbing_direction = 1;
                        }
-                       
+
                        scrub_reverse_distance = 0;
                        scrub_reversals = 0;
                }
        }
                        scrub_reverse_distance = 0;
                        scrub_reversals = 0;
                }
        }
-       
+
        last_scrub_x = _drag->current_pointer_x();
 }
 
        last_scrub_x = _drag->current_pointer_x();
 }
 
@@ -1743,18 +1761,18 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from
 {
        if (event->motion.is_hint) {
                gint x, y;
 {
        if (event->motion.is_hint) {
                gint x, y;
-               
+
                /* We call this so that MOTION_NOTIFY events continue to be
                   delivered to the canvas. We need to do this because we set
                   Gdk::POINTER_MOTION_HINT_MASK on the canvas. This reduces
                   the density of the events, at the expense of a round-trip
                   to the server. Given that this will mostly occur on cases
                   where DISPLAY = :0.0, and given the cost of what the motion
                /* We call this so that MOTION_NOTIFY events continue to be
                   delivered to the canvas. We need to do this because we set
                   Gdk::POINTER_MOTION_HINT_MASK on the canvas. This reduces
                   the density of the events, at the expense of a round-trip
                   to the server. Given that this will mostly occur on cases
                   where DISPLAY = :0.0, and given the cost of what the motion
-                  event might do, its a good tradeoff.  
+                  event might do, its a good tradeoff.
                */
 
                track_canvas->get_pointer (x, y);
                */
 
                track_canvas->get_pointer (x, y);
-       } 
+       }
 
        if (current_stepping_trackview) {
                /* don't keep the persistent stepped trackview if the mouse moves */
 
        if (current_stepping_trackview) {
                /* don't keep the persistent stepped trackview if the mouse moves */
@@ -1792,7 +1810,7 @@ Editor::remove_gain_control_point (ArdourCanvas::Item*item, GdkEvent* /*event*/)
 
        // We shouldn't remove the first or last gain point
        if (control_point->line().is_last_point(*control_point) ||
 
        // We shouldn't remove the first or last gain point
        if (control_point->line().is_last_point(*control_point) ||
-               control_point->line().is_first_point(*control_point)) { 
+               control_point->line().is_first_point(*control_point)) {
                return;
        }
 
                return;
        }
 
@@ -1839,17 +1857,17 @@ Editor::visible_order_range (int* low, int* high) const
 {
        *low = TimeAxisView::max_order ();
        *high = 0;
 {
        *low = TimeAxisView::max_order ();
        *high = 0;
-       
+
        for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i) {
 
                RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
        for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i) {
 
                RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
-               
+
                if (!rtv->hidden()) {
                if (!rtv->hidden()) {
-                       
+
                        if (*high < rtv->order()) {
                                *high = rtv->order ();
                        }
                        if (*high < rtv->order()) {
                                *high = rtv->order ();
                        }
-                       
+
                        if (*low > rtv->order()) {
                                *low = rtv->order ();
                        }
                        if (*low > rtv->order()) {
                                *low = rtv->order ();
                        }
@@ -1863,7 +1881,7 @@ Editor::region_view_item_click (AudioRegionView& rv, GdkEventButton* event)
        /* Either add to or set the set the region selection, unless
           this is an alignment click (control used)
        */
        /* Either add to or set the set the region selection, unless
           this is an alignment click (control used)
        */
-       
+
        if (Keyboard::modifier_state_contains (event->state, Keyboard::PrimaryModifier)) {
                TimeAxisView* tv = &rv.get_time_axis_view();
                RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(tv);
        if (Keyboard::modifier_state_contains (event->state, Keyboard::PrimaryModifier)) {
                TimeAxisView* tv = &rv.get_time_axis_view();
                RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(tv);
@@ -1877,15 +1895,15 @@ Editor::region_view_item_click (AudioRegionView& rv, GdkEventButton* event)
                if (where >= 0) {
 
                        if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
                if (where >= 0) {
 
                        if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
-                               
+
                                align_region (rv.region(), SyncPoint, (nframes64_t) (where * speed));
                                align_region (rv.region(), SyncPoint, (nframes64_t) (where * speed));
-                               
+
                        } else if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
                        } else if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
-                               
+
                                align_region (rv.region(), End, (nframes64_t) (where * speed));
                                align_region (rv.region(), End, (nframes64_t) (where * speed));
-                               
+
                        } else {
                        } else {
-                               
+
                                align_region (rv.region(), Start, (nframes64_t) (where * speed));
                        }
                }
                                align_region (rv.region(), Start, (nframes64_t) (where * speed));
                        }
                }
@@ -1893,10 +1911,10 @@ Editor::region_view_item_click (AudioRegionView& rv, GdkEventButton* event)
 }
 
 void
 }
 
 void
-Editor::show_verbose_time_cursor (nframes64_t frame, double offset, double xpos, double ypos) 
+Editor::show_verbose_time_cursor (nframes64_t frame, double offset, double xpos, double ypos)
 {
        char buf[128];
 {
        char buf[128];
-       SMPTE::Time smpte;
+       Timecode::Time timecode;
        BBT_Time bbt;
        int hours, mins;
        nframes64_t frame_rate;
        BBT_Time bbt;
        int hours, mins;
        nframes64_t frame_rate;
@@ -1919,10 +1937,10 @@ Editor::show_verbose_time_cursor (nframes64_t frame, double offset, double xpos,
                session->bbt_time (frame, bbt);
                snprintf (buf, sizeof (buf), "%02" PRIu32 "|%02" PRIu32 "|%02" PRIu32, bbt.bars, bbt.beats, bbt.ticks);
                break;
                session->bbt_time (frame, bbt);
                snprintf (buf, sizeof (buf), "%02" PRIu32 "|%02" PRIu32 "|%02" PRIu32, bbt.bars, bbt.beats, bbt.ticks);
                break;
-               
-       case AudioClock::SMPTE:
-               session->smpte_time (frame, smpte);
-               snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%02" PRId32 ":%02" PRId32, smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
+
+       case AudioClock::Timecode:
+               session->timecode_time (frame, timecode);
+               snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%02" PRId32 ":%02" PRId32, timecode.hours, timecode.minutes, timecode.seconds, timecode.frames);
                break;
 
        case AudioClock::MinSec:
                break;
 
        case AudioClock::MinSec:
@@ -1943,18 +1961,17 @@ Editor::show_verbose_time_cursor (nframes64_t frame, double offset, double xpos,
 
        if (xpos >= 0 && ypos >=0) {
                set_verbose_canvas_cursor (buf, xpos + offset, ypos + offset);
 
        if (xpos >= 0 && ypos >=0) {
                set_verbose_canvas_cursor (buf, xpos + offset, ypos + offset);
-       }
-       else {
+       } else {
                set_verbose_canvas_cursor (buf, _drag->current_pointer_x() + offset - horizontal_adjustment.get_value(), _drag->current_pointer_y() + offset - vertical_adjustment.get_value() + canvas_timebars_vsize);
        }
        show_verbose_canvas_cursor ();
 }
 
 void
                set_verbose_canvas_cursor (buf, _drag->current_pointer_x() + offset - horizontal_adjustment.get_value(), _drag->current_pointer_y() + offset - vertical_adjustment.get_value() + canvas_timebars_vsize);
        }
        show_verbose_canvas_cursor ();
 }
 
 void
-Editor::show_verbose_duration_cursor (nframes64_t start, nframes64_t end, double offset, double xpos, double ypos) 
+Editor::show_verbose_duration_cursor (nframes64_t start, nframes64_t end, double offset, double xpos, double ypos)
 {
        char buf[128];
 {
        char buf[128];
-       SMPTE::Time smpte;
+       Timecode::Time timecode;
        BBT_Time sbbt;
        BBT_Time ebbt;
        int hours, mins;
        BBT_Time sbbt;
        BBT_Time ebbt;
        int hours, mins;
@@ -1997,13 +2014,13 @@ Editor::show_verbose_duration_cursor (nframes64_t start, nframes64_t end, double
                        ebbt.beats--;
                        ebbt.ticks = int(Meter::ticks_per_beat) + ebbt.ticks - sbbt.ticks;
                }
                        ebbt.beats--;
                        ebbt.ticks = int(Meter::ticks_per_beat) + ebbt.ticks - sbbt.ticks;
                }
-               
+
                snprintf (buf, sizeof (buf), "%02" PRIu32 "|%02" PRIu32 "|%02" PRIu32, ebbt.bars, ebbt.beats, ebbt.ticks);
                break;
                snprintf (buf, sizeof (buf), "%02" PRIu32 "|%02" PRIu32 "|%02" PRIu32, ebbt.bars, ebbt.beats, ebbt.ticks);
                break;
-               
-       case AudioClock::SMPTE:
-               session->smpte_duration (end - start, smpte);
-               snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%02" PRId32 ":%02" PRId32, smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
+
+       case AudioClock::Timecode:
+               session->timecode_duration (end - start, timecode);
+               snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%02" PRId32 ":%02" PRId32, timecode.hours, timecode.minutes, timecode.seconds, timecode.frames);
                break;
 
        case AudioClock::MinSec:
                break;
 
        case AudioClock::MinSec:
@@ -2055,7 +2072,7 @@ Editor::cancel_selection ()
 
        selection->clear ();
        clicked_selection = 0;
 
        selection->clear ();
        clicked_selection = 0;
-}      
+}
 
 
 void
 
 
 void
@@ -2076,7 +2093,7 @@ Editor::single_contents_trim (RegionView& rv, nframes64_t frame_delta, bool left
        if (tv && tv->is_track()) {
                speed = tv->get_diskstream()->speed();
        }
        if (tv && tv->is_track()) {
                speed = tv->get_diskstream()->speed();
        }
-       
+
        if (left_direction) {
                if (swap_direction) {
                        new_bound = (nframes64_t) (region->position()/speed) + frame_delta;
        if (left_direction) {
                if (swap_direction) {
                        new_bound = (nframes64_t) (region->position()/speed) + frame_delta;
@@ -2094,14 +2111,14 @@ Editor::single_contents_trim (RegionView& rv, nframes64_t frame_delta, bool left
        if (obey_snap) {
                snap_to (new_bound);
        }
        if (obey_snap) {
                snap_to (new_bound);
        }
-       region->trim_start ((nframes64_t) (new_bound * speed), this);   
+       region->trim_start ((nframes64_t) (new_bound * speed), this);
        rv.region_changed (StartChanged);
 }
 
 void
 Editor::single_start_trim (RegionView& rv, nframes64_t frame_delta, bool left_direction, bool obey_snap, bool no_overlap)
 {
        rv.region_changed (StartChanged);
 }
 
 void
 Editor::single_start_trim (RegionView& rv, nframes64_t frame_delta, bool left_direction, bool obey_snap, bool no_overlap)
 {
-       boost::shared_ptr<Region> region (rv.region()); 
+       boost::shared_ptr<Region> region (rv.region());
 
        if (region->locked()) {
                return;
 
        if (region->locked()) {
                return;
@@ -2116,7 +2133,7 @@ Editor::single_start_trim (RegionView& rv, nframes64_t frame_delta, bool left_di
        if (tv && tv->is_track()) {
                speed = tv->get_diskstream()->speed();
        }
        if (tv && tv->is_track()) {
                speed = tv->get_diskstream()->speed();
        }
-       
+
        if (left_direction) {
                new_bound = (nframes64_t) (region->position()/speed) - frame_delta;
        } else {
        if (left_direction) {
                new_bound = (nframes64_t) (region->position()/speed) - frame_delta;
        } else {
@@ -2124,18 +2141,18 @@ Editor::single_start_trim (RegionView& rv, nframes64_t frame_delta, bool left_di
        }
 
        if (obey_snap) {
        }
 
        if (obey_snap) {
-               snap_to (new_bound, (left_direction ? 0 : 1));  
+               snap_to (new_bound, (left_direction ? 0 : 1));
        }
        }
-       
+
        nframes64_t pre_trim_first_frame = region->first_frame();
 
        region->trim_front ((nframes64_t) (new_bound * speed), this);
        nframes64_t pre_trim_first_frame = region->first_frame();
 
        region->trim_front ((nframes64_t) (new_bound * speed), this);
-  
+
        if (no_overlap) {
                //Get the next region on the left of this region and shrink/expand it.
                boost::shared_ptr<Playlist> playlist (region->playlist());
                boost::shared_ptr<Region> region_left = playlist->find_next_region (pre_trim_first_frame, End, 0);
        if (no_overlap) {
                //Get the next region on the left of this region and shrink/expand it.
                boost::shared_ptr<Playlist> playlist (region->playlist());
                boost::shared_ptr<Region> region_left = playlist->find_next_region (pre_trim_first_frame, End, 0);
-               
+
                bool regions_touching = false;
 
                if (region_left != 0 && (pre_trim_first_frame == region_left->last_frame() + 1)){
                bool regions_touching = false;
 
                if (region_left != 0 && (pre_trim_first_frame == region_left->last_frame() + 1)){
@@ -2143,14 +2160,14 @@ Editor::single_start_trim (RegionView& rv, nframes64_t frame_delta, bool left_di
                }
 
                //Only trim region on the left if the first frame has gone beyond the left region's last frame.
                }
 
                //Only trim region on the left if the first frame has gone beyond the left region's last frame.
-               if (region_left != 0 && 
-                       (region_left->last_frame() > region->first_frame() || regions_touching)) 
+               if (region_left != 0 &&
+                       (region_left->last_frame() > region->first_frame() || regions_touching))
                {
                        region_left->trim_end(region->first_frame(), this);
                }
        }
 
                {
                        region_left->trim_end(region->first_frame(), this);
                }
        }
 
-       
+
 
        rv.region_changed (Change (LengthChanged|PositionChanged|StartChanged));
 }
 
        rv.region_changed (Change (LengthChanged|PositionChanged|StartChanged));
 }
@@ -2201,11 +2218,11 @@ Editor::single_end_trim (RegionView& rv, nframes64_t frame_delta, bool left_dire
 
                //Only trim region on the right if the last frame has gone beyond the right region's first frame.
                if (region_right != 0 &&
 
                //Only trim region on the right if the last frame has gone beyond the right region's first frame.
                if (region_right != 0 &&
-                       (region_right->first_frame() < region->last_frame() || regions_touching)) 
+                       (region_right->first_frame() < region->last_frame() || regions_touching))
                {
                        region_right->trim_front(region->last_frame() + 1, this);
                }
                {
                        region_right->trim_front(region->last_frame() + 1, this);
                }
-               
+
                rv.region_changed (Change (LengthChanged|PositionChanged|StartChanged));
        }
        else {
                rv.region_changed (Change (LengthChanged|PositionChanged|StartChanged));
        }
        else {
@@ -2258,13 +2275,13 @@ Editor::point_trim (GdkEvent* event)
                }
 
                commit_reversible_command();
                }
 
                commit_reversible_command();
-       
+
                break;
        case 2:
                begin_reversible_command (_("End point trim"));
 
                if (selection->selected (rv)) {
                break;
        case 2:
                begin_reversible_command (_("End point trim"));
 
                if (selection->selected (rv)) {
-                       
+
                        for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i)
                        {
                                if (!(*i)->region()->locked()) {
                        for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i)
                        {
                                if (!(*i)->region()->locked()) {
@@ -2288,7 +2305,7 @@ Editor::point_trim (GdkEvent* event)
                }
 
                commit_reversible_command();
                }
 
                commit_reversible_command();
-       
+
                break;
        default:
                break;
                break;
        default:
                break;
@@ -2307,7 +2324,7 @@ Editor::thaw_region_after_trim (RegionView& rv)
        region->thaw (_("trimmed region"));
 
        AudioRegionView* arv = dynamic_cast<AudioRegionView*>(&rv);
        region->thaw (_("trimmed region"));
 
        AudioRegionView* arv = dynamic_cast<AudioRegionView*>(&rv);
-       
+
        if (arv) {
                arv->unhide_envelope ();
        }
        if (arv) {
                arv->unhide_envelope ();
        }
@@ -2324,7 +2341,7 @@ Editor::hide_marker (ArdourCanvas::Item* item, GdkEvent* /*event*/)
                /*NOTREACHED*/
        }
 
                /*NOTREACHED*/
        }
 
-       Location* location = find_location_from_marker (marker, is_start);      
+       Location* location = find_location_from_marker (marker, is_start);
        location->set_hidden (true, this);
 }
 
        location->set_hidden (true, this);
 }
 
@@ -2373,14 +2390,14 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes64_t pos)
 {
        /* no brushing without a useful snap setting */
 
 {
        /* no brushing without a useful snap setting */
 
-       switch (snap_mode) {
+       switch (_snap_mode) {
        case SnapMagnetic:
                return; /* can't work because it allows region to be placed anywhere */
        default:
                break; /* OK */
        }
 
        case SnapMagnetic:
                return; /* can't work because it allows region to be placed anywhere */
        default:
                break; /* OK */
        }
 
-       switch (snap_type) {
+       switch (_snap_type) {
        case SnapToMark:
                return;
 
        case SnapToMark:
                return;
 
@@ -2389,7 +2406,7 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes64_t pos)
        }
 
        /* don't brush a copy over the original */
        }
 
        /* don't brush a copy over the original */
-       
+
        if (pos == rv->region()->position()) {
                return;
        }
        if (pos == rv->region()->position()) {
                return;
        }
@@ -2402,14 +2419,14 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes64_t pos)
 
        boost::shared_ptr<Playlist> playlist = rtv->playlist();
        double speed = rtv->get_diskstream()->speed();
 
        boost::shared_ptr<Playlist> playlist = rtv->playlist();
        double speed = rtv->get_diskstream()->speed();
-       
+
        XMLNode &before = playlist->get_state();
        playlist->add_region (RegionFactory::create (rv->region()), (nframes64_t) (pos * speed));
        XMLNode &after = playlist->get_state();
        session->add_command(new MementoCommand<Playlist>(*playlist.get(), &before, &after));
        XMLNode &before = playlist->get_state();
        playlist->add_region (RegionFactory::create (rv->region()), (nframes64_t) (pos * speed));
        XMLNode &after = playlist->get_state();
        session->add_command(new MementoCommand<Playlist>(*playlist.get(), &before, &after));
-       
+
        // playlist is frozen, so we have to update manually
        // playlist is frozen, so we have to update manually
-       
+
        playlist->Modified(); /* EMIT SIGNAL */
 }
 
        playlist->Modified(); /* EMIT SIGNAL */
 }
 
@@ -2429,16 +2446,16 @@ Editor::start_region_grab (ArdourCanvas::Item* item, GdkEvent* event, RegionView
        assert (region_view);
 
        _region_motion_group->raise_to_top ();
        assert (region_view);
 
        _region_motion_group->raise_to_top ();
-       
+
        assert (_drag == 0);
        assert (_drag == 0);
-       
+
        if (Config->get_edit_mode() == Splice) {
                _drag = new RegionSpliceDrag (this, item, region_view, selection->regions.by_layer());
        } else {
                RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
                _drag = new RegionMoveDrag (this, item, region_view, s.by_layer(), false, false);
        }
        if (Config->get_edit_mode() == Splice) {
                _drag = new RegionSpliceDrag (this, item, region_view, selection->regions.by_layer());
        } else {
                RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
                _drag = new RegionMoveDrag (this, item, region_view, s.by_layer(), false, false);
        }
-       
+
        _drag->start_grab (event);
 
        begin_reversible_command (_("move region(s)"));
        _drag->start_grab (event);
 
        begin_reversible_command (_("move region(s)"));
@@ -2452,7 +2469,7 @@ Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event, Regio
 {
        assert (region_view);
        assert (_drag == 0);
 {
        assert (region_view);
        assert (_drag == 0);
-       
+
        _region_motion_group->raise_to_top ();
 
        RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
        _region_motion_group->raise_to_top ();
 
        RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
@@ -2465,7 +2482,7 @@ Editor::start_region_brush_grab (ArdourCanvas::Item* item, GdkEvent* event, Regi
 {
        assert (region_view);
        assert (_drag == 0);
 {
        assert (region_view);
        assert (_drag == 0);
-       
+
        if (Config->get_edit_mode() == Splice) {
                return;
        }
        if (Config->get_edit_mode() == Splice) {
                return;
        }
@@ -2473,7 +2490,7 @@ Editor::start_region_brush_grab (ArdourCanvas::Item* item, GdkEvent* event, Regi
        RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
        _drag = new RegionMoveDrag (this, item, region_view, s.by_layer(), true, false);
        _drag->start_grab (event);
        RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
        _drag = new RegionMoveDrag (this, item, region_view, s.by_layer(), true, false);
        _drag->start_grab (event);
-       
+
        begin_reversible_command (_("Drag region brush"));
 }
 
        begin_reversible_command (_("Drag region brush"));
 }
 
@@ -2498,7 +2515,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* /*item*/, GdkEvent* event)
        }
 
        /* XXX fix me one day to use all new regions */
        }
 
        /* XXX fix me one day to use all new regions */
-       
+
        boost::shared_ptr<Region> region (new_regions.front());
 
        /* add it to the current stream/playlist.
        boost::shared_ptr<Region> region (new_regions.front());
 
        /* add it to the current stream/playlist.
@@ -2507,11 +2524,11 @@ Editor::start_selection_grab (ArdourCanvas::Item* /*item*/, GdkEvent* event)
           catch the signal it sends when it creates the regionview to
           set the regionview we want to then drag.
        */
           catch the signal it sends when it creates the regionview to
           set the regionview we want to then drag.
        */
-       
+
        latest_regionviews.clear();
        sigc::connection c = clicked_routeview->view()->RegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
        latest_regionviews.clear();
        sigc::connection c = clicked_routeview->view()->RegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
-       
-       /* A selection grab currently creates two undo/redo operations, one for 
+
+       /* A selection grab currently creates two undo/redo operations, one for
           creating the new region and another for moving it.
        */
 
           creating the new region and another for moving it.
        */
 
@@ -2525,19 +2542,19 @@ Editor::start_selection_grab (ArdourCanvas::Item* /*item*/, GdkEvent* event)
        session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
 
        commit_reversible_command ();
        session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
 
        commit_reversible_command ();
-       
+
        c.disconnect ();
        c.disconnect ();
-       
+
        if (latest_regionviews.empty()) {
                /* something went wrong */
                return;
        }
 
        /* we need to deselect all other regionviews, and select this one
        if (latest_regionviews.empty()) {
                /* something went wrong */
                return;
        }
 
        /* we need to deselect all other regionviews, and select this one
-          i'm ignoring undo stuff, because the region creation will take care of it 
+          i'm ignoring undo stuff, because the region creation will take care of it
        */
        selection->set (latest_regionviews);
        */
        selection->set (latest_regionviews);
-       
+
        assert (_drag == 0);
        _drag = new RegionMoveDrag (this, latest_regionviews.front()->get_canvas_group(), latest_regionviews.front(), latest_regionviews, false, false);
        _drag->start_grab (event);
        assert (_drag == 0);
        _drag = new RegionMoveDrag (this, latest_regionviews.front()->get_canvas_group(), latest_regionviews.front(), latest_regionviews, false, false);
        _drag->start_grab (event);
@@ -2558,7 +2575,8 @@ Editor::set_internal_edit (bool yn)
 
        if (yn) {
                mouse_select_button.set_image (*(manage (new Image (::get_icon("midi_tool_pencil")))));
 
        if (yn) {
                mouse_select_button.set_image (*(manage (new Image (::get_icon("midi_tool_pencil")))));
-               
+               mouse_select_button.get_image ()->show ();
+
                for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
                        MidiTimeAxisView* mtv = dynamic_cast<MidiTimeAxisView*> (*i);
                        if (mtv) {
                for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
                        MidiTimeAxisView* mtv = dynamic_cast<MidiTimeAxisView*> (*i);
                        if (mtv) {
@@ -2569,7 +2587,8 @@ Editor::set_internal_edit (bool yn)
 
        } else {
 
 
        } else {
 
-               mouse_select_button.set_image (*(manage (new Image (::get_xpm("tool_range.xpm")))));
+               mouse_select_button.set_image (*(manage (new Image (::get_icon("tool_range")))));
+               mouse_select_button.get_image ()->show ();
                stop_step_editing ();
 
                for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
                stop_step_editing ();
 
                for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {