From f455379a1747b79a043278aecc52c5dc994882fe Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 4 Apr 2013 15:31:06 +0800 Subject: [PATCH 1/3] No drag-drop by default. --- src/app/window.coffee | 6 ++++++ 1 file changed, 6 insertions(+) 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' From f37265978ef5102e066c265fb8d691ea6d9a11b8 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 4 Apr 2013 16:23:46 +0800 Subject: [PATCH 2/3] Only respond to drag-drop of tabs in tab bar. --- src/packages/tabs/lib/tab-bar-view.coffee | 12 ++++++++++++ src/packages/tabs/spec/tabs-spec.coffee | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/packages/tabs/lib/tab-bar-view.coffee b/src/packages/tabs/lib/tab-bar-view.coffee index 926e5c3ae..2cafac5d4 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') == 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') == 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() + From 33de90a0b6af72f9e315fae51aebdccb80a2da71 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 5 Apr 2013 10:30:18 +0800 Subject: [PATCH 3/3] dataTransfer.setData only accepts string. --- src/packages/tabs/lib/tab-bar-view.coffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/packages/tabs/lib/tab-bar-view.coffee b/src/packages/tabs/lib/tab-bar-view.coffee index 2cafac5d4..ea8abd24b 100644 --- a/src/packages/tabs/lib/tab-bar-view.coffee +++ b/src/packages/tabs/lib/tab-bar-view.coffee @@ -81,7 +81,7 @@ class TabBarView extends View event.preventDefault() return - event.originalEvent.dataTransfer.setData 'atom-event', true + event.originalEvent.dataTransfer.setData 'atom-event', 'true' el = $(event.target).closest('.sortable') el.addClass 'is-dragging' @@ -95,7 +95,7 @@ class TabBarView extends View @find(".is-dragging").removeClass 'is-dragging' onDragOver: (event) => - unless event.originalEvent.dataTransfer.getData('atom-event') == true + unless event.originalEvent.dataTransfer.getData('atom-event') is 'true' event.preventDefault() event.stopPropagation() return @@ -114,7 +114,7 @@ class TabBarView extends View onDrop: (event) => - unless event.originalEvent.dataTransfer.getData('atom-event') == true + unless event.originalEvent.dataTransfer.getData('atom-event') is 'true' event.preventDefault() event.stopPropagation() return