[Laszlo-checkins] r13869 - in openlaszlo/trunk: WEB-INF/lps/lfc/kernel/dhtml lps/includes/source
max@openlaszlo.org
max at openlaszlo.org
Mon May 11 15:53:31 PDT 2009
Author: max
Date: 2009-05-11 15:53:30 -0700 (Mon, 11 May 2009)
New Revision: 13869
Modified:
openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzMouseKernel.js
openlaszlo/trunk/lps/includes/source/iframemanager.js
Log:
Change 20090508-maxcarlson-L by maxcarlson at Bank on 2009-05-08 17:01:02 PDT
in /Users/maxcarlson/openlaszlo/trunk-clean
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Forward oncontextmenu events from iframes
Bugs Fixed: LPP-8140 - Clicking on an iframe sometimes gives iframe right click menu, but sometimes gives LZX right click menu
Technical Reviewer: hminsky
QA Reviewer: lorien at laszlosystems.com
Details: LzMouseKernel - __sendMouseMove() accepts optional x and y offsets to correct the mouse position.
iframemanager - Register/unregister for iframe context menu events. Pass the offset of the iframe into LzMouseKernel.__sentMouseMove() to correct the positioning of context menus, then call LzMouseKernel.__showContextMenu(), returning the value to cancel the oncontextmenu event where needed.
Tests: See LPP-8140.
Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzMouseKernel.js
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzMouseKernel.js 2009-05-11 22:33:39 UTC (rev 13868)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzMouseKernel.js 2009-05-11 22:53:30 UTC (rev 13869)
@@ -183,7 +183,7 @@
var el = document.getElementById('lzcanvasclickdiv');
el.style.display = isclickable ? 'block' : 'none';
}
- ,__sendMouseMove: function(e) {
+ ,__sendMouseMove: function(e, offsetx, offsety) {
// see http://www.quirksmode.org/js/events_properties.html#position
if (e.pageX || e.pageY) {
LzMouseKernel.__x = e.pageX;
@@ -195,6 +195,12 @@
LzMouseKernel.__x = e.clientX + body.scrollLeft + docElem.scrollLeft;
LzMouseKernel.__y = e.clientY + body.scrollTop + docElem.scrollTop;
}
+ if (offsetx) {
+ LzMouseKernel.__x += offsety;
+ }
+ if (offsety) {
+ LzMouseKernel.__y += offsety;
+ }
if (e.type == 'mousemove') {
LzMouseKernel.__sendEvent('onmousemove');
}
Modified: openlaszlo/trunk/lps/includes/source/iframemanager.js
===================================================================
--- openlaszlo/trunk/lps/includes/source/iframemanager.js 2009-05-11 22:33:39 UTC (rev 13868)
+++ openlaszlo/trunk/lps/includes/source/iframemanager.js 2009-05-11 22:53:30 UTC (rev 13869)
@@ -239,6 +239,9 @@
lz.embed.attachEventHandler(iframe.document, 'mousedown', lz.embed.iframemanager, '__mouseEvent', id);
lz.embed.attachEventHandler(iframe.document, 'mouseup', lz.embed.iframemanager, '__mouseEvent', id);
//lz.embed.attachEventHandler(iframe.document, 'mousemove', lz.embed.iframemanager, '__mouseEvent', id);
+ iframe.document.oncontextmenu = function(e) {
+ return lz.embed.iframemanager.__mouseEvent(e, id);
+ }
if (lz.embed.browser.isIE) {
lz.embed.attachEventHandler(iframe.document, 'mouseenter', lz.embed.iframemanager, '__mouseEvent', id);
lz.embed.attachEventHandler(iframe.document, 'mouseleave', lz.embed.iframemanager, '__mouseEvent', id);
@@ -299,6 +302,7 @@
lz.embed.removeEventHandler(iframe.document, 'mousedown', lz.embed.iframemanager, '__mouseEvent');
lz.embed.removeEventHandler(iframe.document, 'mouseup', lz.embed.iframemanager, '__mouseEvent');
//lz.embed.removeEventHandler(iframe.document, 'mousemove', lz.embed.iframemanager, '__mouseEvent');
+ iframe.document.oncontextmenu = null;
if (lz.embed.browser.isIE) {
lz.embed.removeEventHandler(iframe.document, 'mouseenter', lz.embed.iframemanager, '__mouseEvent');
lz.embed.removeEventHandler(iframe.document, 'mouseleave', lz.embed.iframemanager, '__mouseEvent');
@@ -362,11 +366,17 @@
e = window.event;
}
+ var eventname = 'on' + e.type;
if (iframe.owner && iframe.owner.sprite && iframe.owner.sprite.__mouseEvent) {
// dhtml
- iframe.owner.sprite.__mouseEvent(e);
+ if (eventname == 'oncontextmenu') {
+ var pos = lz.embed.getAbsolutePosition(iframe);
+ LzMouseKernel.__sendMouseMove(e, pos.x, pos.y)
+ return LzMouseKernel.__showContextMenu(e);
+ } else {
+ iframe.owner.sprite.__mouseEvent(e);
+ }
} else {
- var eventname = 'on' + e.type;
// deal with IE event names
if (eventname == 'onmouseleave') {
eventname = 'onmouseout';
More information about the Laszlo-checkins
mailing list