diff --git a/mobile/chrome/content/deckbrowser.xml b/mobile/chrome/content/deckbrowser.xml index b7977de6634..6731849d9a7 100644 --- a/mobile/chrome/content/deckbrowser.xml +++ b/mobile/chrome/content/deckbrowser.xml @@ -531,14 +531,8 @@ - - - - - - @@ -587,20 +565,13 @@ return; } - // Scroll the browser so that the event is targeted properly - var [pageOffsetX, pageOffsetY] = this._scrollAndGetOffset(); - - // Need to adjust for the toolbar height, etc. - var browserTop = this.browser.getBoundingClientRect().top; - var clickOffsetX = aEvent.clientX / this._zoomLevel; - var clickOffsetY = (aEvent.clientY - browserTop) / this._zoomLevel; + var [x, y] = this._clientToContentCoords(aEvent.clientX, aEvent.clientY); var cwin = this.browser.contentWindow; var cwu = cwin.QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIDOMWindowUtils); cwu.sendMouseEvent(aType || aEvent.type, - pageOffsetX + clickOffsetX, - pageOffsetY + clickOffsetY, + x, y, aEvent.button || 0, aEvent.detail || 1, 0); @@ -610,6 +581,35 @@ ]]> + + + + + + + var cdoc = this.browser.contentDocument; @@ -1047,8 +1047,20 @@ this.deckbrowser._zoomed = false; } else { var element = this.deckbrowser.elementFromPoint(aEvent.clientX, aEvent.clientY); - if (!element) - return; //XXX when does this happen? + if (!element) { + Components.utils.reportError("elementFromPoint returned null\n"); + return; + } + + // Find the nearest non-inline ancestor + while (element.parentNode) { + var display = window.getComputedStyle(element, "").getPropertyValue("display"); + var zoomable = /table/.test(display) || /block/.test(display); + if (zoomable) + break; + + element = element.parentNode; + } // Remember pageX/pageY [dragData.oldPageX, dragData.oldPageY] = [dragData.pageX, dragData.pageY];