From 1e2408091d2bfcedcbdc47c83808a8be45f55bd9 Mon Sep 17 00:00:00 2001 From: Josh Whaley Date: Mon, 17 Mar 2025 22:23:00 -0400 Subject: [PATCH] fix: enable touchpad scrolling only when the setting is active --- web/js/comfyui_touchpad_scroll_controller.js | 113 ++++++++++--------- 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/web/js/comfyui_touchpad_scroll_controller.js b/web/js/comfyui_touchpad_scroll_controller.js index 6d7439c..c2be348 100644 --- a/web/js/comfyui_touchpad_scroll_controller.js +++ b/web/js/comfyui_touchpad_scroll_controller.js @@ -85,46 +85,46 @@ function updateScrollListener({ app.extensionManager.setting.get( 'comfyui_touchpad_scroll_controller.enableTouchpadScroll' ); - if (!isTouchpadScrollEnabled) { - return; + + // Set up the processMouseWheel override only if enabled + if (isTouchpadScrollEnabled) { + /** + * Smooth scrolling for touchpad + */ + // @ts-ignore + window.LGraphCanvas.prototype.processMouseWheel = function ( + /** @type {WheelEvent}*/ event + ) { + if (!this.graph || !this.allow_dragcanvas) return; + + const { clientX: x, clientY: y } = event; + if (this.viewport) { + const [viewportX, viewportY, width, height] = this.viewport; + const isInsideX = x >= viewportX && x < viewportX + width; + const isInsideY = y >= viewportY && y < viewportY + height; + if (!(isInsideX && isInsideY)) return; + } + + let scale = this.ds.scale; + let { deltaX, deltaY } = event; + + if (event.metaKey || event.ctrlKey) { + let SCALE = event.ctrlKey ? 150 : 100; + if (event.metaKey) SCALE *= -1 / 0.5; + this.ds.changeScale(scale - deltaY / SCALE, [ + event.clientX, + event.clientY, + ]); + } else { + this.ds.mouseDrag(-deltaX, -deltaY); + } + this.graph.change(); + + event.preventDefault(); + return false; // prevent default + }; } - /** - * Smooth scrolling for touchpad - */ - // @ts-ignore - window.LGraphCanvas.prototype.processMouseWheel = function ( - /** @type {WheelEvent}*/ event - ) { - if (!this.graph || !this.allow_dragcanvas) return; - - const { clientX: x, clientY: y } = event; - if (this.viewport) { - const [viewportX, viewportY, width, height] = this.viewport; - const isInsideX = x >= viewportX && x < viewportX + width; - const isInsideY = y >= viewportY && y < viewportY + height; - if (!(isInsideX && isInsideY)) return; - } - - let scale = this.ds.scale; - let { deltaX, deltaY } = event; - - if (event.metaKey || event.ctrlKey) { - let SCALE = event.ctrlKey ? 150 : 100; - if (event.metaKey) SCALE *= -1 / 0.5; - this.ds.changeScale(scale - deltaY / SCALE, [ - event.clientX, - event.clientY, - ]); - } else { - this.ds.mouseDrag(-deltaX, -deltaY); - } - this.graph.change(); - - event.preventDefault(); - return false; // prevent default - }; - const selectors = targetSelectors || getTargetSelectors(); const isTextareaScrollIgnored = ignoreTextareaScroll ?? @@ -132,25 +132,26 @@ function updateScrollListener({ 'comfyui_touchpad_scroll_controller.enableTextareas' ); - if (!isTouchpadScrollEnabled) { - selectors.forEach((selector) => { - const elements = document.querySelectorAll(selector); + // Update event listeners for all targeted elements + selectors.forEach((selector) => { + const elements = document.querySelectorAll(selector); - elements.forEach((element) => { - if (app.canvas) { - if (isTextareaScrollIgnored) { - element.addEventListener( - 'mousewheel', - app.canvas['_ignore_textarea_scroll_callback'] - ); - } else { - element.removeEventListener( - 'mousewheel', - app.canvas['_ignore_textarea_scroll_callback'] - ); - } + elements.forEach((element) => { + if (app.canvas) { + // Always remove existing listener first to avoid duplicates + element.removeEventListener( + 'mousewheel', + app.canvas['_ignore_textarea_scroll_callback'] + ); + + // Only add listener if both settings are enabled + if (isTouchpadScrollEnabled && isTextareaScrollIgnored) { + element.addEventListener( + 'mousewheel', + app.canvas['_ignore_textarea_scroll_callback'] + ); } - }); + } }); - } + }); }