From 45534548098343c71e3c77945d1c59e6994fdb3b Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Fri, 21 Jan 2011 22:12:12 +0100 Subject: [PATCH] Bug 600812 - Dragging tab between groups doesn't work [r=ian, a=dolske] --- browser/base/content/tabview/groupitems.js | 9 ++- browser/base/content/test/tabview/Makefile.in | 1 + .../test/tabview/browser_tabview_bug600812.js | 79 +++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 browser/base/content/test/tabview/browser_tabview_bug600812.js diff --git a/browser/base/content/tabview/groupitems.js b/browser/base/content/tabview/groupitems.js index 6a44c1a11038..416b7898250b 100644 --- a/browser/base/content/tabview/groupitems.js +++ b/browser/base/content/tabview/groupitems.js @@ -1480,8 +1480,15 @@ GroupItem.prototype = Utils.extend(new Item(), new Subscribable(), { addTab: drag.info.item.parent != self, animate: true}); } + + // remove the item from its parent if that's not the current groupItem. + // this may occur when dragging too quickly so the out event is not fired. + var groupItem = drag.info.item.parent; + if (groupItem && self !== groupItem) + groupItem.remove(drag.info.$el, {dontClose: true}); + if (dropIndex !== false) - options = {index: dropIndex} + options = {index: dropIndex}; this.add(drag.info.$el, options); GroupItems.setActiveGroupItem(this); dropIndex = false; diff --git a/browser/base/content/test/tabview/Makefile.in b/browser/base/content/test/tabview/Makefile.in index 91c19a81cebf..a852aa1bea0e 100644 --- a/browser/base/content/test/tabview/Makefile.in +++ b/browser/base/content/test/tabview/Makefile.in @@ -72,6 +72,7 @@ _BROWSER_FILES = \ browser_tabview_bug598600.js \ browser_tabview_bug599626.js \ browser_tabview_bug600645.js \ + browser_tabview_bug600812.js \ browser_tabview_bug604098.js \ browser_tabview_bug606657.js \ browser_tabview_bug606905.js \ diff --git a/browser/base/content/test/tabview/browser_tabview_bug600812.js b/browser/base/content/test/tabview/browser_tabview_bug600812.js new file mode 100644 index 000000000000..2778e86779cd --- /dev/null +++ b/browser/base/content/test/tabview/browser_tabview_bug600812.js @@ -0,0 +1,79 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is a test for bug 600812. + * + * The Initial Developer of the Original Code is + * Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Tim Taubert + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +function test() { + let cw; + + let createGroupItem = function () { + let bounds = new cw.Rect(20, 20, 150, 150); + let groupItem = new cw.GroupItem([], {bounds: bounds, immediately: true}); + + cw.GroupItems.setActiveGroupItem(groupItem); + gBrowser.loadOneTab('about:blank', {inBackground: true}); + + return groupItem; + } + + let testVeryQuickDragAndDrop = function () { + let sourceGroup = cw.GroupItems.groupItems[0]; + let targetGroup = createGroupItem(); + + sourceGroup.pushAway(true); + targetGroup.pushAway(true); + + let sourceTab = sourceGroup.getChild(0).container; + EventUtils.synthesizeMouseAtCenter(sourceTab, {type: 'mousedown'}, cw); + + let targetTab = targetGroup.getChild(0).container; + EventUtils.synthesizeMouseAtCenter(targetTab, {type: 'mousemove'}, cw); + EventUtils.synthesizeMouseAtCenter(targetTab, {type: 'mouseup'}, cw); + + is(targetGroup.getChildren().length, 2, 'target group has two tabs'); + is(cw.GroupItems.groupItems.length, 1, 'sourceGroup was closed'); + isnot(cw.GroupItems.groupItems[0], sourceGroup, 'sourceGroup was closed'); + + targetGroup.getChild(0).close(); + hideTabView(finish); + } + + waitForExplicitFinish(); + + showTabView(function () { + cw = TabView.getContentWindow(); + afterAllTabsLoaded(testVeryQuickDragAndDrop); + }); +}