[pve-devel] applied: [PATCH widget-toolkit] (partially) fix #1223: add touchscreen override for extjs

Dominik Csapak d.csapak at proxmox.com
Fri Mar 30 10:24:20 CEST 2018


On 03/30/2018 10:22 AM, Thomas Lamprecht wrote:
> Am 03/30/2018 um 09:48 AM schrieb Dominik Csapak:
>> the combination of firefox, touchscreen, mouse input and extjs
>> prevents normal click/touch input for buttons, lists, etc.
>>
>> the workaround on firefox was to set
>> dom.w3c_touch_events.enabled
>> to 0 (in about:config)
>>
>> or to upgrade to extjs >= 6.5.1 (of which there is no gpl release as 
>> of now)
>>
> 
> I guess you took a quick look at what they changed to address this in
> 6.5.1 and it is just to much change to backport a similar "full" 
> solution to our available versions?
> 
> Anyway it looks OK, tested and applied.

AFAICS, the 'real' fix is during setting up the event handlers, which is 
a point we cannot override (since this happens during the setting up of 
extjs itself)

> 
>> so we introduce that workaround as it seems to not disrupt 'normal'
>> browsers and non-touchscreen devices
>>
>> we then still have an issue with scrolling though, since extjs
>> now expects the user to drag the content instead of using the wheel
>>
>> but it is still better than a completely non working interface
>>
>> Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
>> ---
>>   Toolkit.js | 43 +++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 43 insertions(+)
>>
>> diff --git a/Toolkit.js b/Toolkit.js
>> index 7e62e05..4f1b623 100644
>> --- a/Toolkit.js
>> +++ b/Toolkit.js
>> @@ -139,6 +139,49 @@ Ext.apply(Ext.form.field.VTypes, {
>>       passwordText: gettext('Passwords do not match')
>>   });
>> +// Firefox 52+ Touchscreen bug
>> +// see 
>> https://www.sencha.com/forum/showthread.php?336762-Examples-don-t-work-in-Firefox-52-touchscreen/page2 
>>
>> +// and https://bugzilla.proxmox.com/show_bug.cgi?id=1223
>> +Ext.define('EXTJS_23846.Element', {
>> +    override: 'Ext.dom.Element'
>> +}, function(Element) {
>> +    var supports = Ext.supports,
>> +        proto = Element.prototype,
>> +        eventMap = proto.eventMap,
>> +        additiveEvents = proto.additiveEvents;
>> +
>> +    if (Ext.os.is.Desktop && supports.TouchEvents && 
>> !supports.PointerEvents) {
>> +        eventMap.touchstart = 'mousedown';
>> +        eventMap.touchmove = 'mousemove';
>> +        eventMap.touchend = 'mouseup';
>> +        eventMap.touchcancel = 'mouseup';
>> +
>> +        additiveEvents.mousedown = 'mousedown';
>> +        additiveEvents.mousemove = 'mousemove';
>> +        additiveEvents.mouseup = 'mouseup';
>> +        additiveEvents.touchstart = 'touchstart';
>> +        additiveEvents.touchmove = 'touchmove';
>> +        additiveEvents.touchend = 'touchend';
>> +        additiveEvents.touchcancel = 'touchcancel';
>> +
>> +        additiveEvents.pointerdown = 'mousedown';
>> +        additiveEvents.pointermove = 'mousemove';
>> +        additiveEvents.pointerup = 'mouseup';
>> +        additiveEvents.pointercancel = 'mouseup';
>> +    }
>> +});
>> +
>> +Ext.define('EXTJS_23846.Gesture', {
>> +    override: 'Ext.event.publisher.Gesture'
>> +}, function(Gesture) {
>> +    var me = Gesture.instance;
>> +
>> +    if (Ext.supports.TouchEvents && !Ext.isWebKit && 
>> Ext.os.is.Desktop) {
>> +        me.handledDomEvents.push('mousedown', 'mousemove', 'mouseup');
>> +        me.registerEvents();
>> +    }
>> +});
>> +
>>   // we always want the number in x.y format and never in, e.g., x,y
>>   Ext.define('PVE.form.field.Number', {
>>       override: 'Ext.form.field.Number',
>>





More information about the pve-devel mailing list