www.cendio.com

Bug 5779

Summary: Local cursor doesn't work in IE/Edge or on touch devices
Product: ThinLinc Reporter: Samuel Mannehed <samuel@cendio.se>
Component: Web AccessAssignee: Niko Lehto <nikle@cendio.se>
Status: CLOSED FIXED QA Contact: Bugzilla mail exporter <bugzilla-qa@cendio.se>
Severity: Normal    
Priority: P2 CC: astrand@cendio.se, nikle@cendio.se
Version: pre-1.0Keywords: ossman_tester, relnotes, upstream
Target Milestone: 4.11.0   
Hardware: PC   
OS: Unknown   
Acceptance Criteria:
Bug Depends on: 7365    
Bug Blocks: 6349    

Description From cendio 2016-01-25 17:29:24
Normally we use a data uri to give the canvas a custom cursor. However, this
isn't supported in any version of Internet Explorer or Microsoft Edge. This
results in a forced server side cursor (see bug 5148).

We should investigate other ways of providing a local cursor in the HTML5
client for IE and Edge.
------- Comment #1 From cendio 2016-01-25 17:32:54 -------
http://caniuse.com/#feat=datauri
------- Comment #2 From cendio 2016-01-25 18:05:51 -------
We currently use the style cursor property, which supports a URI value in all
browsers except for Edge, according to this:

http://caniuse.com/#search=cursor

The problem is that the cursor sent from the server is stored in a Data URI,
which isn't supported. Could we perhaps try to, from the server, present the
url of the cursor?
------- Comment #3 From cendio 2016-01-25 18:09:44 -------
Upstream bug: https://github.com/kanaka/noVNC/issues/572
------- Comment #4 From cendio 2016-01-26 10:02:27 -------
From upstream:
> Here is another couple of relevant links:
>
> https://msdn.microsoft.com/en-us/library/aa358795(v=vs.85).asp 
> http://stackoverflow.com/questions/2636068/hide-cursor-in-chrome-and-ie
>
> Unfortunately, it doesn't seem that IE/Edge are going to support either data
> URIs or the "none" option to hide the cursor. One option we could explore is
> the PointerLock API which would allow us to hide the cursor and then render our
> own directly in the canvas. However the downside is that the captures the
> pointer inside the canvas and it requires user permission.
>
> Probably the best option that would work everywhere (all browsers and older
> versions too) would be to change the cursor to a blank cursor file and then
> directly render the mouse in the canvas. It's not as nice as just having the
> browser to the work of rendering the cursor for us, but it's the best option I
> can think of for supporting this widely if we think it's important.
------- Comment #5 From cendio 2019-04-17 12:24:47 -------
This also applies to touch devices.
------- Comment #7 From cendio 2019-04-17 12:26:25 -------
Now fixed upstream in noVNC.
------- Comment #9 From cendio 2019-10-10 13:03:53 -------
Tested on:
* Windows 10
  - IE, Edge, Firefox and Chrome
* macOS
  - Safari, Firefox and Chrome

Does work fine on everything but windows with touch. For this it works fine on
Chrome but not on Firefox, IE 11 or Edge 18. 

The local cursor on IE and Edge works fine using mouse/track-pad but not with
touch. The cursor is only visible during a touch event and disappears as soon
as  the finger is lifted.

On Firefox the local cursor disappears as soon as touch is used. This could be
bug 7395.

I also tested on TL 4.10.1 and the local cursor is not used on IE or Edge but
the cursor is always visible.

Might be related to upstream issue:
https://github.com/novnc/noVNC/issues/1300
Even though the problem upstream is only on Edge and Chrome.
------- Comment #10 From cendio 2019-10-10 15:20:04 -------
(In reply to comment #9)
> 
> On Firefox the local cursor disappears as soon as touch is used. This could be
> bug 7395.
> 

Further testing in Firefox version 66 on Lamina (Windows 10) and  touch with 
local cursor works.
------- Comment #11 From cendio 2019-10-11 10:54:47 -------
Apparently this change breaks Firefox in touch emulation mode. Simply log in
and click anywhere which touch emulation active and you get:

> TypeError: event.changedTouches[0] is undefined[Learn More] cursor.js:163:9
>     _handleTouchMove https://10.47.254.219:300/core/util/cursor.js:163
>     _handleTouchStart https://10.47.254.219:300/core/util/cursor.js:157
>     _handleTouchStart self-hosted:975
>     sendTouchEvent resource://devtools/server/actors/emulation/touch-simulator.js:274
>     handleEvent resource://devtools/server/actors/emulation/touch-simulator.js:211
------- Comment #12 From cendio 2019-10-14 10:59:36 -------
Definitely a bug in Firefox. I've added a report here:

https://bugzilla.mozilla.org/show_bug.cgi?id=1588438

I don't think it's worth trying to work around this right now. We'll just have
to live without that tool for now.
------- Comment #13 From cendio 2019-10-21 14:15:16 -------
(In reply to comment #9)
> Does work fine on everything but windows with touch. For this, it works fine on
> Chrome but not on Firefox, IE 11 or Edge 18.

Actually we have problems in Chrome as well when using a touch device. After a
mouse click, the cursor disappears until the mouse is moved.

> The local cursor on IE and Edge works fine using mouse/track-pad but not with
> touch. The cursor is only visible during a touch event and disappears as soon
> as the finger is lifted.

Due to the many layers of this problem, we missed that the
disappearing-after-touch issue did not happen on Edge, only on IE with touch.

So to summarize, we have seen two problems after the new noVNC vendordrop:

 * When using touch devices and Windows 10 the cursor disappears in IE after
lifting the finger.

 * The cursor also disappears after a click in Edge always and in Chrome when
using touch.
------- Comment #15 From cendio 2019-10-21 14:34:07 -------
The new noVNC vendordrop fixes the two problems with disappearing cursors. We
have verified this on the following platforms:

Windows 10 with touch screen (*):
---------------------------------

 ✓ IE 11 (**)
 ✓ Edge 18
 ✓ Firefox 66 (***)
 ✓ Chrome 77

Windows 10 without touch:
-------------------------

 ✓ IE 11 (**)
 ✓ Edge 18
 ✓ Firefox 69
 ✓ Chrome 77

iOS 13:
-------

 ✓ Safari 13

Android 9:
----------

 ✓ Firefox 69
 ✓ Chrome 77

Fedora 30 without touch:
------------------------

 ✓ Firefox 69
 ✓ Chrome 77

macOS 10.14 with touch:
-----------------------

 ✓ Safari 14
 ✓ Firefox 69
 ✓ Chrome 77

macOS 10.14 without touch:
--------------------------

 ✓ Safari 14
 ✓ Firefox 69
 ✓ Chrome 77


(*)   Note bug 7402
(**)  Note bug 7403 and bug 7404
(***) Note bug 7395
------- Comment #17 From cendio 2019-10-22 10:17:58 -------
(In reply to comment #15)
Re-tested on Nightly build, following same test sheet as earlier. Works fine!
------- Comment #19 From cendio 2019-10-24 10:10:37 -------
Seems to work well. I tested capture handling in the session and the control
bar handle, as well as the appearance of the mouse cursor in:

 * Firefox on Fedora and Android
 * Chrome on Fedora
 * Internet Explorer on Windows 2008 R2

Release notes look good.