@@ -17,7 +17,8 @@ lep.SelectedTrackView = function(opts) {
1717 var _opts = opts || { } ,
1818 _numSends = _opts . numSends || 0 ,
1919 _numScenes = _opts . numScenes || 0 ,
20- _id = this . name ;
20+ _id = this . name ,
21+ self = this ;
2122
2223 lep . util . assertNumberInRange ( _numSends , 0 , 50 , 'Invalid numSends for {}: {}' , this . name , _numSends ) ;
2324 lep . util . assertNumberInRange ( _numScenes , 0 , 50 , 'Invalid numScenes for {}: {}' , this . name , _numScenes ) ;
@@ -28,20 +29,22 @@ lep.SelectedTrackView = function(opts) {
2829
2930 var _cursorTrack = host . createCursorTrack ( _id , this . name , _numSends , _numScenes , false ) ,
3031 _settableIsPinned = _cursorTrack . isPinned ( ) ,
31- _syncChannel = function ( ) {
32- _cursorTrack . selectChannel ( lep . SelectedTrackView . _autoFollowingCursorTrack ) ;
33- } ,
34- _syncOrNOP = _syncChannel ;
32+ _isTrackAlreadySelected = false ;
3533
34+ _cursorTrack . addIsSelectedInEditorObserver ( function ( isSelected ) {
35+ _isTrackAlreadySelected = isSelected ;
36+ } ) ;
37+
3638 lep . SelectedTrackView . _autoFollowingCursorTrack . name ( ) . addValueObserver ( function ( trackName ) {
3739 // lep.logWarn('Track of {} is now {}', self.name, trackName);
38- _syncOrNOP ( ) ;
39- } ) ;
40-
40+ if ( trackName && ! _isTrackAlreadySelected && ! self . locked ( ) ) {
41+ _cursorTrack . selectChannel ( lep . SelectedTrackView . _autoFollowingCursorTrack ) ;
42+ }
43+ } ) ;
44+
4145 this . locked = ko . computed ( {
4246 read : ko . observable ( false ) . updatedByBitwigValue ( _settableIsPinned ) ,
4347 write : function ( doLock ) {
44- _syncOrNOP = doLock ? lep . util . NOP : _syncChannel ;
4548 _settableIsPinned . set ( ! ! doLock ) ;
4649 }
4750 } ) . extend ( { toggleable : true } ) ;
@@ -69,4 +72,4 @@ lep.SelectedTrackView._autoFollowingCursorTrack = null;
6972 * @type {lep.SelectedTrackView[] }
7073 * @private
7174 */
72- lep . SelectedTrackView . _instances = [ ] ;
75+ lep . SelectedTrackView . _instances = [ ] ;
0 commit comments