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 B2F268A2F5 for ; Mon, 25 Jul 2022 15:42:24 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A16A62B914 for ; Mon, 25 Jul 2022 15:41:54 +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 for ; Mon, 25 Jul 2022 15:41:53 +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 347CA42B72 for ; Mon, 25 Jul 2022 15:41:53 +0200 (CEST) From: Daniel Tschlatscher To: pve-devel@lists.proxmox.com Date: Mon, 25 Jul 2022 15:40:07 +0200 Message-Id: <20220725134007.383449-1-d.tschlatscher@proxmox.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.097 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% 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 v2] fix: gui: up/down arrow keys increment/decrement twice in Number field 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: Mon, 25 Jul 2022 13:42:24 -0000 When the up or down arrow key on the keyboard was pressed while a number text field (or any one descending from Ext.form.field.Spinner) was selected, the up and down callbacks for that text fields KeyNav were called twice. Therefore, the value in the text field would always incorrectly increment/decrement by step * 2. The problem was an overwrite for the onRender() method of the Spinner class, which caused the callbacks for pressing an arrow key to be registered for a second time. Simply not doing that in the overwritten onRender() method fixes the problem. The redundant declarations for spinUpEl and spinDownEl were removed as well. Additionally, the 'mousewheel' event handler, registered in the overwritten (but still executed) parent function, is unregistered now, as it could lead to unintended side effects in browsers which still implement this event. Signed-off-by: Daniel Tschlatscher --- Changes from v1: * Changed var to let * Additionally unregister the 'mousewheel' event handler defined in the original ExtJS class * Removed redundant compatiblity code (spinUpEl/spinDownEl) src/Toolkit.js | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/src/Toolkit.js b/src/Toolkit.js index a1d291e..ad64f89 100644 --- a/src/Toolkit.js +++ b/src/Toolkit.js @@ -464,35 +464,17 @@ Ext.define('Proxmox.form.field.Spinner', { override: 'Ext.form.field.Spinner', onRender: function() { - var me = this, - spinnerTrigger = me.getTrigger('spinner'); + let me = this; 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) { + // Unlisten Ext generated listener ('mousewheel' is deprecated anyway) + me.mun(me.bodyEl, 'mousewheel', me.onMouseWheel, me); + 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) { -- 2.30.2