зеркало из https://github.com/mozilla/pjs.git
Bug 663612 - clicking a group should zoom into the group's active tab; r=sdwilsh, ui-r=limi
This commit is contained in:
Родитель
d0fd41f67c
Коммит
f4df04da0b
|
@ -1660,9 +1660,46 @@ GroupItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||||
// Helper routine for the constructor; adds various event handlers to the container.
|
// Helper routine for the constructor; adds various event handlers to the container.
|
||||||
_addHandlers: function GroupItem__addHandlers(container) {
|
_addHandlers: function GroupItem__addHandlers(container) {
|
||||||
let self = this;
|
let self = this;
|
||||||
|
let lastMouseDownTarget;
|
||||||
|
|
||||||
var dropIndex = false;
|
container.mousedown(function(e) {
|
||||||
var dropSpaceTimer = null;
|
let target = e.target;
|
||||||
|
// only set the last mouse down target if it is a left click, not on the
|
||||||
|
// close button, not on the new tab button, not on the title bar and its
|
||||||
|
// element
|
||||||
|
if (Utils.isLeftClick(e) &&
|
||||||
|
self.$closeButton[0] != target &&
|
||||||
|
self.$ntb[0] != target &&
|
||||||
|
self.$titlebar[0] != target &&
|
||||||
|
!self.$titlebar.contains(target) &&
|
||||||
|
!self.$appTabTray.contains(target)) {
|
||||||
|
lastMouseDownTarget = target;
|
||||||
|
} else {
|
||||||
|
lastMouseDownTarget = null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
container.mouseup(function(e) {
|
||||||
|
let same = (e.target == lastMouseDownTarget);
|
||||||
|
lastMouseDownTarget = null;
|
||||||
|
|
||||||
|
if (same && !self.isDragging) {
|
||||||
|
if (gBrowser.selectedTab.pinned &&
|
||||||
|
UI.getActiveTab() != self.getActiveTab() &&
|
||||||
|
self.getChildren().length > 0) {
|
||||||
|
UI.setActive(self, { dontSetActiveTabInGroup: true });
|
||||||
|
UI.goToTab(gBrowser.selectedTab);
|
||||||
|
} else {
|
||||||
|
let tabItem = self.getTopChild();
|
||||||
|
if (tabItem)
|
||||||
|
tabItem.zoomIn();
|
||||||
|
else
|
||||||
|
self.newTab();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let dropIndex = false;
|
||||||
|
let dropSpaceTimer = null;
|
||||||
|
|
||||||
// When the _dropSpaceActive flag is turned on on a group, and a tab is
|
// When the _dropSpaceActive flag is turned on on a group, and a tab is
|
||||||
// dragged on top, a space will open up.
|
// dragged on top, a space will open up.
|
||||||
|
|
|
@ -150,6 +150,7 @@ _BROWSER_FILES = \
|
||||||
browser_tabview_bug663421.js \
|
browser_tabview_bug663421.js \
|
||||||
browser_tabview_bug665502.js \
|
browser_tabview_bug665502.js \
|
||||||
browser_tabview_bug669694.js \
|
browser_tabview_bug669694.js \
|
||||||
|
browser_tabview_click_group.js \
|
||||||
browser_tabview_dragdrop.js \
|
browser_tabview_dragdrop.js \
|
||||||
browser_tabview_exit_button.js \
|
browser_tabview_exit_button.js \
|
||||||
browser_tabview_expander.js \
|
browser_tabview_expander.js \
|
||||||
|
|
|
@ -65,11 +65,6 @@ function test() {
|
||||||
simulateDoubleClick(container, 2);
|
simulateDoubleClick(container, 2);
|
||||||
assertNumberOfTabs(1);
|
assertNumberOfTabs(1);
|
||||||
|
|
||||||
// simulate double click with left mouse button
|
|
||||||
let container = groupItem.container;
|
|
||||||
simulateDoubleClick(container);
|
|
||||||
assertNumberOfTabs(1);
|
|
||||||
|
|
||||||
groupItem.close();
|
groupItem.close();
|
||||||
hideTabView(finishTest);
|
hideTabView(finishTest);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
let contentWindow;
|
||||||
|
let groupItem;
|
||||||
|
let groupItemId;
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
waitForExplicitFinish();
|
||||||
|
|
||||||
|
registerCleanupFunction(function() {
|
||||||
|
contentWindow.gPrefBranch.clearUserPref("animate_zoom");
|
||||||
|
let createdGroupItem = contentWindow.GroupItems.groupItem(groupItemId)
|
||||||
|
if (createdGroupItem)
|
||||||
|
closeGroupItem(createdGroupItem, function() {});
|
||||||
|
hideTabView(function() {});
|
||||||
|
});
|
||||||
|
|
||||||
|
showTabView(function() {
|
||||||
|
contentWindow = TabView.getContentWindow();
|
||||||
|
groupItem = createEmptyGroupItem(contentWindow, 300, 300, 200);
|
||||||
|
groupItemId = groupItem.id;
|
||||||
|
testMouseClickOnEmptyGroupItem();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function testMouseClickOnEmptyGroupItem() {
|
||||||
|
whenTabViewIsHidden(function() {
|
||||||
|
is(groupItem.getChildren().length, 1, "The group item contains one tab item now");
|
||||||
|
showTabView(testDraggingWithinGroupItem);
|
||||||
|
});
|
||||||
|
is(groupItem.getChildren().length, 0, "The group item doesn't contain any tab items");
|
||||||
|
EventUtils.sendMouseEvent({ type: "mousedown" }, groupItem.container, contentWindow);
|
||||||
|
EventUtils.sendMouseEvent({ type: "mouseup" }, groupItem.container, contentWindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testDraggingWithinGroupItem() {
|
||||||
|
let target = groupItem.container;
|
||||||
|
contentWindow.gPrefBranch.setBoolPref("animate_zoom", false);
|
||||||
|
|
||||||
|
// stimulate drag and drop
|
||||||
|
EventUtils.sendMouseEvent( {type: "mousedown" }, target, contentWindow);
|
||||||
|
EventUtils.synthesizeMouse(target, 10, 10, { type: "mousemove" }, contentWindow);
|
||||||
|
ok(groupItem.isDragging, "The group item is being dragged")
|
||||||
|
|
||||||
|
EventUtils.sendMouseEvent({ type: "mouseup" }, target, contentWindow);
|
||||||
|
ok(!groupItem.isDragging, "The dragging is competely");
|
||||||
|
|
||||||
|
executeSoon(function() {
|
||||||
|
ok(TabView.isVisible(), "The tab view is still visible after dragging");
|
||||||
|
contentWindow.gPrefBranch.clearUserPref("animate_zoom");
|
||||||
|
|
||||||
|
testMouseClickOnGroupItem();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function testMouseClickOnGroupItem() {
|
||||||
|
whenTabViewIsHidden(function() {
|
||||||
|
is(groupItem.getChildren().length, 1, "The group item still contains one tab item");
|
||||||
|
|
||||||
|
closeGroupItem(groupItem, function() {
|
||||||
|
hideTabView(finish);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
EventUtils.sendMouseEvent({ type: "mousedown" }, groupItem.container, contentWindow);
|
||||||
|
EventUtils.sendMouseEvent({ type: "mouseup" }, groupItem.container, contentWindow);
|
||||||
|
}
|
||||||
|
|
|
@ -31,21 +31,26 @@ function test() {
|
||||||
let transitioned = 0;
|
let transitioned = 0;
|
||||||
|
|
||||||
let initCallback = function() {
|
let initCallback = function() {
|
||||||
tabViewWindow = win.TabView._window;
|
tabViewWindow = win.TabView.getContentWindow();
|
||||||
function onTransitionEnd(event) {
|
function onTransitionEnd(event) {
|
||||||
transitioned++;
|
transitioned++;
|
||||||
info(transitioned);
|
info(transitioned);
|
||||||
}
|
}
|
||||||
tabViewWindow.document.addEventListener("transitionend", onTransitionEnd, false);
|
tabViewWindow.document.addEventListener("transitionend", onTransitionEnd, false);
|
||||||
|
|
||||||
showTabView(function() {
|
// don't use showTabView() here because we only want to check whether
|
||||||
|
// zoom out animation happens. Other animations would happen before
|
||||||
|
// the callback as waitForFocus() was added to showTabView() in head.js
|
||||||
|
let onTabViewShown = function() {
|
||||||
|
tabViewWindow.removeEventListener("tabviewshown", onTabViewShown, false);
|
||||||
|
tabViewWindow.document.removeEventListener("transitionend", onTransitionEnd, false);
|
||||||
|
|
||||||
ok(!transitioned, "There should be no transitions");
|
ok(!transitioned, "There should be no transitions");
|
||||||
|
|
||||||
tabViewWindow.document.removeEventListener(
|
|
||||||
"transitionend", onTransitionEnd, false);
|
|
||||||
|
|
||||||
finish();
|
finish();
|
||||||
}, win);
|
};
|
||||||
|
tabViewWindow.addEventListener("tabviewshown", onTabViewShown, false);
|
||||||
|
win.TabView.toggle();
|
||||||
};
|
};
|
||||||
|
|
||||||
win.TabView._initFrame(initCallback);
|
win.TabView._initFrame(initCallback);
|
||||||
|
|
|
@ -133,11 +133,13 @@ function showTabView(callback, win) {
|
||||||
win = win || window;
|
win = win || window;
|
||||||
|
|
||||||
if (win.TabView.isVisible()) {
|
if (win.TabView.isVisible()) {
|
||||||
callback();
|
waitForFocus(callback, win);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
whenTabViewIsShown(callback, win);
|
whenTabViewIsShown(function() {
|
||||||
|
waitForFocus(callback, win);
|
||||||
|
}, win);
|
||||||
win.TabView.show();
|
win.TabView.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче