[Laszlo-checkins] r13809 - in openlaszlo/trunk: WEB-INF/lps/lfc/kernel/swf9 lps/components/extensions lps/includes/source test/extensions
max@openlaszlo.org
max at openlaszlo.org
Tue May 5 13:26:37 PDT 2009
Author: max
Date: 2009-05-05 13:26:35 -0700 (Tue, 05 May 2009)
New Revision: 13809
Modified:
openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzMouseKernel.as
openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzSprite.as
openlaszlo/trunk/lps/components/extensions/html.lzx
openlaszlo/trunk/lps/includes/source/embednew.js
openlaszlo/trunk/lps/includes/source/iframemanager.js
openlaszlo/trunk/test/extensions/html.lzx
Log:
Change 20090501-maxcarlson-y by maxcarlson at Bank on 2009-05-01 20:16:08 PDT
in /Users/maxcarlson/openlaszlo/trunk-clean
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Add mouse events to the html tag
Bugs Fixed: LPP-8034 - Mouse clicks in the HTML component do not trigger an onclick event on the HTML instance or in LzGlobalMouse
Technical Reviewer: andre.bargull at udo.edu
QA Reviewer: hminsky
Details: test/extensions/html - Override mouseevent to show mouse events in the debugger.
LzMouseKernel, LzSprite - Rename LzMouseKernel.__sendEvent() -> handleMouseEvent() to be consistent with swf8
lps/components/extensions/html - Add swf callback method for __gotMouseEvent().
embednew - attachEventHandler() supports an optional 'closure' value which will be returned as an extra argument to the callback.
iframemanager - After the iframe finishes loading, attempt to listen for global mouse events on the window object. Remove listeners when the iframe is destroyed. Add __mouseEvent() callback which processes mouse events and delegates to the appropriate swf or dhtml APIs.
Tests: test/extensions/html.lzx?debug=true shows mouse events being sent from the iframe.
Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzMouseKernel.as
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzMouseKernel.as 2009-05-05 16:39:33 UTC (rev 13808)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzMouseKernel.as 2009-05-05 20:26:35 UTC (rev 13809)
@@ -25,7 +25,7 @@
//////////////////
// sends mouse events to the callback
- static function __sendEvent (view:*, eventname:String) :void {
+ static function handleMouseEvent (view:*, eventname:String) :void {
if (__callback) __scope[__callback](eventname, view);
//Debug.write('LzMouseKernel event', eventname);
}
@@ -82,9 +82,9 @@
LFCApplication.stage.focus = null;
// generate a 'onmouseenter' event
- __sendEvent(null, 'onmouseenter');
+ handleMouseEvent(null, 'onmouseenter');
}
- __sendEvent(null, eventname);
+ handleMouseEvent(null, eventname);
}
}
@@ -101,7 +101,7 @@
// handles MOUSE_LEAVE event
static function __mouseLeaveHandler (event:Event = null) :void {
__mouseLeft = true;
- __sendEvent(null, 'onmouseleave');
+ handleMouseEvent(null, 'onmouseleave');
}
static function __mouseWheelHandler (event:MouseEvent) :void {
Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzSprite.as
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzSprite.as 2009-05-05 16:39:33 UTC (rev 13808)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzSprite.as 2009-05-05 20:26:35 UTC (rev 13809)
@@ -662,7 +662,7 @@
}
public function handleMouse_DOUBLE_CLICK (event:MouseEvent) :void {
- LzMouseKernel.__sendEvent( owner, 'ondblclick');
+ LzMouseKernel.handleMouseEvent( owner, 'ondblclick');
event.stopPropagation();
}
@@ -678,7 +678,7 @@
this.__mouseEvent(new MouseEvent('mouseupoutside'));
if (mouseOverSprite != null) {
// send after onmouseup(outside) (LPP-7335)
- LzMouseKernel.__sendEvent(mouseOverSprite.owner, 'onmouseover');
+ LzMouseKernel.handleMouseEvent(mouseOverSprite.owner, 'onmouseover');
}
}
LzMouseKernel.__lastMouseDown = null;
@@ -727,10 +727,10 @@
(eventname == 'onmouseover' || eventname == 'onmouseout')) {
// only send mouseover/out/dragin/dragout if the mouse went down on this sprite (LPP-6677, LPP-7335)
if (LzMouseKernel.__lastMouseDown === this) {
- LzMouseKernel.__sendEvent(this.owner, eventname);
+ LzMouseKernel.handleMouseEvent(this.owner, eventname);
var dragname:String = eventname == 'onmouseover' ? 'onmousedragin' : 'onmousedragout';
- LzMouseKernel.__sendEvent(this.owner, dragname);
+ LzMouseKernel.handleMouseEvent(this.owner, dragname);
} else {
// defer mouse-events until mouse is released (LPP-7300, LPP-7335)
if (eventname == 'onmouseover') {
@@ -740,7 +740,7 @@
}
}
} else {
- LzMouseKernel.__sendEvent(this.owner, eventname);
+ LzMouseKernel.handleMouseEvent(this.owner, eventname);
}
// If this.showhandcursor is null, inherit value from LzMouseKernel.showhandcursor
Modified: openlaszlo/trunk/lps/components/extensions/html.lzx
===================================================================
--- openlaszlo/trunk/lps/components/extensions/html.lzx 2009-05-05 16:39:33 UTC (rev 13808)
+++ openlaszlo/trunk/lps/components/extensions/html.lzx 2009-05-05 20:26:35 UTC (rev 13809)
@@ -38,8 +38,13 @@
lz.Browser.callJS('lz.embed.iframemanager.scrollBy', null, id, x, y);
}
lz.embed.iframemanager.__gotload = function(id) {
- if (lz.embed.iframemanager.owners[id]) lz.embed.iframemanager.owners[id].__gotload();
+ var view = lz.embed.iframemanager.owners[id];
+ if (view) view.__gotload();
}
+lz.embed.iframemanager.__gotMouseEvent = function(id, eventname) {
+ var view = lz.embed.iframemanager.owners[id];
+ if (view) LzMouseKernel.handleMouseEvent(view, eventname);
+}
lz.embed.iframemanager.__destroy = function(id) {
lz.Browser.callJS('lz.embed.iframemanager.__destroy', null, id);
}
Modified: openlaszlo/trunk/lps/includes/source/embednew.js
===================================================================
--- openlaszlo/trunk/lps/includes/source/embednew.js 2009-05-05 16:39:33 UTC (rev 13808)
+++ openlaszlo/trunk/lps/includes/source/embednew.js 2009-05-05 20:26:35 UTC (rev 13809)
@@ -672,7 +672,7 @@
* @param callbackscope:Object Scope to receive the callback
* @param callbackname:String Method name to receive callback in callbackscope
*/
- attachEventHandler: function(eventscope, eventname, callbackscope, callbackname) {
+ attachEventHandler: function(eventscope, eventname, callbackscope, callbackname, closure) {
if (! (callbackscope && callbackname
&& typeof callbackscope[callbackname] == 'function')) {
return;
@@ -695,7 +695,8 @@
}
}
var handler = function() {
- var a = window.event ? [window.event] : arguments;
+ var a = window.event ? [window.event] : [].slice.call(arguments, 0);;
+ if (closure) a.push(closure);
callbackscope[callbackname].apply(callbackscope, a);
}
handler.$e = eventscope;
Modified: openlaszlo/trunk/lps/includes/source/iframemanager.js
===================================================================
--- openlaszlo/trunk/lps/includes/source/iframemanager.js 2009-05-05 16:39:33 UTC (rev 13808)
+++ openlaszlo/trunk/lps/includes/source/iframemanager.js 2009-05-05 20:26:35 UTC (rev 13809)
@@ -230,6 +230,21 @@
lz.embed[iframe.owner].callMethod('lz.embed.iframemanager.__gotload(\'' + id + '\')');
}
this.__loading[id] = false;
+ var iframe = lz.embed.iframemanager.getFrameWindow(id);
+ // bind into global events.
+ try {
+ 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);
+ 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);
+ } else {
+ lz.embed.attachEventHandler(iframe.document, 'mouseover', lz.embed.iframemanager, '__mouseEvent', id);
+ lz.embed.attachEventHandler(iframe.document, 'mouseout', lz.embed.iframemanager, '__mouseEvent', id);
+ }
+ } catch(e) {
+ }
if (this.__calljsqueue[id]) {
this.__playQueue(this.__calljsqueue[id]);
delete this.__calljsqueue[id];
@@ -273,6 +288,20 @@
}
var iframe = lz.embed.iframemanager.__frames[id];
if (iframe) {
+ // remove event listeners
+ try {
+ 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');
+ 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');
+ } else {
+ lz.embed.removeEventHandler(iframe.document, 'mouseover', lz.embed.iframemanager, '__mouseEvent');
+ lz.embed.removeEventHandler(iframe.document, 'mouseout', lz.embed.iframemanager, '__mouseEvent');
+ }
+ } catch(e) {
+ }
iframe.owner = null;
iframe.appcontainer = null;
LzSprite.prototype.__discardElement(iframe);
@@ -306,4 +335,27 @@
} catch (e) {
}
}
+ ,__mouseEvent: function(e, id) {
+ var iframe = lz.embed.iframemanager.getFrame(id);
+ //console.log('__gotload', iframe;
+ if (! iframe) return;
+
+ if (!e) {
+ e = window.event;
+ }
+
+ if (iframe.owner && iframe.owner.sprite && iframe.owner.sprite.__mouseEvent) {
+ // dhtml
+ iframe.owner.sprite.__mouseEvent(e);
+ } else {
+ var eventname = 'on' + e.type;
+ // deal with IE event names
+ if (eventname == 'onmouseleave') {
+ eventname = 'onmouseout';
+ } else if (eventname == 'onmouseenter') {
+ eventname = 'onmouseover';
+ }
+ lz.embed[iframe.owner].callMethod('lz.embed.iframemanager.__gotMouseEvent(\'' + id + '\',\'' + eventname + '\')');
+ }
+ }
}
Modified: openlaszlo/trunk/test/extensions/html.lzx
===================================================================
--- openlaszlo/trunk/test/extensions/html.lzx 2009-05-05 16:39:33 UTC (rev 13808)
+++ openlaszlo/trunk/test/extensions/html.lzx 2009-05-05 20:26:35 UTC (rev 13809)
@@ -78,6 +78,10 @@
<handler name="onload">
Debug.write('onload');
</handler>
+ <method name="mouseevent" args="ename">
+ super.mouseevent(ename);
+ Debug.warn('mouseevent', ename);
+ </method>
</html>
</class>
More information about the Laszlo-checkins
mailing list