From 865c3884b2a56fc58a75093e04f34895cace4dd9 Mon Sep 17 00:00:00 2001 From: "Jessica R." <60241371+Seafret@users.noreply.github.com> Date: Wed, 1 Jan 2025 22:38:48 -0700 Subject: [PATCH 1/3] Changed hasGestureHandlers to be a function to better work with dynamically added handlers Previously, we were setting hasGestureHandlers once in the constructor and never re-assigning it after the initial creation. This resulted in MouseTrackers created without gesture handlers never updating its hasGestureHandlers values, even when gesture handlers were dynamically added after creation. By changing this to a function, our MouseTrackers' hasGestureHandlers value should always be in the proper state, even if handlers are dynamically created or removed. --- src/mousetracker.js | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/mousetracker.js b/src/mousetracker.js index e56cb609..d64ef0b5 100644 --- a/src/mousetracker.js +++ b/src/mousetracker.js @@ -277,11 +277,6 @@ sentDragEvent: false }; - this.hasGestureHandlers = !!( this.pressHandler || this.nonPrimaryPressHandler || - this.releaseHandler || this.nonPrimaryReleaseHandler || - this.clickHandler || this.dblClickHandler || - this.dragHandler || this.dragEndHandler || - this.pinchHandler ); this.hasScrollHandler = !!this.scrollHandler; if ( $.MouseTracker.havePointerEvents ) { @@ -391,6 +386,23 @@ return count; }, + /** + * Do we currently have any assigned gesture handlers. + * @function + * @returns {Boolean} Do we currently have any assigned gesture handlers. + */ + hasGestureHandlers: function () { + return !!(this.pressHandler || + this.nonPrimaryPressHandler || + this.releaseHandler || + this.nonPrimaryReleaseHandler || + this.clickHandler || + this.dblClickHandler || + this.dragHandler || + this.dragEndHandler || + this.pinchHandler); + }, + /** * Implement or assign implementation to these handlers during or after * calling the constructor. @@ -2836,7 +2848,7 @@ eventInfo.isStoppable = true; eventInfo.isCancelable = true; eventInfo.preventDefault = false; - eventInfo.preventGesture = !tracker.hasGestureHandlers; + eventInfo.preventGesture = !tracker.hasGestureHandlers(); eventInfo.stopPropagation = false; break; case 'pointerover': @@ -2854,15 +2866,15 @@ case 'pointerdown': eventInfo.isStoppable = true; eventInfo.isCancelable = true; - eventInfo.preventDefault = false; // updatePointerDown() may set true (tracker.hasGestureHandlers) - eventInfo.preventGesture = !tracker.hasGestureHandlers; + eventInfo.preventDefault = false; // updatePointerDown() may set true (tracker.hasGestureHandlers()) + eventInfo.preventGesture = !tracker.hasGestureHandlers(); eventInfo.stopPropagation = false; break; case 'pointerup': eventInfo.isStoppable = true; eventInfo.isCancelable = true; eventInfo.preventDefault = false; - eventInfo.preventGesture = !tracker.hasGestureHandlers; + eventInfo.preventGesture = !tracker.hasGestureHandlers(); eventInfo.stopPropagation = false; break; case 'wheel': From 9527f15f52f859ae5f565fc56dc7938930143828 Mon Sep 17 00:00:00 2001 From: "Jessica R." <60241371+Seafret@users.noreply.github.com> Date: Wed, 1 Jan 2025 22:45:12 -0700 Subject: [PATCH 2/3] Changed hasScrollHandler to be a function to better work with dynamically added handlers Previously, we were setting hasScrollHandler once in the constructor and never re-assigning it after the initial creation. Changing hasScrollHandler to a function better accommodates dynamically added/removed handlers. See previous commit for change to hasGestureHandlers for further details and reasoning. --- src/mousetracker.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/mousetracker.js b/src/mousetracker.js index d64ef0b5..ffba58b6 100644 --- a/src/mousetracker.js +++ b/src/mousetracker.js @@ -277,8 +277,6 @@ sentDragEvent: false }; - this.hasScrollHandler = !!this.scrollHandler; - if ( $.MouseTracker.havePointerEvents ) { $.setElementPointerEvents( this.element, 'auto' ); } @@ -403,6 +401,15 @@ this.pinchHandler); }, + /** + * Do we currently have a scroll handler. + * @function + * @returns {Boolean} Do we currently have a scroll handler. + */ + hasScrollHandler: function () { + return !!this.scrollHandler; + }, + /** * Implement or assign implementation to these handlers during or after * calling the constructor. @@ -2881,7 +2888,7 @@ eventInfo.isStoppable = true; eventInfo.isCancelable = true; eventInfo.preventDefault = false; // handleWheelEvent() may set true - eventInfo.preventGesture = !tracker.hasScrollHandler; + eventInfo.preventGesture = !tracker.hasScrollHandler(); eventInfo.stopPropagation = false; break; case 'gotpointercapture': From 641e085259121012f915ea2629bfee4f806adeb4 Mon Sep 17 00:00:00 2001 From: "Jessica R." <60241371+Seafret@users.noreply.github.com> Date: Thu, 2 Jan 2025 23:07:13 -0700 Subject: [PATCH 3/3] Updated MouseTracker's hasGestureHandlers and hasScrollHandler to be getters --- src/mousetracker.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/mousetracker.js b/src/mousetracker.js index ffba58b6..986faa16 100644 --- a/src/mousetracker.js +++ b/src/mousetracker.js @@ -386,10 +386,9 @@ /** * Do we currently have any assigned gesture handlers. - * @function * @returns {Boolean} Do we currently have any assigned gesture handlers. */ - hasGestureHandlers: function () { + get hasGestureHandlers() { return !!(this.pressHandler || this.nonPrimaryPressHandler || this.releaseHandler || @@ -403,10 +402,9 @@ /** * Do we currently have a scroll handler. - * @function * @returns {Boolean} Do we currently have a scroll handler. */ - hasScrollHandler: function () { + get hasScrollHandler() { return !!this.scrollHandler; }, @@ -2855,7 +2853,7 @@ eventInfo.isStoppable = true; eventInfo.isCancelable = true; eventInfo.preventDefault = false; - eventInfo.preventGesture = !tracker.hasGestureHandlers(); + eventInfo.preventGesture = !tracker.hasGestureHandlers; eventInfo.stopPropagation = false; break; case 'pointerover': @@ -2873,22 +2871,22 @@ case 'pointerdown': eventInfo.isStoppable = true; eventInfo.isCancelable = true; - eventInfo.preventDefault = false; // updatePointerDown() may set true (tracker.hasGestureHandlers()) - eventInfo.preventGesture = !tracker.hasGestureHandlers(); + eventInfo.preventDefault = false; // updatePointerDown() may set true (tracker.hasGestureHandlers) + eventInfo.preventGesture = !tracker.hasGestureHandlers; eventInfo.stopPropagation = false; break; case 'pointerup': eventInfo.isStoppable = true; eventInfo.isCancelable = true; eventInfo.preventDefault = false; - eventInfo.preventGesture = !tracker.hasGestureHandlers(); + eventInfo.preventGesture = !tracker.hasGestureHandlers; eventInfo.stopPropagation = false; break; case 'wheel': eventInfo.isStoppable = true; eventInfo.isCancelable = true; eventInfo.preventDefault = false; // handleWheelEvent() may set true - eventInfo.preventGesture = !tracker.hasScrollHandler(); + eventInfo.preventGesture = !tracker.hasScrollHandler; eventInfo.stopPropagation = false; break; case 'gotpointercapture':