--- a/mobile/chrome/content/input.js
+++ b/mobile/chrome/content/input.js
@@ -194,17 +194,17 @@ MouseModule.prototype = {
// returned if none found.
let [targetScrollbox, targetScrollInterface, dragger]
= ScrollUtils.getScrollboxFromElement(aEvent.target);
// stop kinetic panning if targetScrollbox has changed
if (this._kinetic.isActive() && this._dragger != dragger)
this._kinetic.end();
- this._targetScrollbox = targetScrollbox;
+ this._targetScrollbox = targetScrollInterface ? targetScrollInterface.element : targetScrollbox;
this._targetScrollInterface = targetScrollInterface;
// Do tap
let event = document.createEvent("Events");
event.initEvent("TapDown", true, true);
event.clientX = aEvent.clientX;
event.clientY = aEvent.clientY;
let success = aEvent.target.dispatchEvent(event);
@@ -585,44 +585,54 @@ var ScrollUtils = {
isDraggable: function isDraggable(target, scroller) {
let sX = {}, sY = {};
scroller.getScrolledSize(sX, sY);
let rect = target.getBoundingClientRect();
return { x: sX.value > rect.width, y: sY.value > rect.height };
},
dragStart: function dragStart(cx, cy, target, scroller) {
- scroller.element.setAttribute("panning", "true");
+ scroller.element.addEventListener("PanBegin", this._showScrollbars, false);
},
- dragStop : function dragStop(dx, dy, scroller) {
- scroller.element.removeAttribute("panning");
+ dragStop: function dragStop(dx, dy, scroller) {
+ scroller.element.removeEventListener("PanBegin", this._showScrollbars, false);
return this.dragMove(dx, dy, scroller);
},
- dragMove : function dragMove(dx, dy, scroller) {
+ dragMove: function dragMove(dx, dy, scroller) {
if (scroller.getPosition) {
try {
-
let oldX = {}, oldY = {};
scroller.getPosition(oldX, oldY);
scroller.scrollBy(dx, dy);
let newX = {}, newY = {};
scroller.getPosition(newX, newY);
return (newX.value != oldX.value) || (newY.value != oldY.value);
} catch (e) { /* we have no time for whiny scrollers! */ }
}
return false;
+ },
+
+ _showScrollbars: function _showScrollbars(aEvent) {
+ let scrollbox = aEvent.target;
+ scrollbox.setAttribute("panning", "true");
+
+ // Wait for panning to be completely finished before removing scrollbars
+ scrollbox.addEventListener("PanFinished", function(aEvent) {
+ scrollbox.removeEventListener("PanFinished", arguments.callee, false);
+ scrollbox.removeAttribute("panning");
+ }, false);
}
- },
+ }
};
/**
* DragData handles processing drags on the screen, handling both
* locking of movement on one axis, and click detection.
*/
function DragData() {
this._domUtils = Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);