diff --git a/src/app/window.coffee b/src/app/window.coffee index 272f91029..d2d70894c 100644 --- a/src/app/window.coffee +++ b/src/app/window.coffee @@ -25,6 +25,12 @@ window.setUpEnvironment = -> $(document).on 'keydown', keymap.handleKeyEvent keymap.bindDefaultKeys() + ignoreEvents = (e) -> + e.preventDefault() + e.stopPropagation() + $(document).on 'dragover', ignoreEvents + $(document).on 'drop', ignoreEvents + requireStylesheet 'reset' requireStylesheet 'atom' requireStylesheet 'overlay' diff --git a/src/packages/tabs/lib/tab-bar-view.coffee b/src/packages/tabs/lib/tab-bar-view.coffee index 926e5c3ae..ea8abd24b 100644 --- a/src/packages/tabs/lib/tab-bar-view.coffee +++ b/src/packages/tabs/lib/tab-bar-view.coffee @@ -81,6 +81,8 @@ class TabBarView extends View event.preventDefault() return + event.originalEvent.dataTransfer.setData 'atom-event', 'true' + el = $(event.target).closest('.sortable') el.addClass 'is-dragging' event.originalEvent.dataTransfer.setData 'sortable-index', el.index() @@ -93,6 +95,11 @@ class TabBarView extends View @find(".is-dragging").removeClass 'is-dragging' onDragOver: (event) => + unless event.originalEvent.dataTransfer.getData('atom-event') is 'true' + event.preventDefault() + event.stopPropagation() + return + event.preventDefault() currentDropTargetIndex = @find(".is-drop-target").index() newDropTargetIndex = @getDropTargetIndex(event) @@ -107,6 +114,11 @@ class TabBarView extends View onDrop: (event) => + unless event.originalEvent.dataTransfer.getData('atom-event') is 'true' + event.preventDefault() + event.stopPropagation() + return + event.stopPropagation() @children('.is-drop-target').removeClass 'is-drop-target' @children('.drop-target-is-after').removeClass 'drop-target-is-after' diff --git a/src/packages/tabs/spec/tabs-spec.coffee b/src/packages/tabs/spec/tabs-spec.coffee index 7eb59d232..b5b733c17 100644 --- a/src/packages/tabs/spec/tabs-spec.coffee +++ b/src/packages/tabs/spec/tabs-spec.coffee @@ -278,3 +278,19 @@ describe "TabBarView", -> expect(pane2.getItems()).toEqual [item2b, item1] expect(pane2.activeItem).toBe item1 expect(pane2.focus).toHaveBeenCalled() + + describe 'when a non-tab is dragged to pane', -> + it 'has no effect', -> + expect(tabBar.getTabs().map (tab) -> tab.text()).toEqual ["Item 1", "sample.js", "Item 2"] + expect(pane.getItems()).toEqual [item1, editSession1, item2] + expect(pane.activeItem).toBe item2 + spyOn(pane, 'focus') + + [dragStartEvent, dropEvent] = buildDragEvents(tabBar.tabAtIndex(0), tabBar.tabAtIndex(0)) + tabBar.onDrop(dropEvent) + + expect(tabBar.getTabs().map (tab) -> tab.text()).toEqual ["Item 1", "sample.js", "Item 2"] + expect(pane.getItems()).toEqual [item1, editSession1, item2] + expect(pane.activeItem).toBe item2 + expect(pane.focus).not.toHaveBeenCalled() +