*/
this.onmousemove = null;
+ function cancelEvent(e) {
+ e.stopPropagation();
+ if (e.preventDefault) e.preventDefault();
+ e.returnValue = false;
+ }
+
function moveMouse(pageX, pageY) {
guac_mouse.currentState.x = pageX - element.offsetLeft;
// Block context menu so right-click gets sent properly
- element.oncontextmenu = function(e) {
- return false;
- };
+ element.addEventListener("contextmenu", function(e) {
+ cancelEvent(e);
+ }, false);
- element.onmousemove = function(e) {
+ element.addEventListener("mousemove", function(e) {
// Don't handle if we aren't supposed to
if (gesture_in_progress) return;
- e.stopPropagation();
+ cancelEvent(e);
moveMouse(e.pageX, e.pageY);
- };
+ }, false);
var last_touch_x = 0;
var last_touch_y = 0;
var gesture_in_progress = false;
var click_release_timeout = null;
- element.ontouchend = function(e) {
+ element.addEventListener("touchend", function(e) {
// If we're handling a gesture
if (gesture_in_progress) {
- e.stopPropagation();
- e.preventDefault();
+ cancelEvent(e);
var time = new Date().getTime();
}
- };
+ }, false);
- element.ontouchstart = function(e) {
+ element.addEventListener("touchstart", function(e) {
// Record initial touch location and time for single-touch movement
// and tap gestures
if (e.touches.length == 1) {
- e.stopPropagation();
- e.preventDefault();
+ cancelEvent(e);
// Stop mouse events while touching
gesture_in_progress = true;
}
- };
+ }, false);
- element.ontouchmove = function(e) {
+ element.addEventListener("touchmove", function(e) {
// Handle single-touch movement gesture (touchpad mouse move)
if (e.touches.length == 1) {
- e.stopPropagation();
- e.preventDefault();
+ cancelEvent(e);
// Get change in touch location
var touch = e.touches[0];
}
- };
+ }, false);
- element.onmousedown = function(e) {
+ element.addEventListener("mousedown", function(e) {
// Don't handle if we aren't supposed to
if (gesture_in_progress) return;
- e.stopPropagation();
+ cancelEvent(e);
switch (e.button) {
case 0:
if (guac_mouse.onmousedown)
guac_mouse.onmousedown(guac_mouse.currentState);
- };
+ }, false);
- element.onmouseup = function(e) {
+ element.addEventListener("mouseup", function(e) {
// Don't handle if we aren't supposed to
if (gesture_in_progress) return;
- e.stopPropagation();
+ cancelEvent(e);
switch (e.button) {
case 0:
if (guac_mouse.onmouseup)
guac_mouse.onmouseup(guac_mouse.currentState);
- };
+ }, false);
- element.onmouseout = function(e) {
+ element.addEventListener("mouseout", function(e) {
// Don't handle if we aren't supposed to
if (gesture_in_progress) return;
- e.stopPropagation();
+ // Get parent of the element the mouse pointer is leaving
+ if (!e) e = window.event;
+
+ // Check that mouseout is due to actually LEAVING the element
+ var target = e.relatedTarget || e.toElement;
+ while (target != null) {
+ if (target === element)
+ return;
+ target = target.parentNode;
+ }
+
+ cancelEvent(e);
// Release all buttons
if (guac_mouse.currentState.left
guac_mouse.onmouseup(guac_mouse.currentState);
}
- };
+ }, true);
// Override selection on mouse event element.
- element.onselectstart = function() {
- return false;
- };
+ element.addEventListener("selectstart", function(e) {
+ cancelEvent(e);
+ }, false);
// Scroll wheel support
- element.onmousewheel = function(e) {
+ element.addEventListener('DOMMouseScroll', function(e) {
// Don't handle if we aren't supposed to
if (gesture_in_progress) return;
}
}
- if (e.preventDefault)
- e.preventDefault();
-
- e.returnValue = false;
-
- };
+ cancelEvent(e);
- element.addEventListener('DOMMouseScroll', element.onmousewheel, false);
+ }, false);
};