You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xap-commits@incubator.apache.org by jm...@apache.org on 2007/04/27 19:29:29 UTC

svn commit: r533196 - /incubator/xap/trunk/codebase/src/xap/bridges/basic/AbstractWidgetBridge.js

Author: jmargaris
Date: Fri Apr 27 12:29:29 2007
New Revision: 533196

URL: http://svn.apache.org/viewvc?view=rev&rev=533196
Log:
For David Gennaco: https://issues.apache.org/jira/browse/XAP-389

Modified:
    incubator/xap/trunk/codebase/src/xap/bridges/basic/AbstractWidgetBridge.js

Modified: incubator/xap/trunk/codebase/src/xap/bridges/basic/AbstractWidgetBridge.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/codebase/src/xap/bridges/basic/AbstractWidgetBridge.js?view=diff&rev=533196&r1=533195&r2=533196
==============================================================================
--- incubator/xap/trunk/codebase/src/xap/bridges/basic/AbstractWidgetBridge.js (original)
+++ incubator/xap/trunk/codebase/src/xap/bridges/basic/AbstractWidgetBridge.js Fri Apr 27 12:29:29 2007
@@ -1203,12 +1203,19 @@
 	            return;
 	        }
 	        
-	    	var targetAncestor = e.relatedTarget.parentNode;
-	    	while (targetAncestor != null) { // TODO can this be optimized somehow?
-	    		if (targetAncestor === e.currentTarget) {
-	    			return; // ITS MOVING OUT OF US, BUT INTO OUR PROGENY, SO NOT REALLY OUT!
-	    		}
-	    		targetAncestor = targetAncestor.parentNode;
+	        try {
+	    	    var targetAncestor = e.relatedTarget.parentNode;
+	    	    while (targetAncestor != null) { // TODO can this be optimized somehow?
+	    		    if (targetAncestor === e.currentTarget) {
+	    			    return; // ITS MOVING OUT OF US, BUT INTO OUR PROGENY, SO NOT REALLY OUT!
+	    		    }
+	    		    targetAncestor = targetAncestor.parentNode;
+	    	    }
+	    	} catch (error) {
+	    	    // firefox can throw security exceptions when attemptin to access
+	    	    // the parent node of the related target, for instance, when it is
+	    	    // an input field, we'll just have to assume we're truly mousing out
+	    	    targetAncestor = null;  
 	    	}
 	    }
 		     
@@ -1278,6 +1285,30 @@
     }
 }
 
+xap.bridges.basic.AbstractWidgetBridge.prototype.getMouseButtonNumber = function(htmlEvent) {
+    var buttonNumber = null;
+    var browserButtonCode = htmlEvent.button;
+    if (typeof browserButtonCode != "undefined") {
+        // we use 1 left, 2 right, 3 middle 
+        if(dojo.render.html.ie) {
+            if (browserButtonCode == 4) {  // MSIE: 1 left, 2 right, 4 middle
+                buttonNumber = 3;
+            } else {
+                buttonNumber = browserButtonCode;
+            }
+        } else { // W3C: 0 left, 1 middle, 2 right
+            if (browserButtonCode == 0) {
+                buttonNumber = 1;
+            } else if (browserButtonCode == 1) {
+                buttonNumber = 3;
+            } else {
+                buttonNumber = browserButtonCode;
+            }
+        }
+    }
+    return buttonNumber;
+}
+
 xap.bridges.basic.AbstractWidgetBridge.prototype.fireMouseEvent = function( eventName, htmlEvent){
     // optimization, check whether there is an event handler registered and exit fast first
     if (!this.getElement().getAttribute(eventName)) {
@@ -1290,12 +1321,10 @@
 	//relative to current component, this seems right in IE and moz
 	clientEvent.clickX = htmlEvent.layerX;
 	clientEvent.clickY = htmlEvent.layerY;
-	clientEvent.buttonNumber = htmlEvent.button;
+	clientEvent.buttonNumber = this.getMouseButtonNumber(htmlEvent);
 	this._addKeyMods(clientEvent, htmlEvent);
 	
 	this.fireEvent(eventName,null,null,clientEvent);
-	//IMPORTANT button number is 0-2 based, not 1-3?
-	//depends on browser, need to fix this up...
 	//IMPORTANT consumed, cancel?
 }