public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Dominik Csapak <d.csapak@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH widget-toolkit 06/11] Toolkit: update overrides for scroll fixes
Date: Wed, 26 May 2021 10:58:34 +0200	[thread overview]
Message-ID: <20210526085839.9808-7-d.csapak@proxmox.com> (raw)
In-Reply-To: <20210526085839.9808-1-d.csapak@proxmox.com>

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 <d.csapak@proxmox.com>
---
 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





  parent reply	other threads:[~2021-05-26  8:59 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-26  8:58 [pve-devel] [PATCH widget-toolkit 00/11] fixes/preparation for extjs7.0 Dominik Csapak
2021-05-26  8:58 ` [pve-devel] [PATCH widget-toolkit 01/11] data/ProxmoxProxy: set responseType to undefined for XMLHTTPRequest Dominik Csapak
2021-05-26  8:58 ` [pve-devel] [PATCH widget-toolkit 02/11] Toolkit: set download url for draw containers to '-' Dominik Csapak
2021-05-26  8:58 ` [pve-devel] [PATCH widget-toolkit 03/11] Toolkit: set clearPropertiesOnDestroy to false by default Dominik Csapak
2021-05-26  8:58 ` [pve-devel] [PATCH widget-toolkit 04/11] css: add css changes for treelist Dominik Csapak
2021-05-26  8:58 ` [pve-devel] [PATCH widget-toolkit 05/11] panel/RRDChart: fix legend/undoZoom Dominik Csapak
2021-05-26  8:58 ` Dominik Csapak [this message]
2021-05-26  8:58 ` [pve-devel] [PATCH widget-toolkit 07/11] Toolkit: update focusJump override Dominik Csapak
2021-05-26  8:58 ` [pve-devel] [PATCH widget-toolkit 08/11] Toolkit: remove firefox touchscreen override Dominik Csapak
2021-05-26  8:58 ` [pve-devel] [PATCH widget-toolkit 09/11] Toolkit: remove pie chart fix Dominik Csapak
2021-05-26  8:58 ` [pve-devel] [PATCH widget-toolkit 10/11] Toolkit: remove textarea fix Dominik Csapak
2021-05-26  8:58 ` [pve-devel] [PATCH widget-toolkit 11/11] Toolkit: remove Datepicker fix Dominik Csapak
2021-05-28  8:43 ` [pve-devel] applied: [PATCH widget-toolkit 00/11] fixes/preparation for extjs7.0 Thomas Lamprecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210526085839.9808-7-d.csapak@proxmox.com \
    --to=d.csapak@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal