all lists on 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal