Bug 719276 - Use touchstart to determine when to start showing tap highlight. r=mbrubeck

This commit is contained in:
Wes Johnston 2012-03-05 09:11:17 -08:00
parent 5a15c486c6
commit ff218c5149

View File

@ -2218,7 +2218,7 @@ Tab.prototype = {
var BrowserEventHandler = {
init: function init() {
Services.obs.addObserver(this, "Gesture:SingleTap", false);
Services.obs.addObserver(this, "Gesture:ShowPress", false);
document.addEventListener("touchstart", this, false);
Services.obs.addObserver(this, "Gesture:CancelTouch", false);
Services.obs.addObserver(this, "Gesture:DoubleTap", false);
Services.obs.addObserver(this, "Gesture:Scroll", false);
@ -2227,6 +2227,34 @@ var BrowserEventHandler = {
BrowserApp.deck.addEventListener("DOMUpdatePageReport", PopupBlockerObserver.onUpdatePageReport, false);
},
handleEvent: function(aEvent) {
switch(aEvent.type) {
case "touchstart":
if (aEvent.touches.length == 1) {
let closest = ElementTouchHelper.elementFromPoint(BrowserApp.selectedBrowser.contentWindow,
aEvent.touches[0].screenX, aEvent.touches[0].screenY);
if (!closest) {
closest = ElementTouchHelper.anyElementFromPoint(BrowserApp.selectedBrowser.contentWindow,
aEvent.touches[0].screenX, aEvent.touches[0].screenY);
}
if (closest) {
this._doTapHighlight(closest);
// If we've pressed a scrollable element, let Java know that we may
// want to override the scroll behaviour (for document sub-frames)
this._scrollableElement = this._findScrollableElement(closest, true);
this._firstScrollEvent = true;
if (this._scrollableElement != null) {
// Discard if it's the top-level scrollable, we let Java handle this
let doc = BrowserApp.selectedBrowser.contentDocument;
if (this._scrollableElement != doc.body && this._scrollableElement != doc.documentElement)
sendMessageToJava({ gecko: { type: "Panning:Override" } });
}
}
}
}
},
observe: function(aSubject, aTopic, aData) {
if (aTopic == "Gesture:Scroll") {
// If we've lost our scrollable element, return. Don't cancel the
@ -2261,26 +2289,6 @@ var BrowserEventHandler = {
}
} else if (aTopic == "Gesture:CancelTouch") {
this._cancelTapHighlight();
} else if (aTopic == "Gesture:ShowPress") {
let data = JSON.parse(aData);
let closest = ElementTouchHelper.elementFromPoint(BrowserApp.selectedBrowser.contentWindow, data.x, data.y);
if (!closest)
closest = ElementTouchHelper.anyElementFromPoint(BrowserApp.selectedBrowser.contentWindow, data.x, data.y);
if (closest) {
this._doTapHighlight(closest);
// If we've pressed a scrollable element, let Java know that we may
// want to override the scroll behaviour (for document sub-frames)
this._scrollableElement = this._findScrollableElement(closest, true);
this._firstScrollEvent = true;
if (this._scrollableElement != null) {
// Discard if it's the top-level scrollable, we let Java handle this
let doc = BrowserApp.selectedBrowser.contentDocument;
if (this._scrollableElement != doc.body && this._scrollableElement != doc.documentElement)
sendMessageToJava({ gecko: { type: "Panning:Override" } });
}
}
} else if (aTopic == "Gesture:SingleTap") {
let element = this._highlightElement;
if (element && !SelectHelper.handleClick(element)) {