Index: third_party/google_input_tools/src/chrome/os/inputview/handler/pointeractionbundle.js |
diff --git a/third_party/google_input_tools/src/chrome/os/inputview/handler/pointeractionbundle.js b/third_party/google_input_tools/src/chrome/os/inputview/handler/pointeractionbundle.js |
index 8aa5d67645b0926c9757320bdb448e362bf314ec..e2e3adde1d3dbc2b6bf7904437d209920309d660 100644 |
--- a/third_party/google_input_tools/src/chrome/os/inputview/handler/pointeractionbundle.js |
+++ b/third_party/google_input_tools/src/chrome/os/inputview/handler/pointeractionbundle.js |
@@ -14,7 +14,6 @@ |
goog.provide('i18n.input.chrome.inputview.handler.PointerActionBundle'); |
goog.require('goog.Timer'); |
-goog.require('goog.dom'); |
goog.require('goog.events.EventTarget'); |
goog.require('goog.events.EventType'); |
goog.require('goog.math.Coordinate'); |
@@ -35,7 +34,7 @@ goog.scope(function() { |
/** |
* The handler for long press. |
* |
- * @param {i18n.input.chrome.inputview.elements.Element} view The view for this |
+ * @param {!i18n.input.chrome.inputview.elements.Element} view The view for this |
* pointer event. |
* @param {goog.events.EventTarget=} opt_parentEventTarget The parent event |
* target. |
@@ -50,7 +49,7 @@ i18n.input.chrome.inputview.handler.PointerActionBundle = function(view, |
/** |
* The target. |
* |
- * @type {i18n.input.chrome.inputview.elements.Element} |
+ * @type {!i18n.input.chrome.inputview.elements.Element} |
*/ |
this.view = view; |
@@ -156,6 +155,7 @@ PointerActionBundle.prototype.isFlickering_ = false; |
* @param {!Touch | !Event} e . |
*/ |
PointerActionBundle.prototype.handlePointerMove = function(e) { |
+ var identifier = Util.getEventIdentifier(e); |
var direction = 0; |
var deltaX = this.swipeState_.previousX == 0 ? 0 : (e.pageX - |
this.swipeState_.previousX); |
@@ -165,7 +165,7 @@ PointerActionBundle.prototype.handlePointerMove = function(e) { |
this.swipeState_.offsetY += deltaY; |
this.dispatchEvent(new i18n.input.chrome.inputview.events.DragEvent( |
this.view, direction, /** @type {!Node} */ (e.target), |
- e.pageX, e.pageY, deltaX, deltaY)); |
+ e.pageX, e.pageY, deltaX, deltaY, identifier)); |
var minimumSwipeDist = PointerActionBundle. |
MINIMUM_SWIPE_DISTANCE_; |
@@ -196,15 +196,14 @@ PointerActionBundle.prototype.handlePointerMove = function(e) { |
goog.Timer.clear(this.longPressTimer_); |
this.dispatchEvent(new i18n.input.chrome.inputview.events.SwipeEvent( |
this.view, direction, /** @type {!Node} */ (e.target), |
- e.pageX, e.pageY)); |
+ e.pageX, e.pageY, identifier)); |
var currentTargetView = Util.getView(this.currentTarget_); |
- if (this.view) { |
- this.isFlickering_ = !this.isLongPressing_ && !!(this.view.pointerConfig. |
- flickerDirection & direction) && currentTargetView == this.view; |
- } |
+ this.isFlickering_ = !this.isLongPressing_ && !!(this.view.pointerConfig. |
+ flickerDirection & direction) && currentTargetView == this.view; |
} |
- this.maybeSwitchTarget_(e); |
+ this.maybeSwitchTarget_( |
+ new goog.math.Coordinate(e.pageX, e.pageY), identifier); |
}; |
@@ -212,12 +211,13 @@ PointerActionBundle.prototype.handlePointerMove = function(e) { |
* If the target is switched to a new one, sends out a pointer_over for the new |
* target and sends out a pointer_out for the old target. |
* |
- * @param {!Touch | !Event | !goog.events.BrowserEvent} e . |
+ * @param {!goog.math.Coordinate} pageOffset . |
+ * @param {number} identifier . |
* @private |
*/ |
-PointerActionBundle.prototype.maybeSwitchTarget_ = function(e) { |
+PointerActionBundle.prototype.maybeSwitchTarget_ = function(pageOffset, |
+ identifier) { |
if (!this.isFlickering_) { |
- var pageOffset = this.getPageOffset_(e); |
var actualTarget = document.elementFromPoint(pageOffset.x, pageOffset.y); |
var currentTargetView = Util.getView(this.currentTarget_); |
var actualTargetView = Util.getView(actualTarget); |
@@ -226,13 +226,13 @@ PointerActionBundle.prototype.maybeSwitchTarget_ = function(e) { |
this.dispatchEvent(new i18n.input.chrome.inputview.events.PointerEvent( |
currentTargetView, |
i18n.input.chrome.inputview.events.EventType.POINTER_OUT, |
- this.currentTarget_, pageOffset.x, pageOffset.y)); |
+ this.currentTarget_, pageOffset.x, pageOffset.y, identifier)); |
} |
if (actualTargetView) { |
this.dispatchEvent(new i18n.input.chrome.inputview.events.PointerEvent( |
actualTargetView, |
i18n.input.chrome.inputview.events.EventType.POINTER_OVER, |
- actualTarget, pageOffset.x, pageOffset.y)); |
+ actualTarget, pageOffset.x, pageOffset.y, identifier)); |
} |
this.currentTarget_ = actualTarget; |
} |
@@ -248,16 +248,17 @@ PointerActionBundle.prototype.maybeSwitchTarget_ = function(e) { |
PointerActionBundle.prototype.handlePointerUp = function(e) { |
goog.Timer.clear(this.longPressTimer_); |
var pageOffset = this.getPageOffset_(e); |
+ var identifier = Util.getEventIdentifier(e); |
this.dispatchEvent(new i18n.input.chrome.inputview.events.PointerEvent( |
this.view, i18n.input.chrome.inputview.events.EventType.LONG_PRESS_END, |
- e.target, pageOffset.x, pageOffset.y)); |
+ e.target, pageOffset.x, pageOffset.y, identifier)); |
if (this.isDBLClicking_) { |
this.dispatchEvent(new i18n.input.chrome.inputview.events.PointerEvent( |
this.view, i18n.input.chrome.inputview.events.EventType. |
- DOUBLE_CLICK_END, e.target, pageOffset.x, pageOffset.y)); |
+ DOUBLE_CLICK_END, e.target, pageOffset.x, pageOffset.y, identifier)); |
} else if (!(this.isLongPressing_ && this.view.pointerConfig. |
longPressWithoutPointerUp)) { |
- this.maybeSwitchTarget_(e); |
+ this.maybeSwitchTarget_(pageOffset, identifier); |
var view = Util.getView(this.currentTarget_); |
var target = this.currentTarget_; |
if (this.isFlickering_) { |
@@ -271,12 +272,13 @@ PointerActionBundle.prototype.handlePointerUp = function(e) { |
// POINTER_UP event to keyboard to commit the selected accent character. |
this.dispatchEvent(new i18n.input.chrome.inputview.events.PointerEvent( |
view, i18n.input.chrome.inputview.events.EventType.POINTER_UP, |
- target, pageOffset.x, pageOffset.y, this.pointerUpTimeStamp_)); |
+ target, pageOffset.x, pageOffset.y, identifier, |
+ this.pointerUpTimeStamp_)); |
} |
if (Util.getView(this.currentTarget_) == this.view) { |
this.dispatchEvent(new i18n.input.chrome.inputview.events.PointerEvent( |
this.view, i18n.input.chrome.inputview.events.EventType.CLICK, |
- e.target, pageOffset.x, pageOffset.y)); |
+ e.target, pageOffset.x, pageOffset.y, identifier)); |
} |
this.isDBLClicking_ = false; |
this.isLongPressing_ = false; |
@@ -301,16 +303,17 @@ PointerActionBundle.prototype.cancelDoubleClick = function() { |
PointerActionBundle.prototype.handlePointerDown = function(e) { |
this.currentTarget_ = e.target; |
goog.Timer.clear(this.longPressTimer_); |
- if (e.type != goog.events.EventType.MOUSEDOWN) { |
- // Don't trigger long press for mouse event. |
- this.maybeTriggerKeyDownLongPress_(e); |
+ var identifier = Util.getEventIdentifier(e); |
+ if (e.type == goog.events.EventType.TOUCHSTART) { |
+ this.maybeTriggerKeyDownLongPress_(e, identifier); |
} |
- this.maybeHandleDBLClick_(e); |
+ this.maybeHandleDBLClick_(e, identifier); |
if (!this.isDBLClicking_) { |
var pageOffset = this.getPageOffset_(e); |
this.dispatchEvent(new i18n.input.chrome.inputview.events.PointerEvent( |
this.view, i18n.input.chrome.inputview.events.EventType.POINTER_DOWN, |
- e.target, pageOffset.x, pageOffset.y, this.pointerDownTimeStamp_)); |
+ e.target, pageOffset.x, pageOffset.y, identifier, |
+ this.pointerDownTimeStamp_)); |
} |
}; |
@@ -318,19 +321,11 @@ PointerActionBundle.prototype.handlePointerDown = function(e) { |
/** |
* Gets the page offset from the event which may be mouse event or touch event. |
* |
- * @param {!goog.events.BrowserEvent | !Touch | !Event} e . |
+ * @param {!goog.events.BrowserEvent} e . |
* @return {!goog.math.Coordinate} . |
* @private |
*/ |
PointerActionBundle.prototype.getPageOffset_ = function(e) { |
- if (e.pageX && e.pageY) { |
- return new goog.math.Coordinate(e.pageX, e.pageY); |
- } |
- |
- if (!e.getBrowserEvent) { |
- return new goog.math.Coordinate(0, 0); |
- } |
- |
var nativeEvt = e.getBrowserEvent(); |
if (nativeEvt.pageX && nativeEvt.pageY) { |
return new goog.math.Coordinate(nativeEvt.pageX, nativeEvt.pageY); |
@@ -354,13 +349,15 @@ PointerActionBundle.prototype.getPageOffset_ = function(e) { |
* Maybe triggers the long press timer when pointer down. |
* |
* @param {!goog.events.BrowserEvent} e The event. |
+ * @param {number} identifier . |
* @private |
*/ |
-PointerActionBundle.prototype.maybeTriggerKeyDownLongPress_ = function(e) { |
+PointerActionBundle.prototype.maybeTriggerKeyDownLongPress_ = function(e, |
+ identifier) { |
if (this.view && (this.view.pointerConfig.longPressWithPointerUp || |
this.view.pointerConfig.longPressWithoutPointerUp)) { |
this.longPressTimer_ = goog.Timer.callOnce( |
- goog.bind(this.triggerLongPress_, this, e), |
+ goog.bind(this.triggerLongPress_, this, e, identifier), |
this.view.pointerConfig.longPressDelay, this); |
} |
}; |
@@ -370,9 +367,10 @@ PointerActionBundle.prototype.maybeTriggerKeyDownLongPress_ = function(e) { |
* Maybe handle the double click. |
* |
* @param {!goog.events.BrowserEvent} e . |
+ * @param {number} identifier . |
* @private |
*/ |
-PointerActionBundle.prototype.maybeHandleDBLClick_ = function(e) { |
+PointerActionBundle.prototype.maybeHandleDBLClick_ = function(e, identifier) { |
if (this.view && this.view.pointerConfig.dblClick) { |
var timeInMs = new Date().getTime(); |
var interval = this.view.pointerConfig.dblClickDelay || |
@@ -381,7 +379,7 @@ PointerActionBundle.prototype.maybeHandleDBLClick_ = function(e) { |
if ((timeInMs - this.pointerDownTimeStamp_) < interval) { |
this.dispatchEvent(new i18n.input.chrome.inputview.events.PointerEvent( |
this.view, i18n.input.chrome.inputview.events.EventType.DOUBLE_CLICK, |
- e.target, nativeEvt.pageX, nativeEvt.pageY)); |
+ e.target, nativeEvt.pageX, nativeEvt.pageY, identifier)); |
this.isDBLClicking_ = true; |
} |
this.pointerDownTimeStamp_ = timeInMs; |
@@ -393,16 +391,17 @@ PointerActionBundle.prototype.maybeHandleDBLClick_ = function(e) { |
* Triggers long press event. |
* |
* @param {!goog.events.BrowserEvent} e The event. |
+ * @param {number} identifier . |
* @private |
*/ |
-PointerActionBundle.prototype.triggerLongPress_ = function(e) { |
+PointerActionBundle.prototype.triggerLongPress_ = function(e, identifier) { |
var nativeEvt = e.getBrowserEvent(); |
if (nativeEvt.touches.length > 1) { |
return; |
} |
this.dispatchEvent(new i18n.input.chrome.inputview.events.PointerEvent( |
this.view, i18n.input.chrome.inputview.events.EventType.LONG_PRESS, |
- e.target, nativeEvt.pageX, nativeEvt.pageY)); |
+ e.target, nativeEvt.pageX, nativeEvt.pageY, identifier)); |
this.isLongPressing_ = true; |
}; |