@@ -821,47 +821,56 @@ class TreeView
821821 @element .style .display = ' '
822822
823823 onMouseDown : (e ) ->
824- if entryToSelect = e .target .closest (' .entry' )
825- e .stopPropagation ()
824+ return unless entryToSelect = e .target .closest (' .entry' )
826825
827- # return early if we're opening a contextual menu (right click) during multi-select mode
828- if @ multiSelectEnabled () and entryToSelect .classList .contains (' selected' )
826+ e .stopPropagation ()
829827
830- # mouse right click or ctrl click as right click on darwin platforms
831- if e . button is 2 or ( e . ctrlKey and process . platform is ' darwin' )
832- return
833- else
834- # allow select if not dragging
835- { shiftKey , metaKey , ctrlKey } = e
836- @selectOnMouseUp = {shiftKey, metaKey, ctrlKey}
837- return
828+ # TODO: meta+ click and ctrl+ click should not do the same thing on Windows.
829+ # Right now removing metaKey if platform is not darwin breaks tests
830+ # that set the metaKey to true when simulating a cmd+click on macos
831+ # and ctrl+click on windows and linux.
832+ cmdKey = e . metaKey or ( e . ctrlKey and process . platform isnt ' darwin ' )
833+
834+ # return early if clicking on a selected entry
835+ if entryToSelect . classList . contains ( ' selected ' )
838836
839- if e .shiftKey and (e .metaKey or (e .ctrlKey and process .platform isnt ' darwin' ))
840- # select continuous from @lastFocusedElement but leave others
841- @ selectContinuousEntries (entryToSelect, false )
842- @ toggleMultiSelectMenu ()
843- else if e .shiftKey
844- # select continuous from @lastFocusedElement and deselect rest
845- @ selectContinuousEntries (entryToSelect)
846- @ toggleMultiSelectMenu ()
847- # only allow ctrl click for multi selection on non darwin systems
848- else if e .metaKey or (e .ctrlKey and process .platform isnt ' darwin' )
849- @ selectMultipleEntries (entryToSelect)
850- @lastFocusedElement = entryToSelect
851- @ toggleMultiSelectMenu ()
837+ # mouse right click or ctrl click as right click on darwin platforms
838+ if e .button is 2 or (e .ctrlKey and process .platform is ' darwin' )
839+ return
852840 else
853- @ selectEntry (entryToSelect)
854- @ showFullMenu ()
841+ # allow click on mouseup if not dragging
842+ {shiftKey } = e
843+ @selectOnMouseUp = {shiftKey, cmdKey}
844+ return
845+
846+ if e .shiftKey and cmdKey
847+ # select continuous from @lastFocusedElement but leave others
848+ @ selectContinuousEntries (entryToSelect, false )
849+ @ toggleMultiSelectMenu ()
850+ else if e .shiftKey
851+ # select continuous from @lastFocusedElement and deselect rest
852+ @ selectContinuousEntries (entryToSelect)
853+ @ toggleMultiSelectMenu ()
854+ # only allow ctrl click for multi selection on non darwin systems
855+ else if cmdKey
856+ @ selectMultipleEntries (entryToSelect)
857+ @lastFocusedElement = entryToSelect
858+ @ toggleMultiSelectMenu ()
859+ else
860+ @ selectEntry (entryToSelect)
861+ @ showFullMenu ()
855862
856863 onMouseUp : (e ) ->
857864 return unless @selectOnMouseUp ?
858865
859- {shiftKey , metaKey , ctrlKey } = @selectOnMouseUp
866+ {shiftKey , cmdKey } = @selectOnMouseUp
860867 @selectOnMouseUp = null
861868
862869 return unless entryToSelect = e .target .closest (' .entry' )
863870
864- if shiftKey and (metaKey or (ctrlKey and process .platform isnt ' darwin' ))
871+ e .stopPropagation ()
872+
873+ if shiftKey and cmdKey
865874 # select continuous from @lastFocusedElement but leave others
866875 @ selectContinuousEntries (entryToSelect, false )
867876 @ toggleMultiSelectMenu ()
@@ -870,7 +879,7 @@ class TreeView
870879 @ selectContinuousEntries (entryToSelect)
871880 @ toggleMultiSelectMenu ()
872881 # only allow ctrl click for multi selection on non darwin systems
873- else if metaKey or (ctrlKey and process . platform isnt ' darwin ' )
882+ else if cmdKey
874883 @ deselect ([entryToSelect])
875884 @lastFocusedElement = entryToSelect
876885 @ toggleMultiSelectMenu ()
0 commit comments