All the cursor tests seem to pass and look fine (custom cursor, all cursors) but the cursor used by xterm when you hit one of the modifier keys (at least for shift, control and alt) which is a completely empty one of size 6x13 (the size of one character on the default xterm) 312 bytes of rgb data, shows up late (only shows when you move the mouse, at which point the xterm resets it) and it looks different from what it should be..
I managed to capture a screenshot of it by delaying the sending of cursors in
ServerSource.send_cursor by 5 seconds, then hitting one of the special modifier keys, waiting 5 seconds, seeing the cursor log message on the client then moving the mouse and asking gimp to take a screen capture! Here it is:
I think this ticket is important because I have also seen crashes in the cursor code on win32 with the GTK3 port (#640).
screenshot of the funny cursor displayed on win32
Adding this code to
if len(cpixels)==312: import binascii cursorlog.info("cursor data=%s", binascii.hexlify(cpixels))
I can verify that the cursor data being sent consists of 312 bytes null bytes. Both for Linux clients and win32...
So r8089 adds this same empty cursor to the custom cursor test code to make it easier to test, and we can see that the cursor is only applied when the mouse is moved (a GTK or win32 bug - not sure which, not sure there's much we can do about that).
Eventually found that we must provide fixed sized cursor pixel data on win32. GTK should really shield us from this sort of (annoying) details rather than giving us broken cursors!
So r8090 scales it to the exact size the OS wants - which is slightly problematic for cursors that are not square, like the one from the xterm: we scale 13x6 to 32x32 (and maybe 64x64 or other on high dpi displays apparently). Maybe we should paste the cursor onto an empty 32x32 transparent frame instead? (but only if the frame is bigger than the cursor!..) This will have to do for now. It may well fix the crash with GTK3 too.
More complicated backport than usual because the metrics stuff is not present in the 0.14 branch: done in r8092.
Note: unfortunately this does not fix the cursor crashes on win32 with gtk3 (see ticket:640#comment:12)
Backport in r8112.
this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/734