[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