From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 9D9D572A3B for ; Wed, 26 May 2021 10:59:19 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 845E4E67C for ; Wed, 26 May 2021 10:58:49 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id A2594E2F2 for ; Wed, 26 May 2021 10:58:41 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 737E14666A for ; Wed, 26 May 2021 10:58:41 +0200 (CEST) From: Dominik Csapak To: pve-devel@lists.proxmox.com Date: Wed, 26 May 2021 10:58:34 +0200 Message-Id: <20210526085839.9808-7-d.csapak@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210526085839.9808-1-d.csapak@proxmox.com> References: <20210526085839.9808-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.037 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH widget-toolkit 06/11] Toolkit: update overrides for scroll fixes X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 26 May 2021 08:59:19 -0000 while some scrolling issues where fixed since 6.0.1, some where introduced, namely: * for firefox, the correct event to listen to is 'wheel' not 'mousewheel' * the spinner scroll direction was incorrect * the boxOverflow scroll direction was incorrect * the boxOverflow scroll amount was too high functions were copied from extjs source, eslintified, and adapted Signed-off-by: Dominik Csapak --- src/Toolkit.js | 102 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 82 insertions(+), 20 deletions(-) diff --git a/src/Toolkit.js b/src/Toolkit.js index a39f64d..517f1a1 100644 --- a/src/Toolkit.js +++ b/src/Toolkit.js @@ -3,11 +3,6 @@ // do not send '_dc' parameter Ext.Ajax.disableCaching = false; -// FIXME: HACK! Makes scrolling in number spinner work again. fixed in ExtJS >= 6.1 -if (Ext.isFirefox) { - Ext.$eventNameMap.DOMMouseScroll = 'DOMMouseScroll'; -} - // custom Vtypes Ext.apply(Ext.form.field.VTypes, { IPAddress: function(v) { @@ -466,29 +461,96 @@ Ext.define('Proxmox.form.field.Text', { }, }); -// this should be fixed with ExtJS 6.0.2 -// make mousescrolling work in firefox in the containers overflowhandler +// make mousescrolling work in firefox in the containers overflowhandler, +// by using only the 'wheel' event not 'mousewheel'(fixed in 7.3) +// also reverse the scrolldirection (fixed in 7.3) +// and reduce the default increment Ext.define(null, { override: 'Ext.layout.container.boxOverflow.Scroller', - createWheelListener: function() { - let me = this; - if (Ext.isFirefox) { - me.wheelListener = me.layout.innerCt.on('wheel', me.onMouseWheelFirefox, me, { destroyable: true }); + wheelIncrement: 1, + + getWheelDelta: function(e) { + return -e.getWheelDelta(e); + }, + + onOwnerRender: function(owner) { + var me = this, + scrollable = { + isBoxOverflowScroller: true, + x: false, + y: false, + listeners: { + scrollend: this.onScrollEnd, + scope: this, + }, + }; + + // If no obstrusive scrollbars, allow natural scrolling on mobile touch devices + if (!Ext.scrollbar.width() && !Ext.platformTags.desktop) { + scrollable[owner.layout.horizontal ? 'x' : 'y'] = true; } else { - me.wheelListener = me.layout.innerCt.on('mousewheel', me.onMouseWheel, me, { destroyable: true }); + me.wheelListener = me.layout.innerCt.on( + 'wheel', me.onMouseWheel, me, { destroyable: true }, + ); } - }, - // special wheel handler for firefox. differs from the default onMouseWheel - // handler by using deltaY instead of wheelDeltaY and no normalizing, - // because it is already - onMouseWheelFirefox: function(e) { - e.stopEvent(); - let delta = e.browserEvent.deltaY || 0; - this.scrollBy(delta * this.wheelIncrement, false); + owner.setScrollable(scrollable); }, +}); + +// extj 6.7 reversed mousewheel direction... (fixed in 7.3) +// https://forum.sencha.com/forum/showthread.php?472517-Mousewheel-scroll-direction-in-numberfield-with-spinners +// alse use the 'wheel' event instead of 'mousewheel' (fixed in 7.3) +Ext.define('Proxmox.form.field.Spinner', { + override: 'Ext.form.field.Spinner', + + onRender: function() { + var me = this, + spinnerTrigger = me.getTrigger('spinner'); + me.callParent(); + + // Init up/down arrow keys + if (me.keyNavEnabled) { + me.spinnerKeyNav = new Ext.util.KeyNav({ + target: me.inputEl, + scope: me, + up: me.spinUp, + down: me.spinDown, + }); + + me.inputEl.on({ + keyup: me.onInputElKeyUp, + scope: me, + }); + } + + // Init mouse wheel + if (me.mouseWheelEnabled) { + me.mon(me.bodyEl, 'wheel', me.onMouseWheel, me); + } + + // in v4 spinUpEl/spinDownEl were childEls, now they are children of the trigger. + // create references for compatibility + me.spinUpEl = spinnerTrigger.upEl; + me.spinDownEl = spinnerTrigger.downEl; + }, + + onMouseWheel: function(e) { + var me = this, + delta; + if (me.hasFocus) { + delta = e.getWheelDelta(); + if (delta > 0) { + me.spinDown(); + } else if (delta < 0) { + me.spinUp(); + } + e.stopEvent(); + me.onSpinEnd(); + } + }, }); // add '@' to the valid id -- 2.20.1