Bug 562799 - [GTK] Display cursor location not working in 4.16
Summary: [GTK] Display cursor location not working in 4.16
Status: NEW
Alias: None
Product: Platform
Classification: Eclipse Project
Component: SWT (show other bugs)
Version: 4.16   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Platform-SWT-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: regression
Depends on:
Blocks:
 
Reported: 2020-05-04 19:06 EDT by Patrick Tasse CLA
Modified: 2020-06-08 16:18 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Patrick Tasse CLA 2020-05-04 19:06:32 EDT
Unit tests are failing only when running on 4.16 platform in tests that require the cursor to be at a specific location.

https://ci.eclipse.org/tracecompass/job/tracecompass-gerrit-short-ui-only/552/consoleFull

I cannot reproduce locally.

It is not yet determined if it is the setting or the getting that fails.

Debug printouts:

4.15:

display.getCursorLocation()=Point {639, 578}
display.post(Event {type=5 TimeGraphControl {} time=-509598582 data=null x=505 y=594 width=0 height=0 detail=0})
display.getCursorLocation()=Point {505, 594}

4.16:

display.getCursorLocation()=Point {0, 0}
display.post(Event {type=5 TimeGraphControl {} time=-511086129 data=null x=505 y=594 width=0 height=0 detail=0})
display.getCursorLocation()=Point {0, 0}

display.getCursorLocation()=Point {0, 0}
display.setCursorLocation(505, 594)
display.getCursorLocation()=Point {0, 0}
Comment 1 Patrick Tasse CLA 2020-05-05 14:11:44 EDT
With the following code added to any test class, it fails when running on Eclipse's CI infrastructure. Our unit tests run on the Docker image found here:

https://git.eclipse.org/r/plugins/gitiles/tracecompass/tracecompass-infra/+/master/docker/

Display display = Display.getDefault();
display.syncExec(() -> System.out.println("1: display.getCursorLocation()="+display.getCursorLocation()));
display.syncExec(() -> {System.out.println("2: display.setCursorLocation(10, 10)");display.setCursorLocation(10, 10);});
display.syncExec(() -> System.out.println("3: display.getCursorLocation()="+display.getCursorLocation()));
Comment 2 Andrey Loskutov CLA 2020-05-14 17:31:59 EDT
Related to bug 562463? But this was regression in 4.11.

Is this GTK only, or is this cross-platform issue?
Comment 3 Patrick Tasse CLA 2020-05-22 14:14:34 EDT
I think it's GTK only. I cannot reproduce on local Windows 10 or Ubuntu 18.04 machine.
Comment 4 Patrick Tasse CLA 2020-06-04 14:59:05 EDT
Good news! We were able to bisect and find that the regression occurred between these versions of the platform. The only thing changed between those runs of our test is the platform I-build in the target:

https://download.eclipse.org/eclipse/updates/4.16-I-builds/I20200309-0810/
https://ci.eclipse.org/tracecompass/job/tracecompass-gerrit-short-ui-only/681/ : SUCCESS

https://download.eclipse.org/eclipse/updates/4.16-I-builds/I20200316-1800/
https://ci.eclipse.org/tracecompass/job/tracecompass-gerrit-short-ui-only/680/ : FAILURE

This maps to SWT versions:
I20200309-1800
I20200314-1800

These are the only patches merged in between:

42cced9261 Bug 484682 - don't call forceResize on getClientAreaInPixels()
ba57e916bd Bug 561047 - Require Gtk 3.20+ as minimum
593b5cd2a6 Bug 561047 - Require Gtk 3.20+ as minimum
c5cd5196ce Bug 561047 - Require Gtk 3.20+ as minimum
0bd6474e4b Bug 561047 - Require Gtk 3.20+ as minimum
ad9c67cd2b Bug 560203 - [GTK] Automatically cache JVM pointer for callbacks
12eef0b919 Bug 548430 - [Cocoa] NullPointerException in Image.internal_new_GC (4.12.0RC2)
15a2d87038 Bug 558015 - Radio button selection ignored in 4.12 version
6a930949a5 Replace tab by space character in doc

Can this be fixed or reverted in time for 2020-06 RC2? Thanks!
Comment 5 Patrick Tasse CLA 2020-06-04 15:04:47 EDT
Hmm. Our Docker image has this configuration:
 OS version=3.10.0-1062.12.1.el7.x86_64
 GTK version=3.18.9
 GTK theme=Ambiance

That might have something to do with 'Require Gtk 3.20+ as minimum'. What does SWT do in that case?
Comment 6 Patrick Tasse CLA 2020-06-04 16:33:38 EDT
Yup, we missed this warning in our logs:

***WARNING: GTK+ version too old (micro mismatch)
***WARNING: SWT requires GTK 3.20.0
***WARNING: Detected: 3.18.9

Looking at those patches, it appears SWT just removed all workarounds for GTK+ < 3.20.0. So use at your own risk, things are no longer guaranteed to work.

I think you will need to answer every GTK bug with "What's your GTK version? Also  have you tried turning it off and on again?"... ;)
Comment 7 Patrick Tasse CLA 2020-06-08 16:18:09 EDT
The issue is fixed after upgrading the CI infrastructure to use Ubuntu 18.04 (GTK 3.22.30).

I'll let SWT make the call that this won't be fixed for older GTK versions.