Compare commits

..

35 Commits

Author SHA1 Message Date
Konstantin Bulenkov
d514f7a982 JetBrains Mono 1.0 2020-01-10 14:30:12 +01:00
Vitaly Provodin
1e9497ddc3 updated JTreg exclude list 2020-01-09 14:22:23 +07:00
Konstantin Bulenkov
dcea5e874d Fix download badges 2020-01-07 11:16:46 +01:00
Anton Tarasov
7354925566 JBR-2051 heavyweight components wrong bounds on per-monitor dpi 2019-12-27 15:33:55 +03:00
Alexey Ushakov
3368768244 JBR-1110 [JDK11] java/awt/font/Outline/OutlineInvarianceTest.java: Failed for font java.awt.Font[family=Dialog,name=MS Gothic,style=bold,size=30]
Replaced FT_LOAD_NO_HINTING mode for non AA rendering with FT_LOAD_TARGET_LIGHT
2019-12-26 22:13:59 +03:00
Vitaly Provodin
bd56abc4c3 updated JTreg exclude list 2019-12-26 10:25:34 +07:00
Vitaly Provodin
7be5045cbb updated JTreg exclude list 2019-12-25 17:56:11 +07:00
Artem Bochkarev
5e0a9f5993 JBR-1089: allow to create FileDialog without parent
was broken in 8fd21b3746
fixed test FileDialogModalFocusTest.java
2019-12-22 13:12:05 +03:00
Denis Fokin
915d369d98 JBR-1928 NullPointerException from Swing on IDE startup 2019-12-20 14:09:14 +03:00
Denis Fokin
7d65accaf6 JBR-2037 EA-219827 - NPE: DialogWrapperPeerImpl$MyDialog.addNotify 2019-12-20 12:18:53 +03:00
Artem Bochkarev
78363232b3 JBR-1680: allow to disable 'override-redirect' logic of XWindowPeer
with fixed fail of: javax/swing/JOptionPane/8081019/bug8081019.java

(cherry picked from commit 9094054cdc)
2019-12-20 11:55:45 +03:00
Vitaly.Provodin
8fb2341ea8 add dockerfile for x86 2019-12-19 06:30:59 +03:00
Vitaly.Provodin
3a79870da8 add 32-sizes for native data types 2019-12-19 06:29:08 +03:00
Artem Bochkarev
2adf5275f1 JBR-2005: don't set appearance of file chooser if OSX version < 10.14 2019-12-18 23:45:34 +03:00
Anton Tarasov
bfa2d814f8 Merge remote-tracking branch 'origin/master' 2019-12-18 15:33:05 +03:00
Anton Tarasov
4f44b37f08 JBR-2031 [mac] jcef deadlocks with a11y on start 2019-12-18 15:32:49 +03:00
Alexey Ushakov
36e8544049 JBR-2023 PhpStorm/Webstorm 2019.3 crashes on start on MacOS 10.14.6 on libfreetype.6.dylib
Corrected compile time check to disable fontconfig on Mac
2019-12-17 18:44:14 +03:00
Alexey Ushakov
bc0d725f0e JDK CMake project update 2019-12-17 16:54:33 +03:00
Vitaly.Provodin
4858f29ec5 updated JTreg exclude list 2019-12-17 15:11:29 +03:00
Vitaly Provodin
31d8ae741b Revert "JBR-1680: allow to disable 'override-redirect' logic of XWindowPeer"
This reverts commit 9094054c
2019-12-14 06:23:06 +07:00
Denis Konoplev
7ce0f79561 IDEA-229135: Fling animation stop on tap 2019-12-13 17:24:57 +03:00
Denis Fokin
18d2a918c0 JBR-2021 Focus is nowhere after a modal progress and a popup 2019-12-13 16:43:23 +03:00
Anton Tarasov
7ae706b629 JBR-2019 provide getWindowHandle method for jcef 2019-12-13 15:14:17 +03:00
Anton Tarasov
cf997f71c6 JBR-2016 [followup] add jcef module and export packages to it 2019-12-13 15:13:12 +03:00
Anton Tarasov
308f7ecb12 JBR-2016 add jcef module and export some sun.* packages to it 2019-12-13 10:30:54 +03:00
Vitaly Provodin
418d5fd97e JBR-2014 Add jdk.hotspot.agent module to jbr 2019-12-13 10:17:18 +07:00
Alexey Ushakov
788e078f64 JBR-2000 RM 2019.3.1 font rendering regression, normal text is heavier
Added -Djava2d.font.loadFontConfig=bundled to force loading bundled font.conf
2019-12-12 16:35:08 +03:00
Artem Bochkarev
9094054cdc JBR-1680: allow to disable 'override-redirect' logic of XWindowPeer 2019-12-11 17:04:55 +03:00
Artem Bochkarev
09eabbd567 JBR-1794: backport 8234522: [macos] Crash with use of native file dialog
cherry-picked from hg changeset (Node ID e07a60855a7631b5eac32da1f1e71d72986a2c06, Parent  221a47a6f6d335560d9dd532a1ac593e316b5954)
2019-12-11 13:59:31 +03:00
Anton Tarasov
a00074a86c Comment assertion (originally JRE-965)
The assert line crashes debug hotspot.
2019-12-11 11:45:40 +03:00
Vitaly Provodin
7852ae4321 updated JTreg exclude list 2019-12-11 10:47:04 +07:00
Vitaly Provodin
7546a15bf6 updated JTreg exclude list 2019-12-11 09:12:10 +07:00
Vitaly Provodin
c00e904304 JBR-1996 exclude JCEF binaries from notarization 2019-12-07 06:04:07 +07:00
Denis Fokin
c8ad353f45 JBR-1991 Focus problems in Windows with X-Mouse style focus 2019-12-06 12:37:53 +03:00
Vitaly Provodin
57162c91c3 updated JTreg exclude list 2019-12-06 10:04:05 +07:00
50 changed files with 897 additions and 1235 deletions

View File

@@ -4,7 +4,7 @@
|Windows-x64 |macOS |Linux-x64 |
|-------------|-------------|-------------|
|<a href="https://bintray.com/jetbrains/intellij-jdk/openjdk9-windows-x64/_latestVersion"> <img src="https://api.bintray.com/packages/jetbrains/intellij-jdk/openjdk9-windows-x64/images/download.svg"/></a>|<a href="https://bintray.com/jetbrains/intellij-jdk/openjdk9-osx-x64/_latestVersion"> <img src="https://api.bintray.com/packages/jetbrains/intellij-jdk/openjdk9-osx-x64/images/download.svg"/></a>|<a href="https://bintray.com/jetbrains/intellij-jdk/openjdk9-linux-x64/_latestVersion"><img src="https://api.bintray.com/packages/jetbrains/intellij-jdk/openjdk9-linux-x64/images/download.svg"/></a>|
|[ ![Download](https://api.bintray.com/packages/jetbrains/intellij-jdk/openjdk11-windows-x64/images/download.svg) ](https://bintray.com/jetbrains/intellij-jdk/openjdk11-windows-x64/_latestVersion)|[ ![Download](https://api.bintray.com/packages/jetbrains/intellij-jdk/openjdk11-osx-x64/images/download.svg) ](https://bintray.com/jetbrains/intellij-jdk/openjdk11-osx-x64/_latestVersion)|[ ![Download](https://api.bintray.com/packages/jetbrains/intellij-jdk/openjdk11-linux-x64/images/download.svg) ](https://bintray.com/jetbrains/intellij-jdk/openjdk11-linux-x64/_latestVersion)|
# How JetBrains Runtime is organised

View File

@@ -0,0 +1,7 @@
FROM i386/ubuntu:xenial
RUN linux32 apt-get update && apt-get install -y --no-install-recommends apt-utils
COPY jbrsdk-11.0.5-b1 /jbrsdk-11.0.5-b1
RUN linux32 apt-get -y install file build-essential zip unzip curl libx11-dev libxext-dev \
libxrender-dev libxrandr-dev libxtst-dev libxt-dev libcups2-dev libasound2-data \
libpng12-0 libasound2 libfreetype6 libfontconfig1-dev libasound2-dev autoconf

View File

@@ -192,16 +192,19 @@ set(SOURCE_FILES
../../../src/java.desktop/share/native/libfreetype/include/freetype/fttypes.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/ftparams.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/ftmm.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/config
../../../src/java.desktop/share/native/libfreetype/include/freetype/config/ftstdlib.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/config/ftheader.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/config/ftconfig.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/config/ftoption.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/config/ftmodule.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/ftcolor.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/ftmodapi.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/fttrigon.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/ftbbox.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/ftgzip.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/ftdriver.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/sfnt.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/internal.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/ftdrv.h
@@ -216,13 +219,13 @@ set(SOURCE_FILES
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/tttypes.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/ftvalid.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/ftobjs.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/ftpic.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/fttrace.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/ftmemory.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/fthash.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/ftgloadr.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/ftpsprop.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/ftserv.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/services
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/services/svprop.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/services/svmm.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/internal/services/svcfftl.h
@@ -272,6 +275,8 @@ set(SOURCE_FILES
../../../src/java.desktop/share/native/libfreetype/include/freetype/ftbdf.h
../../../src/java.desktop/share/native/libfreetype/include/freetype/ftrender.h
../../../src/java.desktop/share/native/libfreetype/include/ft2build.h
../../../src/java.desktop/share/native/libfreetype/src
../../../src/java.desktop/share/native/libfreetype/src/type1
../../../src/java.desktop/share/native/libfreetype/src/type1/t1objs.c
../../../src/java.desktop/share/native/libfreetype/src/type1/t1load.h
../../../src/java.desktop/share/native/libfreetype/src/type1/t1afm.h
@@ -286,40 +291,42 @@ set(SOURCE_FILES
../../../src/java.desktop/share/native/libfreetype/src/type1/t1driver.c
../../../src/java.desktop/share/native/libfreetype/src/type1/t1parse.c
../../../src/java.desktop/share/native/libfreetype/src/type1/t1gload.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt
../../../src/java.desktop/share/native/libfreetype/src/sfnt/sfobjs.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttcmap.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttpost.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/sfntpic.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttkern.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttcolr.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/pngshim.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttmtx.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttload.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/sfdriver.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttsbit.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttcmapc.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttcpal.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttkern.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttpost.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/sfntpic.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/sfobjs.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttcmap.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttmtx.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/pngshim.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttcolr.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttsbit.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/sfdriver.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttload.c
../../../src/java.desktop/share/native/libfreetype/src/sfnt/sferrors.h
../../../src/java.desktop/share/native/libfreetype/src/sfnt/ttcpal.h
../../../src/java.desktop/share/native/libfreetype/src/smooth
../../../src/java.desktop/share/native/libfreetype/src/smooth/ftgrays.c
../../../src/java.desktop/share/native/libfreetype/src/smooth/ftsmooth.h
../../../src/java.desktop/share/native/libfreetype/src/smooth/ftspic.h
../../../src/java.desktop/share/native/libfreetype/src/smooth/ftsmerrs.h
../../../src/java.desktop/share/native/libfreetype/src/smooth/ftgrays.h
../../../src/java.desktop/share/native/libfreetype/src/smooth/ftspic.c
../../../src/java.desktop/share/native/libfreetype/src/smooth/ftsmooth.c
../../../src/java.desktop/share/native/libfreetype/src/cff
../../../src/java.desktop/share/native/libfreetype/src/cff/cffload.h
../../../src/java.desktop/share/native/libfreetype/src/cff/cffgload.c
../../../src/java.desktop/share/native/libfreetype/src/cff/cffobjs.c
../../../src/java.desktop/share/native/libfreetype/src/cff/cffparse.h
../../../src/java.desktop/share/native/libfreetype/src/cff/cffpic.h
../../../src/java.desktop/share/native/libfreetype/src/cff/cffcmap.h
../../../src/java.desktop/share/native/libfreetype/src/cff/cffdrivr.c
../../../src/java.desktop/share/native/libfreetype/src/cff/cffparse.c
@@ -327,10 +334,10 @@ set(SOURCE_FILES
../../../src/java.desktop/share/native/libfreetype/src/cff/cffobjs.h
../../../src/java.desktop/share/native/libfreetype/src/cff/cffgload.h
../../../src/java.desktop/share/native/libfreetype/src/cff/cffload.c
../../../src/java.desktop/share/native/libfreetype/src/cff/cffpic.c
../../../src/java.desktop/share/native/libfreetype/src/cff/cffdrivr.h
../../../src/java.desktop/share/native/libfreetype/src/cff/cffcmap.c
../../../src/java.desktop/share/native/libfreetype/src/cff/cfferrs.h
../../../src/java.desktop/share/native/libfreetype/src/psaux
../../../src/java.desktop/share/native/libfreetype/src/psaux/psarrst.h
../../../src/java.desktop/share/native/libfreetype/src/psaux/psstack.h
../../../src/java.desktop/share/native/libfreetype/src/psaux/cffdecode.h
@@ -367,6 +374,7 @@ set(SOURCE_FILES
../../../src/java.desktop/share/native/libfreetype/src/psaux/afmparse.c
../../../src/java.desktop/share/native/libfreetype/src/psaux/psauxmod.h
../../../src/java.desktop/share/native/libfreetype/src/psaux/psread.h
../../../src/java.desktop/share/native/libfreetype/src/cid
../../../src/java.desktop/share/native/libfreetype/src/cid/cidtoken.h
../../../src/java.desktop/share/native/libfreetype/src/cid/cidriver.c
../../../src/java.desktop/share/native/libfreetype/src/cid/cidparse.c
@@ -379,11 +387,12 @@ set(SOURCE_FILES
../../../src/java.desktop/share/native/libfreetype/src/cid/cidparse.h
../../../src/java.desktop/share/native/libfreetype/src/cid/cidobjs.c
../../../src/java.desktop/share/native/libfreetype/src/cid/cidload.h
../../../src/java.desktop/share/native/libfreetype/src/autofit
../../../src/java.desktop/share/native/libfreetype/src/autofit/afindic.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afdummy.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afmodule.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afwarp.c
../../../src/java.desktop/share/native/libfreetype/src/autofit/afpic.c
../../../src/java.desktop/share/native/libfreetype/src/autofit/afblue.cin
../../../src/java.desktop/share/native/libfreetype/src/autofit/afglobal.c
../../../src/java.desktop/share/native/libfreetype/src/autofit/afcover.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afwrtsys.h
@@ -396,10 +405,10 @@ set(SOURCE_FILES
../../../src/java.desktop/share/native/libfreetype/src/autofit/afranges.c
../../../src/java.desktop/share/native/libfreetype/src/autofit/afcjk.c
../../../src/java.desktop/share/native/libfreetype/src/autofit/afstyles.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afblue.dat
../../../src/java.desktop/share/native/libfreetype/src/autofit/aferrors.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afdummy.c
../../../src/java.desktop/share/native/libfreetype/src/autofit/afindic.c
../../../src/java.desktop/share/native/libfreetype/src/autofit/afpic.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afglobal.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afwarp.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afmodule.c
@@ -409,64 +418,58 @@ set(SOURCE_FILES
../../../src/java.desktop/share/native/libfreetype/src/autofit/aftypes.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afcjk.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afranges.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afblue.hin
../../../src/java.desktop/share/native/libfreetype/src/autofit/afloader.c
../../../src/java.desktop/share/native/libfreetype/src/autofit/aflatin.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afangles.h
../../../src/java.desktop/share/native/libfreetype/src/autofit/afhints.c
../../../src/java.desktop/share/native/libfreetype/src/pshinter
../../../src/java.desktop/share/native/libfreetype/src/pshinter/pshmod.c
../../../src/java.desktop/share/native/libfreetype/src/pshinter/pshrec.h
../../../src/java.desktop/share/native/libfreetype/src/pshinter/pshpic.c
../../../src/java.desktop/share/native/libfreetype/src/pshinter/pshglob.h
../../../src/java.desktop/share/native/libfreetype/src/pshinter/pshalgo.c
../../../src/java.desktop/share/native/libfreetype/src/pshinter/pshmod.h
../../../src/java.desktop/share/native/libfreetype/src/pshinter/pshnterr.h
../../../src/java.desktop/share/native/libfreetype/src/pshinter/pshpic.h
../../../src/java.desktop/share/native/libfreetype/src/pshinter/pshrec.c
../../../src/java.desktop/share/native/libfreetype/src/pshinter/pshalgo.h
../../../src/java.desktop/share/native/libfreetype/src/pshinter/pshglob.c
../../../src/java.desktop/share/native/libfreetype/src/truetype
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttinterp.c
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttpload.c
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttgxvar.c
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttsubpix.h
../../../src/java.desktop/share/native/libfreetype/src/truetype/tterrors.h
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttdriver.h
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttpic.h
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttobjs.c
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttgload.h
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttgxvar.h
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttpload.h
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttinterp.h
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttpic.c
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttdriver.c
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttsubpix.c
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttobjs.h
../../../src/java.desktop/share/native/libfreetype/src/truetype/ttgload.c
../../../src/java.desktop/share/native/libfreetype/src/raster
../../../src/java.desktop/share/native/libfreetype/src/raster/ftmisc.h
../../../src/java.desktop/share/native/libfreetype/src/raster/rasterrs.h
../../../src/java.desktop/share/native/libfreetype/src/raster/rastpic.c
../../../src/java.desktop/share/native/libfreetype/src/raster/ftrend1.h
../../../src/java.desktop/share/native/libfreetype/src/raster/ftraster.h
../../../src/java.desktop/share/native/libfreetype/src/raster/rastpic.h
../../../src/java.desktop/share/native/libfreetype/src/raster/ftraster.c
../../../src/java.desktop/share/native/libfreetype/src/raster/ftrend1.c
../../../src/java.desktop/share/native/libfreetype/src/psnames
../../../src/java.desktop/share/native/libfreetype/src/psnames/psnamerr.h
../../../src/java.desktop/share/native/libfreetype/src/psnames/psmodule.c
../../../src/java.desktop/share/native/libfreetype/src/psnames/pspic.h
../../../src/java.desktop/share/native/libfreetype/src/psnames/pstables.h
../../../src/java.desktop/share/native/libfreetype/src/psnames/psmodule.h
../../../src/java.desktop/share/native/libfreetype/src/psnames/pspic.c
../../../src/java.desktop/share/native/libfreetype/src/base
../../../src/java.desktop/share/native/libfreetype/src/base/ftobjs.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftfntfmt.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftinit.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftapi.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftdbgmem.c
../../../src/java.desktop/share/native/libfreetype/src/base/fthash.c
../../../src/java.desktop/share/native/libfreetype/src/base/basepic.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftpic.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftbitmap.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftpsprop.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftcid.c
../../../src/java.desktop/share/native/libfreetype/src/base/md5.h
../../../src/java.desktop/share/native/libfreetype/src/base/ftglyph.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftgloadr.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftsystem.c
@@ -480,11 +483,9 @@ set(SOURCE_FILES
../../../src/java.desktop/share/native/libfreetype/src/base/ftsnames.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftdebug.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftmm.c
../../../src/java.desktop/share/native/libfreetype/src/base/basepic.h
../../../src/java.desktop/share/native/libfreetype/src/base/ftbase.h
../../../src/java.desktop/share/native/libfreetype/src/base/ftfstype.c
../../../src/java.desktop/share/native/libfreetype/src/base/fttrigon.c
../../../src/java.desktop/share/native/libfreetype/src/base/md5.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftbbox.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftstroke.c
../../../src/java.desktop/share/native/libfreetype/src/base/ftgasp.c
@@ -742,38 +743,214 @@ set(SOURCE_FILES
../../../src/java.desktop/share/native/libjavajpeg/jidctred.c
../../../src/java.desktop/share/native/libjavajpeg/jpegint.h
../../../src/java.desktop/share/native/libjavajpeg/jdpostct.c
../../../src/java.desktop/share/native/libfontmanager
../../../src/java.desktop/share/native/libfontmanager/DrawGlyphList.c
../../../src/java.desktop/share/native/libfontmanager/HBShaper.c
../../../src/java.desktop/share/native/libfontmanager/scriptMapping.c
../../../src/java.desktop/share/native/libfontmanager/harfbuzz
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-buffer.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-fdsc-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-post-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-indic-machine.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-open-type.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-plan.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout-common.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-use-machine.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-layout-base-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-head-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-set.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-coretext.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-win1256.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-khmer.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-shaper-list.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-face.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-buffer.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-var.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-cff-interp-common.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-map.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-post-macroman.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-fallback.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-common.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-deprecated.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-blob.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-normalize.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-unicode.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-version.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-stat-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-name-language.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-ltag-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-font.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-color.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-cff-interp-cs-common.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-kern.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-cff-common.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-default.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-face.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-coretext.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-tag.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-cff1-table.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout-just-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-color-colr-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-deprecated.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-cff1.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout-kerx-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-vorg-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-blob.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-font.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-unicode.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-indic-table.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-kern-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-normalize.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-common.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-buffer-serialize.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-name-language.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-layout-gpos-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-var-avar-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-cff-common.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-fallback-shape.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-cff1-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-face.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-string-array.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-layout.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-cff1.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout-lcar-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-var-hvar-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-layout-gsubgpos.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-var.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-atomic.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-static.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ucdn
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ucdn/ucdn.c
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ucdn/ucdn.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ucdn/ucdn_db.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout-morx-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-cff2-interp-cs.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ucdn.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-khmer-machine.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-name.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-thai.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-hhea-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-var-mvar-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-shape.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-tag.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-plan.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-os2-unicode-ranges.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-warning.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-hdmx-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-khmer.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ft.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-cff-common.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-layout-gdef-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-glyf-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-fallback.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-buffer.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-map.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-glyf.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-name-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-set.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-color.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-cff2-table.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-shape-plan.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-shape-plan.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-font.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-use.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-color-sbix-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-indic.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-unicode.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-unicode-emoji-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout-feat-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-object.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-myanmar.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-gasp-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-buffer-deserialize-json.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-vector.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-myanmar-machine.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-fallback.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-debug.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-tag-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-vowel-constraints.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-shaper.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-iter.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-blob.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-layout.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-face.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout-trak-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-cff1-interp-cs.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-hmtx-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout-ankr-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-cff-interp-dict-common.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-map.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-layout-common.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-input.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-color-cbdt-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-color-cpal-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-cff2.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-utf.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-hebrew.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-map.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-var-fvar-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-font.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-map.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-shaper.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-layout-jstf-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-mutex.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-os2-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-face.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-layout.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-layout-gsub-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-input.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-math-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-cmap-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-layout-bsln-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-aat-map.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-font.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-maxp-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-buffer-deserialize-text.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-map.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-cff2.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-array.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-set.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-shape-plan.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-shape.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-hangul.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-null.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-cff2-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-name.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset-glyf.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-set-digest.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-indic.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-open-file.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-machinery.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-myanmar.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-subset.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-color-svg-table.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-use.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-dsalgs.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-use-table.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-math.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-math.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ft.h
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic.hh
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-vowel-constraints.cc
../../../src/java.desktop/share/native/libfontmanager/harfbuzz/hb-shaper-impl.hh
../../../src/java.desktop/share/native/libfontmanager/glyphblitting.h
../../../src/java.desktop/share/native/libfontmanager/hb-jdk.h
../../../src/java.desktop/share/native/libfontmanager/fontconfig.h
../../../src/java.desktop/share/native/libfontmanager/hb-jdk-font.cc
../../../src/java.desktop/share/native/libfontmanager/freetypeScaler.c
../../../src/java.desktop/share/native/libfontmanager/scriptMapping.h
../../../src/java.desktop/share/native/libfontmanager/ColorGlyphSurfaceData.c
@@ -1149,10 +1326,8 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux"
../../../src/java.desktop/unix/native/libawt/awt/awt_Mlib.c
../../../src/java.desktop/unix/native/libawt/awt/awt_LoadLibrary.c
../../../src/java.desktop/unix/native/libawt/awt/initIDs.c
../../../src/java.desktop/unix/native/libawt_xawt/java2d/x11/XRBackendNative.c
../../../src/java.desktop/unix/native/libawt_xawt/java2d/x11/XRSurfaceData.c
../../../src/java.desktop/unix/native/libawt_xawt/awt
../../../src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/randr.h
../../../src/java.desktop/unix/native/libawt_xawt/awt/list.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/awt_DrawingSurface.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/swing_GTKStyle.c
@@ -1167,7 +1342,6 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux"
../../../src/java.desktop/unix/native/libawt_xawt/awt/multi_font.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/multiVis.h
../../../src/java.desktop/unix/native/libawt_xawt/awt/awt_Event.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/Xrandr.h
../../../src/java.desktop/unix/native/libawt_xawt/awt/robot_common.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/awt_util.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/list.h
@@ -1176,7 +1350,6 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux"
../../../src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/gtk_interface.h
../../../src/java.desktop/unix/native/libawt_xawt/awt/awt_Robot.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/HPkeysym.h
../../../src/java.desktop/unix/native/libawt_xawt/awt/awt_Event.h
../../../src/java.desktop/unix/native/libawt_xawt/awt/multiVis.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/canvas.h
@@ -1186,14 +1359,6 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux"
../../../src/java.desktop/unix/native/libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c
../../../src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c
../../../src/java.desktop/unix/native/libawt_xawt/xawt/awt_Desktop.c
../../../src/java.desktop/unix/native/libawt_xawt/xawt/XToolkit.c
../../../src/java.desktop/unix/native/libawt_xawt/xawt/awt_Taskbar.c
../../../src/java.desktop/unix/native/libawt_xawt/xawt/gnome_interface.c
../../../src/java.desktop/unix/native/libawt_xawt/xawt/XlibWrapper.c
../../../src/java.desktop/unix/native/libawt_xawt/xawt/gnome_interface.h
../../../src/java.desktop/unix/native/libawt_xawt/xawt/awt_Taskbar.h
../../../src/java.desktop/unix/native/libawt_xawt/xawt/XWindow.c
../../../src/java.desktop/unix/native/libfontmanager/X11FontScaler.c
../../../src/java.desktop/unix/native/libfontmanager/X11TextRenderer.c
../../../src/java.desktop/unix/native/libsplashscreen/splashscreen_config.h

View File

@@ -37,6 +37,9 @@ BUILD_NAME="$(ls "$EXPLODED")"
if test -d $EXPLODED/$BUILD_NAME/Contents/Home/jmods; then
mv $EXPLODED/$BUILD_NAME/Contents/Home/jmods $BACKUP_JMODS
fi
if test -d $EXPLODED/$BUILD_NAME/Contents/Home/Frameworks; then
mv $EXPLODED/$BUILD_NAME/Contents/Home/Frameworks $BACKUP_JMODS
fi
if test -f $EXPLODED/$BUILD_NAME/Contents/MacOS/libjli.dylib; then
mv $EXPLODED/$BUILD_NAME/Contents/MacOS/libjli.dylib $BACKUP_JMODS
fi
@@ -131,6 +134,9 @@ log "Zipping $BUILD_NAME to $INPUT_FILE ..."
if test -d $BACKUP_JMODS/jmods; then
mv $BACKUP_JMODS/jmods $EXPLODED/$BUILD_NAME/Contents/Home
fi
if test -d $BACKUP_JMODS/Frameworks; then
mv $BACKUP_JMODS/Frameworks $EXPLODED/$BUILD_NAME/Contents/Home
fi
COPYFILE_DISABLE=1 tar -pczf $INPUT_FILE --exclude='*.dSYM' --exclude='man' -C $EXPLODED $BUILD_NAME
log "Finished zipping"

View File

@@ -272,12 +272,14 @@ XEvent.xclient 0
XEvent.xcolormap 0
XEvent.xconfigure 0
XEvent.xconfigurerequest 0
XEvent.xcookie 0
XEvent.xcreatewindow 0
XEvent.xcrossing 0
XEvent.xdestroywindow 0
XEvent.xerror 0
XEvent.xexpose 0
XEvent.xfocus 0
XEvent.xgeneric 0
XEvent.xgraphicsexpose 0
XEvent.xgravity 0
XEvent.xkey 0
@@ -370,6 +372,22 @@ XGCValues.subwindow_mode 64
XGCValues.tile 44
XGCValues.ts_x_origin 52
XGCValues.ts_y_origin 56
XGenericEvent 24
XGenericEventCookie 32
XGenericEventCookie.cookie 24
XGenericEventCookie.data 28
XGenericEventCookie.display 12
XGenericEventCookie.evtype 20
XGenericEventCookie.extension 16
XGenericEventCookie.send_event 8
XGenericEventCookie.serial 4
XGenericEventCookie.type 0
XGenericEvent.display 12
XGenericEvent.evtype 20
XGenericEvent.extension 16
XGenericEvent.send_event 8
XGenericEvent.serial 4
XGenericEvent.type 0
XGraphicsExposeEvent 48
XGraphicsExposeEvent.count 36
XGraphicsExposeEvent.display 12
@@ -396,6 +414,9 @@ XHostAddress 12
XHostAddress.address 8
XHostAddress.family 0
XHostAddress.length 4
XIButtonState 8
XIButtonState.mask 4
XIButtonState.mask_len 0
XIconSize 24
XIconSize.height_inc 20
XIconSize.max_height 12
@@ -403,6 +424,29 @@ XIconSize.max_width 8
XIconSize.min_height 4
XIconSize.min_width 0
XIconSize.width_inc 16
XIDeviceEvent 140
XIDeviceEvent.buttons 88
XIDeviceEvent.child 48
XIDeviceEvent.detail 36
XIDeviceEvent.deviceid 28
XIDeviceEvent.display 12
XIDeviceEvent.event 44
XIDeviceEvent.event_x 68
XIDeviceEvent.event_y 76
XIDeviceEvent.evtype 20
XIDeviceEvent.extension 16
XIDeviceEvent.flags 84
XIDeviceEvent.group 124
XIDeviceEvent.mods 108
XIDeviceEvent.root 40
XIDeviceEvent.root_x 52
XIDeviceEvent.root_y 60
XIDeviceEvent.send_event 8
XIDeviceEvent.serial 4
XIDeviceEvent.sourceid 32
XIDeviceEvent.time 24
XIDeviceEvent.type 0
XIDeviceEvent.valuators 96
XImage 88
XImage.bitmap_bit_order 28
XImage.bitmap_pad 32
@@ -436,6 +480,11 @@ XIMHotKeyTrigger.modifier_mask 8
XIMHotKeyTriggers 8
XIMHotKeyTriggers.key 4
XIMHotKeyTriggers.num_hot_key 0
XIModifierState 16
XIModifierState.base 0
XIModifierState.effective 12
XIModifierState.latched 4
XIModifierState.locked 8
XIMPreeditCaretCallbackStruct 12
XIMPreeditCaretCallbackStruct.direction 4
XIMPreeditCaretCallbackStruct.position 0
@@ -472,6 +521,10 @@ XIMText.string 12
XIMValuesList 8
XIMValuesList.count_values 0
XIMValuesList.supported_values 4
XIValuatorState 12
XIValuatorState.mask 4
XIValuatorState.mask_len 0
XIValuatorState.values 8
XkbAccessXNotifyEvent 44
XkbAccessXNotifyEvent.debounce_delay 40
XkbAccessXNotifyEvent.detail 28

View File

@@ -59,4 +59,6 @@ jdk.security.auth,
jdk.security.jgss,
jdk.unsupported,
jdk.xml.dom,
jdk.zipfs
jdk.zipfs,
jdk.hotspot.agent,
jcef

View File

@@ -1132,7 +1132,7 @@ bool PhaseIdealLoop::loop_predication_impl_helper(IdealLoopTree *loop, ProjNode*
Node* idx = cmp->in(1);
assert(!invar.is_invariant(idx), "index is variant");
Node* rng = cmp->in(2);
assert(rng->Opcode() == Op_LoadRange || iff->is_RangeCheck() || _igvn.type(rng)->is_int()->_lo != 0, "must be");
// [tav: crash] assert(rng->Opcode() == Op_LoadRange || iff->is_RangeCheck() || _igvn.type(rng)->is_int()->_lo != 0, "must be");
assert(invar.is_invariant(rng), "range must be invariant");
int scale = 1;
Node* offset = zero;

View File

@@ -70,6 +70,7 @@ import sun.java2d.SurfaceData;
import sun.java2d.loops.Blit;
import sun.java2d.loops.CompositeType;
import sun.java2d.pipe.Region;
import sun.lwawt.macosx.CPlatformWindow;
import sun.util.logging.PlatformLogger;
public class LWWindowPeer
@@ -1528,4 +1529,17 @@ public class LWWindowPeer
public String toString() {
return super.toString() + " [target is " + getTarget() + "]";
}
/**
* [tav] Used externally.
*/
@Override
public long getWindowHandle() {
final long[] handle = new long[1];
PlatformWindow window = getPlatformWindow();
if (window instanceof CPlatformWindow) {
((CPlatformWindow)window).execute(ptr -> handle[0] = ptr);
}
return handle[0];
}
}

View File

@@ -64,11 +64,7 @@ class CFileDialog implements FileDialogPeer {
int dialogMode = target.getMode();
String title = (target.getTitle() == null) ? "" : target.getTitle();
Window owner = target.getOwner();
final Object peer = AWTAccessor.getComponentAccessor().getPeer(owner);
Object platformWindow = ((LWWindowPeer) peer).getPlatformWindow();
((CPlatformWindow)platformWindow).execute(ownerPtr -> {
final CFRetainedResource.CFNativeAction nativeAction = ownerPtr -> {
String[] userFileNames = nativeRunFileDialog(
ownerPtr,
title,
@@ -106,9 +102,16 @@ class CFileDialog implements FileDialogPeer {
accessor.setDirectory(target, directory);
accessor.setFile(target, file);
accessor.setFiles(target, files);
});
};
final Window owner = target.getOwner();
if (owner == null) {
nativeAction.run(0);
} else {
final Object peer = AWTAccessor.getComponentAccessor().getPeer(owner);
Object platformWindow = ((LWWindowPeer) peer).getPlatformWindow();
((CPlatformWindow)platformWindow).execute(nativeAction);
}
} finally {
// Java2 Dialog waits for hide to let show() return
target.dispose();

View File

@@ -63,6 +63,7 @@ import com.apple.laf.ClientPropertyApplicator.Property;
import sun.awt.AWTAccessor;
import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.AWTAccessor.WindowAccessor;
import sun.awt.InvokeOnToolkitHelper;
import sun.java2d.SurfaceData;
import sun.java2d.opengl.CGLSurfaceData;
import sun.lwawt.LWLightweightFramePeer;
@@ -327,7 +328,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
long nativeWindowPtr = java.security.AccessController.doPrivileged(
(PrivilegedAction<Long>) () -> {
try {
return LWCToolkit.SelectorPerformer.perform(() -> {
return InvokeOnToolkitHelper.invokeAndBlock(() -> {
AtomicLong ref = new AtomicLong();
contentView.execute(viewPtr -> {
boolean hasOwnerPtr = false;
@@ -438,81 +439,84 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
if (target instanceof javax.swing.RootPaneContainer) {
javax.swing.JRootPane rootpane = ((javax.swing.RootPaneContainer)target).getRootPane();
Object prop = null;
prop = rootpane.getClientProperty(WINDOW_BRUSH_METAL_LOOK);
if (prop != null) {
styleBits = SET(styleBits, TEXTURED, Boolean.parseBoolean(prop.toString()));
}
if (rootpane != null) {
Object prop;
if (isDialog && ((Dialog)target).getModalityType() == ModalityType.DOCUMENT_MODAL) {
prop = rootpane.getClientProperty(WINDOW_DOC_MODAL_SHEET);
prop = rootpane.getClientProperty(WINDOW_BRUSH_METAL_LOOK);
if (prop != null) {
styleBits = SET(styleBits, SHEET, Boolean.parseBoolean(prop.toString()));
styleBits = SET(styleBits, TEXTURED, Boolean.parseBoolean(prop.toString()));
}
}
prop = rootpane.getClientProperty(WINDOW_STYLE);
if (prop != null) {
if ("small".equals(prop)) {
styleBits = SET(styleBits, UTILITY, true);
if (target.isAlwaysOnTop() && rootpane.getClientProperty(WINDOW_HIDES_ON_DEACTIVATE) == null) {
styleBits = SET(styleBits, HIDES_ON_DEACTIVATE, true);
if (isDialog && ((Dialog) target).getModalityType() == ModalityType.DOCUMENT_MODAL) {
prop = rootpane.getClientProperty(WINDOW_DOC_MODAL_SHEET);
if (prop != null) {
styleBits = SET(styleBits, SHEET, Boolean.parseBoolean(prop.toString()));
}
}
if ("textured".equals(prop)) styleBits = SET(styleBits, TEXTURED, true);
if ("unified".equals(prop)) styleBits = SET(styleBits, UNIFIED, true);
if ("hud".equals(prop)) styleBits = SET(styleBits, HUD, true);
}
prop = rootpane.getClientProperty(WINDOW_HIDES_ON_DEACTIVATE);
if (prop != null) {
styleBits = SET(styleBits, HIDES_ON_DEACTIVATE, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_STYLE);
if (prop != null) {
if ("small".equals(prop)) {
styleBits = SET(styleBits, UTILITY, true);
if (target.isAlwaysOnTop() && rootpane.getClientProperty(WINDOW_HIDES_ON_DEACTIVATE) == null) {
styleBits = SET(styleBits, HIDES_ON_DEACTIVATE, true);
}
}
if ("textured".equals(prop)) styleBits = SET(styleBits, TEXTURED, true);
if ("unified".equals(prop)) styleBits = SET(styleBits, UNIFIED, true);
if ("hud".equals(prop)) styleBits = SET(styleBits, HUD, true);
}
prop = rootpane.getClientProperty(WINDOW_CLOSEABLE);
if (prop != null) {
styleBits = SET(styleBits, CLOSEABLE, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_HIDES_ON_DEACTIVATE);
if (prop != null) {
styleBits = SET(styleBits, HIDES_ON_DEACTIVATE, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_MINIMIZABLE);
if (prop != null) {
styleBits = SET(styleBits, MINIMIZABLE, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_CLOSEABLE);
if (prop != null) {
styleBits = SET(styleBits, CLOSEABLE, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_DARK_APPEARANCE);
if (prop != null) {
styleBits = SET(styleBits, DARK, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_MINIMIZABLE);
if (prop != null) {
styleBits = SET(styleBits, MINIMIZABLE, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_TRANSPARENT_TITLEBAR_APPEARANCE);
if (prop != null) {
styleBits = SET(styleBits, TRANSPARENT_TITLEBAR, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_DARK_APPEARANCE);
if (prop != null) {
styleBits = SET(styleBits, DARK, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_LIGHT_APPEARANCE);
if (prop != null) {
styleBits = SET(styleBits, LIGHT, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_TRANSPARENT_TITLEBAR_APPEARANCE);
if (prop != null) {
styleBits = SET(styleBits, TRANSPARENT_TITLEBAR, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_ZOOMABLE);
if (prop != null) {
styleBits = SET(styleBits, ZOOMABLE, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_LIGHT_APPEARANCE);
if (prop != null) {
styleBits = SET(styleBits, LIGHT, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_FULLSCREENABLE);
if (prop != null) {
styleBits = SET(styleBits, FULLSCREENABLE, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_ZOOMABLE);
if (prop != null) {
styleBits = SET(styleBits, ZOOMABLE, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_SHADOW);
if (prop != null) {
styleBits = SET(styleBits, HAS_SHADOW, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_FULLSCREENABLE);
if (prop != null) {
styleBits = SET(styleBits, FULLSCREENABLE, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_DRAGGABLE_BACKGROUND);
if (prop != null) {
styleBits = SET(styleBits, DRAGGABLE_BACKGROUND, Boolean.parseBoolean(prop.toString()));
prop = rootpane.getClientProperty(WINDOW_SHADOW);
if (prop != null) {
styleBits = SET(styleBits, HAS_SHADOW, Boolean.parseBoolean(prop.toString()));
}
prop = rootpane.getClientProperty(WINDOW_DRAGGABLE_BACKGROUND);
if (prop != null) {
styleBits = SET(styleBits, DRAGGABLE_BACKGROUND, Boolean.parseBoolean(prop.toString()));
}
}
}

View File

@@ -87,15 +87,10 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.UndeclaredThrowableException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.MalformedURLException;
import java.security.*;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.Callable;
import java.util.HashMap;
import java.util.Locale;
@@ -106,12 +101,7 @@ import java.util.ResourceBundle;
import javax.swing.UIManager;
import com.apple.laf.AquaMenuBarUI;
import sun.awt.AWTAccessor;
import sun.awt.AppContext;
import sun.awt.CGraphicsConfig;
import sun.awt.CGraphicsDevice;
import sun.awt.LightweightFrame;
import sun.awt.SunToolkit;
import sun.awt.*;
import sun.awt.datatransfer.DataTransferer;
import sun.awt.util.ThreadGroupUtils;
import sun.java2d.opengl.OGLRenderQueue;
@@ -482,7 +472,7 @@ public final class LWCToolkit extends LWToolkit {
public Insets getScreenInsets(final GraphicsConfiguration gc) {
CGraphicsDevice gd = ((CGraphicsConfig) gc).getDevice();
// Avoid deadlock with input methods
return LWCToolkit.SelectorPerformer.perform(gd::getScreenInsets);
return InvokeOnToolkitHelper.invokeAndBlock(gd::getScreenInsets);
}
@Override
@@ -700,150 +690,6 @@ public final class LWCToolkit extends LWToolkit {
}
}
/**
* Performs a wrapped native selector on the main thread, waiting on EDT, preventing the threads from a deadlock.
*/
public static class SelectorPerformer {
private ExecutorService executor;
// every perform() pushes a queue of invocations
private Stack<LinkedBlockingQueue<InvocationEvent>> invocations = new Stack<>();
// invocations should be dispatched on proper EDT (per AppContext)
private static final Map<Thread, SelectorPerformer> edt2performer = new ConcurrentHashMap<>();
private static final int WAIT_LIMIT_SECONDS = 5;
private SelectorPerformer() {}
/**
* Performs the selector wrapped in the callable. The selector should be executed via [JNFRunLoop performOnMainThreadWaiting:YES ...]
* on the native side so that the native doAWTRunLoop, which is run in [JNFRunLoop javaRunLoopMode], accepts it.
* The callable wrapper should not call any Java code which would normally be called on EDT.
* <p>
* If the main thread posts invocation events caused by the selector, those events are intercepted and dispatched on EDT out of order.
* <p>
* When called on non-EDT, the method performs the selector in place. The method is reentrant.
*
* @param selector the native selector wrapper
* @param <T> the selector return type
* @return the selector result
*/
public static <T> T perform(Callable<T> selector) {
if (selector == null) return null;
if (EventQueue.isDispatchThread()) {
SelectorPerformer performer = getInstance(Thread.currentThread());
if (performer != null) {
return performer.performImpl(selector);
}
}
// fallback to default
try {
return selector.call();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private <T> T performImpl(Callable<T> selector) {
assert EventQueue.isDispatchThread();
if (executor == null) {
// init on EDT
AccessController.doPrivileged((PrivilegedAction<?>)() ->
executor = new ThreadPoolExecutor(1, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<>(),
new ThreadFactory() {
private ThreadFactory factory = Executors.privilegedThreadFactory();
@Override
public Thread newThread(Runnable r) {
Thread t = factory.newThread(r);
t.setDaemon(true);
t.setName("AWT-SelectorPerformer " + t.getName());
return t;
}
})
);
}
LinkedBlockingQueue<InvocationEvent> currentQueue;
synchronized (invocations) {
invocations.push(currentQueue = new LinkedBlockingQueue<>());
}
FutureTask<T> task = new FutureTask<T>(selector) {
@Override
protected void done() {
synchronized (invocations) {
// Done with the current queue, wake it up.
invocations.pop().add(new InvocationEvent(executor, () -> {}));
}
}
};
executor.execute(task);
try {
while (!task.isDone() || !currentQueue.isEmpty()) {
InvocationEvent event = currentQueue.poll(WAIT_LIMIT_SECONDS, TimeUnit.SECONDS);
if (event == null) {
new RuntimeException("Waiting for the invocation event timed out").printStackTrace();
break;
}
event.dispatch();
}
return task.isDone() ? task.get() : null;
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return null;
}
/**
* Checks if there's an active SelectorPerformer corresponding to the invocation's AppContext,
* adds the invocation to the SelectorPerformer's queue and returns true.
* Otherwise does nothing and returns false.
*/
public static boolean offer(InvocationEvent invocation) {
Object source = invocation.getSource();
SelectorPerformer performer = (source instanceof Component) ?
getInstance((Component)source) :
getInstance(Toolkit.getDefaultToolkit().getSystemEventQueue());
if (performer == null) return false;
synchronized (performer.invocations) {
if (!performer.invocations.isEmpty()) {
performer.invocations.peek().add(invocation);
return true;
}
}
return false;
}
private static SelectorPerformer getInstance(Component comp) {
if (comp == null) return null;
AppContext appContext = SunToolkit.targetToAppContext(comp);
if (appContext == null) return null;
return getInstance((EventQueue)appContext.get(AppContext.EVENT_QUEUE_KEY));
}
private static SelectorPerformer getInstance(EventQueue eq) {
if (eq == null) return null;
return getInstance(AWTAccessor.getEventQueueAccessor().getDispatchThread(eq));
}
private static SelectorPerformer getInstance(Thread edt) {
if (edt == null) return null;
return edt2performer.computeIfAbsent(edt, key -> new SelectorPerformer());
}
}
/**
* Kicks an event over to the appropriate event queue and waits for it to
* finish To avoid deadlocking, we manually run the NSRunLoop while waiting
@@ -889,7 +735,7 @@ public final class LWCToolkit extends LWToolkit {
},
true);
if (!SelectorPerformer.offer(invocationEvent)) {
if (!InvokeOnToolkitHelper.offer(invocationEvent)) {
if (component != null) {
AppContext appContext = SunToolkit.targetToAppContext(component);
SunToolkit.postEvent(appContext, invocationEvent);

View File

@@ -165,7 +165,9 @@ canChooseDirectories:(BOOL)inChooseDirectories
[CMenuBar activate:menuBar modallyDisabled:isDisabled];
}
[thePanel setAppearance:fOwner.appearance];
if (@available(macOS 10.14, *)) {
[thePanel setAppearance:fOwner.appearance];
}
void (^onComplete)(BOOL, BOOL) = ^(BOOL responseOK, BOOL doStopModal) {
if (responseOK) {

View File

@@ -50,7 +50,7 @@ BOOL postEventDuringEventSynthesis = NO;
* Subtypes of NSApplicationDefined, which are used for custom events.
*/
enum {
ExecuteBlockEvent, NativeSyncQueueEvent
ExecuteBlockEvent = 777, NativeSyncQueueEvent
};
@implementation NSApplicationAWT
@@ -366,11 +366,15 @@ untilDate:(NSDate *)expiration inMode:(NSString *)mode dequeue:(BOOL)deqFlag {
{
if ([event type] == NSApplicationDefined
&& TS_EQUAL([event timestamp], dummyEventTimestamp)
&& [event subtype] == NativeSyncQueueEvent) {
&& (short)[event subtype] == NativeSyncQueueEvent
&& [event data1] == NativeSyncQueueEvent
&& [event data2] == NativeSyncQueueEvent) {
[seenDummyEventLock lockWhenCondition:NO];
[seenDummyEventLock unlockWithCondition:YES];
} else if ([event type] == NSApplicationDefined && [event subtype] == ExecuteBlockEvent) {
} else if ([event type] == NSApplicationDefined
&& (short)[event subtype] == ExecuteBlockEvent
&& [event data1] != 0 && [event data2] == ExecuteBlockEvent) {
void (^block)() = (void (^)()) [event data1];
block();
[block release];
@@ -401,7 +405,7 @@ untilDate:(NSDate *)expiration inMode:(NSString *)mode dequeue:(BOOL)deqFlag {
context: nil
subtype: ExecuteBlockEvent
data1: encode
data2: 0];
data2: ExecuteBlockEvent];
[NSApp postEvent: event atStart: NO];
[pool drain];
@@ -419,8 +423,8 @@ untilDate:(NSDate *)expiration inMode:(NSString *)mode dequeue:(BOOL)deqFlag {
windowNumber: 0
context: nil
subtype: NativeSyncQueueEvent
data1: 0
data2: 0];
data1: NativeSyncQueueEvent
data2: NativeSyncQueueEvent];
if (useCocoa) {
[NSApp postEvent:event atStart:NO];
} else {

View File

@@ -125,4 +125,11 @@ public interface WindowPeer extends ContainerPeer {
* @return the system insets or null
*/
default Insets getSysInsets() { return null; }
/**
* Returns platform window handle.
*/
default long getWindowHandle() {
throw new UnsupportedOperationException();
}
}

View File

@@ -200,6 +200,7 @@ public class JMenuBar extends JComponent implements Accessible,MenuElement
*/
public JMenu add(JMenu c) {
super.add(c);
c.setFocusable(false);
return c;
}

View File

@@ -1480,13 +1480,9 @@ public class StyleSheet extends StyleContext {
}
// Get the AttributeSet from linked style sheets.
for (int counter = 0; counter < numLinkedSS; counter++) {
AttributeSet attr = linkedStyleSheets.elementAt(counter).getRule(selector);
if (attr == null) {
attrs[counter + numStyles] = SimpleAttributeSet.EMPTY;
}
else {
attrs[counter + numStyles] = attr;
}
StyleSheet styleSheet = linkedStyleSheets.elementAt(counter);
attrs[counter + numStyles] =
(styleSheet == null) ? SimpleAttributeSet.EMPTY : styleSheet.getRule(selector);
}
ResolvedStyle retStyle = new ResolvedStyle(selector, attrs,
numStyles);

View File

@@ -109,7 +109,10 @@ module java.desktop {
// see make/GensrcModuleInfo.gmk
exports sun.awt to
jdk.accessibility,
jdk.unsupported.desktop;
jdk.unsupported.desktop,
jcef;
exports java.awt.peer to jcef;
exports java.awt.dnd.peer to jdk.unsupported.desktop;
exports sun.awt.dnd to jdk.unsupported.desktop;

View File

@@ -0,0 +1,157 @@
package sun.awt;
import java.awt.*;
import java.awt.event.InvocationEvent;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Map;
import java.util.Stack;
import java.util.concurrent.*;
/**
* Used to perform a blocking invocation on Toolkit thread from EDT, preventing a deadlock.
* The deadlock can happen when EDT and Toolkit perform blocking invocations at the same time.
* The following is performed to resolve it:
* 1) The invoker spins a nested event loop on EDT while waiting for the invocation to complete.
* 2) A separate pool thread is used to perform the invocation.
*/
public class InvokeOnToolkitHelper {
private ExecutorService executor;
// every invokeAndWait() pushes a queue of invocations
private final Stack<LinkedBlockingQueue<InvocationEvent>> invocations = new Stack<>();
// invocations should be dispatched on proper EDT (per AppContext)
private static final Map<Thread, InvokeOnToolkitHelper> edt2invokerMap = new ConcurrentHashMap<>();
private static final int WAIT_LIMIT_SECONDS = 5;
private InvokeOnToolkitHelper() {}
/**
* Invokes the callable on Toolkit thread and blocks until the completion. The method is re-entrant.
*
* On macOS it is assumed the callable wraps a native selector. The selector should be executed via [JNFRunLoop performOnMainThreadWaiting:YES ...]
* so that the doAWTRunLoop on AppKit (which is run in [JNFRunLoop javaRunLoopMode]) accepts it. The callable wrapper should not call any Java code
* which would normally be called on EDT.
* <p>
* If Toolkit posts invocation events caused by the callable, those events are intercepted and dispatched on EDT out of order.
* <p>
* When called on non-EDT, the method invokes the callable in place.
*/
public static <T> T invokeAndBlock(Callable<T> callable) {
if (callable == null) return null;
if (EventQueue.isDispatchThread()) {
InvokeOnToolkitHelper invoker = getInstance(Thread.currentThread());
if (invoker != null) {
return invoker.invoke(callable);
}
}
// fallback to default
try {
return callable.call();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private <T> T invoke(Callable<T> callable) {
assert EventQueue.isDispatchThread();
if (executor == null) {
// init on EDT
AccessController.doPrivileged((PrivilegedAction<?>)() ->
executor = new ThreadPoolExecutor(1, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<>(),
new ThreadFactory() {
private final ThreadFactory factory = Executors.privilegedThreadFactory();
@Override
public Thread newThread(Runnable r) {
Thread t = factory.newThread(r);
t.setDaemon(true);
t.setName("AWT-InvokeOnToolkitHelper " + t.getName());
return t;
}
})
);
}
LinkedBlockingQueue<InvocationEvent> currentQueue;
synchronized (invocations) {
invocations.push(currentQueue = new LinkedBlockingQueue<>());
}
FutureTask<T> task = new FutureTask<T>(callable) {
@Override
protected void done() {
synchronized (invocations) {
// Done with the current queue, wake it up.
invocations.pop().add(new InvocationEvent(executor, () -> {}));
}
}
};
executor.execute(task);
try {
while (!task.isDone() || !currentQueue.isEmpty()) {
InvocationEvent event = currentQueue.poll(WAIT_LIMIT_SECONDS, TimeUnit.SECONDS);
if (event == null) {
new RuntimeException("Waiting for the invocation event timed out").printStackTrace();
break;
}
event.dispatch();
}
return task.isDone() ? task.get() : null;
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return null;
}
/**
* Warning: the method is used by the implementation and should not be used by a client.
*
* Checks if there's an active InvokeOnToolkitHelper corresponding to the invocation's AppContext,
* adds the invocation to the InvokeOnToolkitHelper's queue and returns true.
* Otherwise does nothing and returns false.
*/
public static boolean offer(InvocationEvent invocation) {
Object source = invocation.getSource();
InvokeOnToolkitHelper invoker = (source instanceof Component) ?
getInstance((Component)source) :
getInstance(Toolkit.getDefaultToolkit().getSystemEventQueue());
if (invoker == null) return false;
synchronized (invoker.invocations) {
if (!invoker.invocations.isEmpty()) {
invoker.invocations.peek().add(invocation);
return true;
}
}
return false;
}
private static InvokeOnToolkitHelper getInstance(Component comp) {
if (comp == null) return null;
AppContext appContext = SunToolkit.targetToAppContext(comp);
if (appContext == null) return null;
return getInstance((EventQueue)appContext.get(AppContext.EVENT_QUEUE_KEY));
}
private static InvokeOnToolkitHelper getInstance(EventQueue eq) {
if (eq == null) return null;
return getInstance(AWTAccessor.getEventQueueAccessor().getDispatchThread(eq));
}
private static InvokeOnToolkitHelper getInstance(Thread edt) {
if (edt == null) return null;
return edt2invokerMap.computeIfAbsent(edt, key -> new InvokeOnToolkitHelper());
}
}

View File

@@ -53,16 +53,21 @@ class FreetypeFontScaler extends FontScaler {
String fontConfName = java.security.AccessController.doPrivileged(
(PrivilegedAction<String>) () -> {
if ("true".equals(System.getProperty(
"java2d.font.loadFontConf", ""))) {
String loadFontConfig = System.getProperty(
"java2d.font.loadFontConf", "");
if ("true".equals(loadFontConfig)) {
File f = new File(System.getProperty("user.home", "") +
File.separator + ".fonts.conf");
File.separator + ".fonts.conf");
if (!f.exists()) {
f = new File(System.getProperty("java.home", "") +
File.separator + "lib" + File.separator +
"fonts" + File.separator + "font.conf");
if (f.exists()) {
return f.getAbsolutePath();
}
}
if ("true".equals(loadFontConfig) || "bundled".equals(loadFontConfig)) {
File f = new File(System.getProperty("java.home", "") +
File.separator + "lib" + File.separator + "fonts" + File.separator + "font.conf");
return f.getAbsolutePath();
}
return null;

View File

@@ -32,7 +32,7 @@
#include <stdlib.h>
#include <math.h>
#if !defined(_WIN32) && !defined(__APPLE_)
#if !defined(_WIN32) && !defined(__APPLE__)
#include <dlfcn.h>
#else
#define DISABLE_FONTCONFIG
@@ -736,7 +736,7 @@ static void setupLoadRenderFlags(FTScalerContext *context, int fcHintStyle, FcBo
context->loadFlags = FT_LOAD_NO_HINTING;
break;
case FC_HINT_SLIGHT:
context->loadFlags = (fcRenderFlags != FT_RENDER_MODE_MONO) ? FT_LOAD_TARGET_LIGHT : FT_LOAD_NO_HINTING;
context->loadFlags = FT_LOAD_TARGET_LIGHT;
break;
default:
context->loadFlags = fcLoadFlags;

View File

@@ -60,7 +60,7 @@ class XWindow extends XBaseWindow implements X11ComponentPeer {
private static int touchBeginX = 0, touchBeginY = 0;
private static int trackingId = 0;
private static boolean isTouchScroll = false;
private static final int TOUCH_CLICK_RADIUS = 3;
private static final int TOUCH_CLICK_RADIUS = 10;
// all touch scrolls are measured in pixels
private static final int TOUCH_BEGIN = 2;
private static final int TOUCH_UPDATE = 3;
@@ -813,16 +813,13 @@ class XWindow extends XBaseWindow implements X11ComponentPeer {
isTouchScroll = false;
touchBeginX = x;
touchBeginY = y;
sendWheelEventFromTouch(dev, jWhen, modifiers, touchBeginX, touchBeginY, TOUCH_BEGIN, 1);
break;
case XConstants.XI_TouchUpdate:
if (isInsideTouchClickBoundaries(x, y)) {
if (!isTouchScroll && isInsideTouchClickBoundaries(x, y)) {
return;
}
if (!isTouchScroll) {
sendWheelEventFromTouch(dev, jWhen, modifiers, touchBeginX, touchBeginY, TOUCH_BEGIN, 1);
isTouchScroll = true;
}
isTouchScroll = true;
if (lastY - y != 0) {
sendWheelEventFromTouch(dev, jWhen, modifiers, x, y, TOUCH_UPDATE, lastY - y);
@@ -834,9 +831,8 @@ class XWindow extends XBaseWindow implements X11ComponentPeer {
}
break;
case XConstants.XI_TouchEnd:
if (isTouchScroll) {
sendWheelEventFromTouch(dev, jWhen, modifiers, x, y, TOUCH_END, 1);
} else {
sendWheelEventFromTouch(dev, jWhen, modifiers, x, y, TOUCH_END, 1);
if (!isTouchScroll) {
sendMouseEventFromTouch(dev, MouseEvent.MOUSE_PRESSED, jWhen, modifiers, touchBeginX, touchBeginY, button);
sendMouseEventFromTouch(dev, MouseEvent.MOUSE_RELEASED, jWhen, modifiers, touchBeginX, touchBeginY, button);
sendMouseEventFromTouch(dev, MouseEvent.MOUSE_CLICKED, jWhen, modifiers, touchBeginX, touchBeginY, button);

View File

@@ -54,6 +54,8 @@ import sun.awt.X11GraphicsEnvironment;
import sun.java2d.pipe.Region;
import sun.util.logging.PlatformLogger;
import sun.security.action.GetBooleanAction;
class XWindowPeer extends XPanelPeer implements WindowPeer,
DisplayChangedListener {
@@ -63,6 +65,13 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
private static final PlatformLogger grabLog = PlatformLogger.getLogger("sun.awt.X11.grab.XWindowPeer");
private static final PlatformLogger iconLog = PlatformLogger.getLogger("sun.awt.X11.icon.XWindowPeer");
// workaround for JBR-1680 (see https://youtrack.jetbrains.com/issue/JBR-1680#focus=streamItem-27-3821223.0-0)
private static final boolean X11_DISABLE_OVERRIDE_FLAG = AccessController.doPrivileged(
new GetBooleanAction("x11.disable.override.flag"));
private static final boolean X11_DISABLE_OVERRIDE_XWINDOWPEER = AccessController.doPrivileged(
new GetBooleanAction("x11.disable.override.xwindowpeer"));
// should be synchronized on awtLock
private static Set<XWindowPeer> windows = new HashSet<XWindowPeer>();
@@ -158,7 +167,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
XA_NET_WM_STATE = XAtom.get("_NET_WM_STATE");
params.put(OVERRIDE_REDIRECT, Boolean.valueOf(isOverrideRedirect()));
params.put(OVERRIDE_REDIRECT, X11_DISABLE_OVERRIDE_FLAG ? Boolean.FALSE : Boolean.valueOf(isOverrideRedirect()));
SunToolkit.awtLock();
try {
@@ -1246,6 +1255,8 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
}
boolean isOverrideRedirect() {
if (X11_DISABLE_OVERRIDE_XWINDOWPEER)
return false;
return XWM.getWMID() == XWM.OPENLOOK_WM ||
Window.Type.POPUP.equals(getWindowType());
}

View File

@@ -987,9 +987,9 @@ void AwtComponent::ReshapeNoScale(int x, int y, int w, int h)
int usrX = x;
int usrY = y;
AwtWin32GraphicsDevice* device = AwtWin32GraphicsDevice::GetDeviceByBounds(RECT_BOUNDS(x, y, w, h), GetHWnd());
x = device->ScaleUpDX(x);
y = device->ScaleUpDY(y);
AwtWin32GraphicsDevice* device = UGetDeviceByBounds(URectBounds(x, y, w, h, USER_SPACE), this);
x = device->ScaleUpX(x, RELATIVITY_FOR_COMP_XY(this));
y = device->ScaleUpY(y, RELATIVITY_FOR_COMP_XY(this));
w = device->ScaleUpX(w);
h = device->ScaleUpY(h);
@@ -1651,7 +1651,7 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
window->AwtSetActiveWindow(TRUE, LOWORD(lParam)/*hittest*/);
}
mr = mrConsume;
retValue = MA_NOACTIVATE;
retValue = AwtToolkit::GetInstance().IsActiveWindowTrackingEnabled() ? MA_ACTIVATE : MA_NOACTIVATE;
break;
}
case WM_CTLCOLORMSGBOX:
@@ -2447,15 +2447,12 @@ void AwtComponent::WmTouchHandler(const TOUCHINPUT& touchInput)
m_touchDownPoint = p;
m_lastTouchPoint = p;
m_isTouchScroll = FALSE;
SendMouseWheelEventFromTouch(p, modifiers, TOUCH_BEGIN, 1);
} else if (touchInput.dwFlags & TOUCHEVENTF_MOVE) {
if (IsInsideTouchClickBoundaries(p)) {
if (!m_isTouchScroll && IsInsideTouchClickBoundaries(p)) {
return;
}
if (!m_isTouchScroll) {
SendMouseWheelEventFromTouch(p, modifiers, TOUCH_BEGIN, 1);
m_isTouchScroll = TRUE;
}
m_isTouchScroll = TRUE;
const int deltaY = ScaleDownY(static_cast<int>(m_lastTouchPoint.y - p.y));
if (abs(deltaY) != 0) {
@@ -2470,9 +2467,9 @@ void AwtComponent::WmTouchHandler(const TOUCHINPUT& touchInput)
m_lastTouchPoint = p;
} else if (touchInput.dwFlags & TOUCHEVENTF_UP) {
if (m_isTouchScroll) {
SendMouseWheelEventFromTouch(p, modifiers, TOUCH_END, 1);
} else {
SendMouseWheelEventFromTouch(p, modifiers, TOUCH_END, 1);
if (!m_isTouchScroll) {
SendMouseEventFromTouch(java_awt_event_MouseEvent_MOUSE_PRESSED, p, modifiers);
SendMouseEventFromTouch(java_awt_event_MouseEvent_MOUSE_RELEASED, p, modifiers);
SendMouseEventFromTouch(java_awt_event_MouseEvent_MOUSE_CLICKED, p, modifiers);
@@ -4010,8 +4007,8 @@ void AwtComponent::OpenCandidateWindow(int x, int y)
}
HWND hTop = GetTopLevelParentForWindow(hWnd);
::ClientToScreen(hTop, &p);
int sx = ScaleUpDX(x) - p.x;
int sy = ScaleUpDY(y) - p.y;
int sx = ScaleUpX(x, ABSOLUTE_COORD) - p.x;
int sy = ScaleUpY(y, ABSOLUTE_COORD) - p.y;
if (!m_bitsCandType) {
SetCandidateWindow(m_bitsCandType, sx, sy);
return;
@@ -4889,7 +4886,8 @@ void AwtComponent::FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha)
}
}
int AwtComponent::ScaleUpX(int x) {
int AwtComponent::ScaleUpX(int x, const UCoordRelativity& relativity) {
if (relativity == ABSOLUTE_COORD) return ScaleUpDX(x);
int screen = AwtWin32GraphicsDevice::DeviceIndexForWindow(GetHWnd());
Devices::InstanceAccess devices;
AwtWin32GraphicsDevice* device = devices->GetDevice(screen);
@@ -4903,7 +4901,8 @@ int AwtComponent::ScaleUpDX(int x) {
return device == NULL ? x : device->ScaleUpDX(x);
}
int AwtComponent::ScaleUpY(int y) {
int AwtComponent::ScaleUpY(int y, const UCoordRelativity& relativity) {
if (relativity == ABSOLUTE_COORD) return ScaleUpDY(y);
int screen = AwtWin32GraphicsDevice::DeviceIndexForWindow(GetHWnd());
Devices::InstanceAccess devices;
AwtWin32GraphicsDevice* device = devices->GetDevice(screen);
@@ -4917,7 +4916,8 @@ int AwtComponent::ScaleUpDY(int y) {
return device == NULL ? y : device->ScaleUpDY(y);
}
int AwtComponent::ScaleDownX(int x) {
int AwtComponent::ScaleDownX(int x, const UCoordRelativity& relativity) {
if (relativity == ABSOLUTE_COORD) return ScaleDownDX(x);
int screen = AwtWin32GraphicsDevice::DeviceIndexForWindow(GetHWnd());
Devices::InstanceAccess devices;
AwtWin32GraphicsDevice* device = devices->GetDevice(screen);
@@ -4931,7 +4931,8 @@ int AwtComponent::ScaleDownDX(int x) {
return device == NULL ? x : device->ScaleDownDX(x);
}
int AwtComponent::ScaleDownY(int y) {
int AwtComponent::ScaleDownY(int y, const UCoordRelativity& relativity) {
if (relativity == ABSOLUTE_COORD) return ScaleUpDY(y);
int screen = AwtWin32GraphicsDevice::DeviceIndexForWindow(GetHWnd());
Devices::InstanceAccess devices;
AwtWin32GraphicsDevice* device = devices->GetDevice(screen);
@@ -7435,8 +7436,8 @@ void AwtComponent::VerifyState()
target = parent;
}
x = ScaleUpDX(x);
y = ScaleUpDY(y);
x = ScaleUpX(x, RELATIVITY_FOR_COMP_XY(this));
y = ScaleUpY(y, RELATIVITY_FOR_COMP_XY(this));
width = ScaleUpX(width);
height = ScaleUpY(height);

View File

@@ -32,6 +32,8 @@
#include "awt_Brush.h"
#include "awt_Pen.h"
#include "awt_Win32GraphicsDevice.h"
#include "awt_Util.h"
#include "GDIWindowSurfaceData.h"
#include "java_awt_Component.h"
@@ -736,10 +738,10 @@ public:
return m_bPauseDestroy;
}
int ScaleUpX(int x);
int ScaleUpY(int y);
int ScaleDownX(int x);
int ScaleDownY(int y);
int ScaleUpX(int x, const UCoordRelativity& relativity = RELATIVE_COORD);
int ScaleUpY(int y, const UCoordRelativity& relativity = RELATIVE_COORD);
int ScaleDownX(int x, const UCoordRelativity& relativity = RELATIVE_COORD);
int ScaleDownY(int y, const UCoordRelativity& relativity = RELATIVE_COORD);
int ScaleUpDX(int x);
int ScaleUpDY(int y);
int ScaleDownDX(int x);

View File

@@ -1543,8 +1543,8 @@ void AwtFrame::_SetMaximizedBounds(void *param)
if (::IsWindow(f->GetHWnd()))
{
DASSERT(!::IsBadReadPtr(f, sizeof(AwtFrame)));
x = f->ScaleUpDX(x);
y = f->ScaleUpDY(y);
x = f->ScaleUpX(x, ABSOLUTE_COORD);
y = f->ScaleUpY(y, ABSOLUTE_COORD);
width = f->ScaleUpX(width);
height = f->ScaleUpY(height);
f->SetMaximizedBounds(x, y, width, height);

View File

@@ -700,6 +700,13 @@ BOOL AwtToolkit::Initialize(BOOL localPump) {
tk.m_touchKbrdAutoShowIsEnabled = env->CallStaticBooleanMethod(
sunToolkitCls, isTouchKeyboardAutoShowEnabledMID);
BOOL tracking = FALSE;
int result = 0;
result = ::SystemParametersInfo(SPI_GETACTIVEWINDOWTRACKING, 0,
&tracking, 0);
tk.m_active_window_tracking_mode_enabled = (tracking && (result != 0));
CATCH_BAD_ALLOC_RET(FALSE);
if (tk.m_isWin8OrLater && tk.m_touchKbrdAutoShowIsEnabled) {
@@ -803,6 +810,10 @@ BOOL AwtToolkit::IsDynamicLayoutSet() {
return m_isDynamicLayoutSet;
}
BOOL AwtToolkit::IsActiveWindowTrackingEnabled() {
return m_active_window_tracking_mode_enabled;
}
BOOL AwtToolkit::IsDynamicLayoutSupported() {
// SPI_GETDRAGFULLWINDOWS is only supported on Win95 if
// Windows Plus! is installed. Otherwise, box frame resize.

View File

@@ -240,6 +240,7 @@ public:
void SetDynamicLayout(BOOL dynamic);
BOOL IsDynamicLayoutSet();
BOOL IsDynamicLayoutSupported();
BOOL IsActiveWindowTrackingEnabled();
BOOL IsDynamicLayoutActive();
BOOL areExtraMouseButtonsEnabled();
void setExtraMouseButtonsEnabled(BOOL enable);
@@ -477,6 +478,7 @@ private:
BOOL m_isActive; // set to FALSE at beginning of Dispose
BOOL m_isDisposed; // set to TRUE at end of Dispose
BOOL m_areExtraMouseButtonsEnabled;
BOOL m_active_window_tracking_mode_enabled;
typedef BOOL (WINAPI *RegisterTouchWindowFunc)(HWND hWnd, ULONG ulFlags);
typedef BOOL (WINAPI *GetTouchInputInfoFunc)(HTOUCHINPUT hTouchInput,

View File

@@ -0,0 +1,32 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
#include "awt_Util.h"
#include "awt_Component.h"
#include "awt_Win32GraphicsDevice.h"
#include "awt_Win32GraphicsConfig.h"
AwtWin32GraphicsDevice* UGetDeviceByBounds(const URectBounds& bounds, AwtComponent* comp)
{
URectBounds _bounds(bounds);
if (comp != NULL && !comp->IsTopLevel()) {
// use the ancestor window to match the device
_bounds = UGetWindowRectBounds(::GetAncestor(comp->GetHWnd(), GA_ROOT));
}
Devices::InstanceAccess devices;
POINT center = {_bounds.x + _bounds.width / 2, _bounds.y + _bounds.height / 2};
for (int i = 0; i < devices->GetNumDevices(); i++) {
RECT rect = AwtWin32GraphicsConfig::getMonitorBounds(i, _bounds.space);
if (::PtInRect(&rect, center)) {
return devices->GetDevice(i);
}
}
// default to the hwnd's device
return comp != NULL ? devices->GetDevice(AwtWin32GraphicsDevice::DeviceIndexForWindow(comp->GetHWnd())) : NULL;
}
URectBounds UGetWindowRectBounds(HWND hwnd)
{
RECT r;
::GetWindowRect(hwnd, &r);
return URectBounds(r.left, r.top, r.right - r.left, r.bottom - r.top, DEVICE_SPACE);
}

View File

@@ -0,0 +1,47 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
#ifndef NATIVE_AWT_UTIL_H
#define NATIVE_AWT_UTIL_H
#include <windows.h>
typedef enum {
DEVICE_SPACE,
USER_SPACE
} UCoordSpace;
typedef enum {
RELATIVE_COORD,
ABSOLUTE_COORD
} UCoordRelativity;
#define RELATIVITY_FOR_COMP_XY(compPtr) compPtr->IsTopLevel() ? ABSOLUTE_COORD : RELATIVE_COORD
typedef struct URectBounds {
int x;
int y;
int width;
int height;
UCoordSpace space;
URectBounds(int _x, int _y, int _w, int _h, const UCoordSpace& _space) : x(_x), y(_y), width(_w), height(_h), space(_space) {}
URectBounds(const URectBounds& b) : x(b.x), y(b.y), width(b.width), height(b.height), space(b.space) {}
URectBounds& operator=(const URectBounds& b) {
x = b.x;
y = b.y;
width = b.width;
height = b.height;
space = b.space;
return *this;
}
} URectBounds;
class AwtComponent;
class AwtWin32GraphicsDevice;
URectBounds UGetWindowRectBounds(HWND hwnd);
AwtWin32GraphicsDevice* UGetDeviceByBounds(const URectBounds& bounds, AwtComponent* comp = NULL);
#endif //NATIVE_AWT_UTIL_H

View File

@@ -77,7 +77,7 @@ inline int shiftToMask(int numBits, int shift) {
return mask;
}
RECT AwtWin32GraphicsConfig::getMonitorBounds(int screen)
RECT AwtWin32GraphicsConfig::getMonitorBounds(int screen, const UCoordSpace& space)
{
RECT rRW = {0, 0, 0, 0};
Devices::InstanceAccess devices;
@@ -87,9 +87,9 @@ RECT AwtWin32GraphicsConfig::getMonitorBounds(int screen)
// don't scale xy to avoid overlapping of the multi-dpi-monitors bounds in the user space
int x = rRW.left;
int y = rRW.top;
int w = (device == NULL) ? rRW.right - rRW.left
int w = (device == NULL || space == DEVICE_SPACE) ? rRW.right - rRW.left
: device->ScaleDownX(rRW.right - rRW.left);
int h = (device == NULL) ? rRW.bottom - rRW.top
int h = (device == NULL || space == DEVICE_SPACE) ? rRW.bottom - rRW.top
: device->ScaleDownY(rRW.bottom - rRW.top);
::SetRect(&rRW, x, y, x + w, y + h);
@@ -100,8 +100,8 @@ RECT AwtWin32GraphicsConfig::getMonitorBounds(int screen)
int w = ::GetSystemMetrics(SM_CXSCREEN);
int h = ::GetSystemMetrics(SM_CYSCREEN);
::SetRect(&rRW, 0, 0, device == NULL ? w : device->ScaleDownX(w),
device == NULL ? h : device->ScaleDownY(h));
::SetRect(&rRW, 0, 0, device == NULL || space == DEVICE_SPACE ? w : device->ScaleDownX(w),
device == NULL || space == DEVICE_SPACE ? h : device->ScaleDownY(h));
}
return rRW;
}
@@ -123,7 +123,7 @@ JNIEXPORT jobject JNICALL
CHECK_NULL_RETURN(clazz, NULL);
mid = env->GetMethodID(clazz, "<init>", "(IIII)V");
if (mid != 0) {
RECT r = AwtWin32GraphicsConfig::getMonitorBounds((int)screen);
RECT r = AwtWin32GraphicsConfig::getMonitorBounds((int)screen, USER_SPACE);
bounds = env->NewObject(clazz, mid, r.left, r.top, r.right - r.left, r.bottom - r.top);
if (safe_ExceptionOccurred(env)) {
return 0;

View File

@@ -27,12 +27,13 @@
#define AWT_WIN32GRAPHICSCONFIG_H
#include "awt.h"
#include "awt_Win32GraphicsDevice.h"
class AwtWin32GraphicsConfig {
public:
/* sun.awt.Win32GraphicsConfig fields and method IDs */
static jfieldID win32GCVisualID;
static RECT getMonitorBounds(int screen);
static RECT getMonitorBounds(int screen, const UCoordSpace& space);
};
#endif /* AWT_WIN32GRAPHICSCONFIG_H */

View File

@@ -631,45 +631,45 @@ void AwtWin32GraphicsDevice::SetScale(float sx, float sy)
scaleY = sy;
}
int AwtWin32GraphicsDevice::ScaleUpX(int x)
int AwtWin32GraphicsDevice::ScaleUpX(int x, const UCoordRelativity& relativity)
{
return ClipRound(x * scaleX);
return relativity == RELATIVE_COORD ? ClipRound(x * scaleX) : ScaleUpDX(x);
}
// scale up the delta [x - device.x]
int AwtWin32GraphicsDevice::ScaleUpDX(int x)
{
RECT devBounds = AwtWin32GraphicsConfig::getMonitorBounds(screen);
RECT devBounds = AwtWin32GraphicsConfig::getMonitorBounds(screen, DEVICE_SPACE);
return devBounds.left + ClipRound((x - devBounds.left) * scaleX);
}
int AwtWin32GraphicsDevice::ScaleUpY(int y)
int AwtWin32GraphicsDevice::ScaleUpY(int y, const UCoordRelativity& relativity)
{
return ClipRound(y * scaleY);
return relativity == RELATIVE_COORD ? ClipRound(y * scaleY) : ScaleUpDY(y);
}
// scale up the delta [y - device.y]
int AwtWin32GraphicsDevice::ScaleUpDY(int y)
{
RECT devBounds = AwtWin32GraphicsConfig::getMonitorBounds(screen);
RECT devBounds = AwtWin32GraphicsConfig::getMonitorBounds(screen, DEVICE_SPACE);
return devBounds.top + ClipRound((y - devBounds.top) * scaleY);
}
int AwtWin32GraphicsDevice::ScaleDownX(int x)
int AwtWin32GraphicsDevice::ScaleDownX(int x, const UCoordRelativity& relativity)
{
return ClipRound(x / scaleX);
return relativity == RELATIVE_COORD ? ClipRound(x / scaleX) : ScaleDownDX(x);
}
// scale down the delta [x - device.x]
int AwtWin32GraphicsDevice::ScaleDownDX(int x)
{
RECT devBounds = AwtWin32GraphicsConfig::getMonitorBounds(screen);
RECT devBounds = AwtWin32GraphicsConfig::getMonitorBounds(screen, USER_SPACE);
return devBounds.left + ClipRound((x - devBounds.left) / scaleX);
}
int AwtWin32GraphicsDevice::ScaleDownY(int y)
int AwtWin32GraphicsDevice::ScaleDownY(int y, const UCoordRelativity& relativity)
{
return ClipRound(y / scaleY);
return relativity == RELATIVE_COORD ? ClipRound(y / scaleY) : ScaleDownDY(y);
}
int AwtWin32GraphicsDevice::ClipRound(double value)
@@ -691,7 +691,7 @@ int AwtWin32GraphicsDevice::ClipRound(double value)
// scale down the delta [y - device.y]
int AwtWin32GraphicsDevice::ScaleDownDY(int y)
{
RECT devBounds = AwtWin32GraphicsConfig::getMonitorBounds(screen);
RECT devBounds = AwtWin32GraphicsConfig::getMonitorBounds(screen, USER_SPACE);
return devBounds.top + ClipRound((y - devBounds.top) / scaleY);
}
@@ -947,20 +947,6 @@ BOOL AwtWin32GraphicsDevice::IsUiScaleEnabled()
"()Z").z;
}
AwtWin32GraphicsDevice* AwtWin32GraphicsDevice::GetDeviceByBounds(RECT_BOUNDS bounds, HWND hwnd) // bounds in user space
{
Devices::InstanceAccess devices;
POINT center = {bounds.x + bounds.width / 2, bounds.y + bounds.height / 2};
for (int i = 0; i < devices->GetNumDevices(); i++) {
RECT rect = AwtWin32GraphicsConfig::getMonitorBounds(i); // rect in user space
if (::PtInRect(&rect, center)) {
return devices->GetDevice(i);
}
}
// default to the hwnd's device
return hwnd != NULL ? devices->GetDevice(AwtWin32GraphicsDevice::DeviceIndexForWindow(hwnd)) : NULL;
}
const DWORD REQUIRED_FLAGS = ( //Flags which must be set in
PFD_SUPPORT_GDI | //in the PixelFormatDescriptor.
PFD_DRAW_TO_WINDOW); //Used to choose the default config

View File

@@ -33,14 +33,7 @@ extern "C" {
#include "colordata.h"
#include "awt_Palette.h"
#include "Devices.h"
struct RECT_BOUNDS {
int x;
int y;
int width;
int height;
RECT_BOUNDS(int _x, int _y, int _w, int _h) : x(_x), y(_y), width(_w), height(_h) {}
};
#include "awt_Util.h"
class AwtPalette;
class Devices;
@@ -78,10 +71,10 @@ public:
void SetScale(float scaleX, float scaleY);
float GetScaleX();
float GetScaleY();
int ScaleUpX(int x);
int ScaleUpY(int y);
int ScaleDownX(int x);
int ScaleDownY(int y);
int ScaleUpX(int x, const UCoordRelativity& relativity = RELATIVE_COORD);
int ScaleUpY(int y, const UCoordRelativity& relativity = RELATIVE_COORD);
int ScaleDownX(int x, const UCoordRelativity& relativity = RELATIVE_COORD);
int ScaleDownY(int y, const UCoordRelativity& relativity = RELATIVE_COORD);
int ScaleUpDX(int x);
int ScaleUpDY(int y);
int ScaleDownDX(int x);
@@ -107,14 +100,6 @@ public:
static HDC GetDCFromScreen(int screen);
static int GetScreenFromHMONITOR(HMONITOR mon);
static BOOL IsUiScaleEnabled(); // if not, be dpi-unaware (backward compatible behaviour)
static AwtWin32GraphicsDevice* GetDeviceByBounds(RECT_BOUNDS bounds , HWND hwnd = NULL); // bounds in user space
inline static RECT_BOUNDS GetWindowRect(HWND hwnd)
{
RECT r;
::GetWindowRect(hwnd, &r);
return RECT_BOUNDS(r.left, r.top, r.right - r.left, r.bottom - r.top);
}
static int primaryIndex;
static BOOL primaryPalettized;

View File

@@ -40,6 +40,7 @@
#include "awt_IconCursor.h"
#include "ComCtl32Util.h"
#include "math.h"
#include "awt_Util.h"
#include "java_awt_Insets.h"
#include <java_awt_Container.h>
@@ -1870,8 +1871,8 @@ MsgRouting AwtWindow::WmMove(int x, int y)
jobject peer = GetPeer(env);
jobject target = env->GetObjectField(peer, AwtObject::targetID);
RECT_BOUNDS rect = AwtWin32GraphicsDevice::GetWindowRect(GetHWnd());
AwtWin32GraphicsDevice* device = AwtWin32GraphicsDevice::GetDeviceByBounds(rect, GetHWnd());
URectBounds rect = UGetWindowRectBounds(GetHWnd());
AwtWin32GraphicsDevice* device = UGetDeviceByBounds(rect, this);
int usrX = device->ScaleDownDX(rect.x);
int usrY = device->ScaleDownDY(rect.y);
@@ -1985,8 +1986,8 @@ MsgRouting AwtWindow::WmSize(UINT type, int w, int h)
BOOL insetsChanged = UpdateInsets(NULL);
int newWidth = w + m_insets.left + m_insets.right;
int newHeight = h + m_insets.top + m_insets.bottom;
RECT_BOUNDS rect = AwtWin32GraphicsDevice::GetWindowRect(GetHWnd());
AwtWin32GraphicsDevice* device = AwtWin32GraphicsDevice::GetDeviceByBounds(rect, GetHWnd());
URectBounds rect = UGetWindowRectBounds(GetHWnd());
AwtWin32GraphicsDevice* device = UGetDeviceByBounds(rect, this);
(env)->SetIntField(target, AwtComponent::widthID, device->ScaleDownX(newWidth));
(env)->SetIntField(target, AwtComponent::heightID, device->ScaleDownY(newHeight));

View File

@@ -47,11 +47,14 @@ compiler/codecache/stress/OverloadCompileQueueTest.java
compiler/codegen/Test6896617.java 8193479 generic-all
compiler/codegen/aes/TestCipherBlockChainingEncrypt.java 8219513 generic-all
compiler/compilercontrol/jcmd/ClearDirectivesFileStackTest.java 8140405 generic-all
compiler/escapeAnalysis/TestSelfArrayCopy.java 8229016 macosx-all,linux-all
compiler/intrinsics/sha/sanity/TestSHA512MultiBlockIntrinsics.java 8209459 linux-aarch64
compiler/jsr292/ContinuousCallSiteTargetChange.java 8222030 generic-all
compiler/jvmci/compilerToVM/GetFlagValueTest.java 8204459 generic-all
compiler/jvmci/compilerToVM/GetResolvedJavaTypeTest.java 8158860 generic-all
compiler/jvmci/compilerToVM/InvalidateInstalledCodeTest.java 8163894 generic-all
compiler/loopopts/SplitIfSharedFastLockBehindCastPP.java 8235762 linux-all,macosx-all
compiler/loopopts/TestDivZeroCheckControl.java 8229496 macosx-all
compiler/tiered/LevelTransitionTest.java 8067651 generic-all
compiler/types/correctness/CorrectnessTest.java 8066173 generic-all
compiler/types/correctness/OffTest.java 8066173 generic-all
@@ -73,16 +76,20 @@ gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java
gc/survivorAlignment/TestPromotionToSurvivor.java 8129886 generic-all
gc/g1/logging/TestG1LoggingFailure.java 8169634 generic-all
gc/g1/humongousObjects/TestHeapCounters.java 8178918 generic-all
gc/g1/humongousObjects/TestHumongousClassLoader.java 8225186 linux-all,windows-all
gc/metaspace/TestCapacityUntilGCWrapAround.java 8226236 windows-x86
gc/stress/gclocker/TestGCLockerWithParallel.java 8180622 generic-all
gc/stress/gclocker/TestGCLockerWithG1.java 8180622 generic-all
gc/survivorAlignment/TestPromotionFromSurvivorToTenuredAfterMinorGC.java 8177765 generic-all
gc/stress/TestJNIBlockFullGC/TestJNIBlockFullGC.java 8192647 generic-all
gc/stress/TestReclaimStringsLeaksMemory.java 8224847 generic-all
gc/stress/TestStressG1Humongous.java JBR-2062 generic-x86
#############################################################################
# :hotspot_runtime
runtime/BootstrapMethod/TestLambdaExceptionInInitializer.java 8208172 macosx-all
runtime/CompressedOops/UseCompressedOops.java 8079353 generic-all
runtime/NMT/MallocStressTest.java 8079353 generic-all
runtime/SelectionResolution/InvokeInterfaceICCE.java 8224795 generic-all
@@ -100,45 +107,45 @@ runtime/modules/ModuleStress/ModuleStressGC.java
serviceability/logging/TestQuotedLogOutputs.java 8224505 windows-all
serviceability/sa/ClhsdbAttach.java 8193639 solaris-all
serviceability/sa/ClhsdbCDSCore.java 8207832 linux-all,generic-all crash is the expected behaviour
serviceability/sa/ClhsdbAttach.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbCDSCore.java 8207832,8194687 linux-all,generic-all crash is the expected behaviour
serviceability/sa/ClhsdbCDSJstackPrintAll.java 8193639 solaris-all
serviceability/sa/ClhsdbField.java 8193639 solaris-all
serviceability/sa/ClhsdbFindPC.java 8193639 solaris-all
serviceability/sa/ClhsdbFlags.java 8193639 solaris-all
serviceability/sa/ClhsdbInspect.java 8193639 solaris-all
serviceability/sa/ClhsdbJdis.java 8193639 solaris-all
serviceability/sa/ClhsdbJhisto.java 8193639 solaris-all
serviceability/sa/ClhsdbJstack.java 8193639 solaris-all
serviceability/sa/ClhsdbLongConstant.java 8193639 solaris-all
serviceability/sa/ClhsdbPmap.java 8193639 solaris-all
serviceability/sa/ClhsdbField.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbFindPC.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbFlags.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbInspect.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbJdis.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbJhisto.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbJstack.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbLongConstant.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbPmap.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbPrintAll.java 8193639 solaris-all
serviceability/sa/ClhsdbPrintAs.java 8193639 solaris-all
serviceability/sa/ClhsdbPrintStatics.java 8193639 solaris-all
serviceability/sa/ClhsdbPstack.java 8193639 solaris-all
serviceability/sa/ClhsdbPrintAs.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbPrintStatics.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbPstack.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbRegionDetailsScanOopsForG1.java 8193639 solaris-all
serviceability/sa/ClhsdbScanOops.java 8193639 solaris-all
serviceability/sa/ClhsdbSource.java 8193639 solaris-all
serviceability/sa/ClhsdbSymbol.java 8193639 solaris-all
serviceability/sa/ClhsdbSymbolTable.java 8193639 solaris-all
serviceability/sa/ClhsdbThread.java 8193639 solaris-all
serviceability/sa/ClhsdbVmStructsDump.java 8193639 solaris-all
serviceability/sa/ClhsdbWhere.java 8193639 solaris-all
serviceability/sa/DeadlockDetectionTest.java 8193639 solaris-all
serviceability/sa/JhsdbThreadInfoTest.java 8193639 solaris-all
serviceability/sa/ClhsdbScanOops.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbSource.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbSymbol.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbSymbolTable.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbThread.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbVmStructsDump.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/ClhsdbWhere.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/DeadlockDetectionTest.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/JhsdbThreadInfoTest.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/sadebugd/SADebugDTest.java 8163805 generic-all
serviceability/sa/TestClassDump.java 8193639 solaris-all
serviceability/sa/TestCpoolForInvokeDynamic.java 8193639 solaris-all
serviceability/sa/TestDefaultMethods.java 8193639 solaris-all
serviceability/sa/TestG1HeapRegion.java 8193639 solaris-all
serviceability/sa/TestHeapDumpForInvokeDynamic.java 8193639 solaris-all
serviceability/sa/TestHeapDumpForLargeArray.java 8193639 solaris-all
serviceability/sa/TestInstanceKlassSizeForInterface.java 8193639 solaris-all
serviceability/sa/TestIntConstant.java 8193639 solaris-all
serviceability/sa/TestJhsdbJstackLock.java 8193639 solaris-all
serviceability/sa/TestRevPtrsForInvokeDynamic.java 8191270 generic-all
serviceability/sa/TestType.java 8193639 solaris-all
serviceability/sa/TestUniverse.java#id0 8193639 solaris-all
serviceability/sa/TestClassDump.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/TestCpoolForInvokeDynamic.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/TestDefaultMethods.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/TestG1HeapRegion.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/TestHeapDumpForInvokeDynamic.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/TestHeapDumpForLargeArray.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/TestInstanceKlassSizeForInterface.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/TestIntConstant.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/TestJhsdbJstackLock.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/TestRevPtrsForInvokeDynamic.java 8191270,8194687 generic-all
serviceability/sa/TestType.java 8193639,8194687 solaris-all,windows-x86
serviceability/sa/TestUniverse.java#id0 8193639,8194687 solaris-all,windows-x86
#############################################################################
@@ -152,6 +159,9 @@ serviceability/sa/TestUniverse.java#id0
#############################################################################
vmTestbase/nsk/monitoring/GarbageCollectorMXBean/CollectionCounters/CollectionCounters001/CollectionCounters001.java JBR-2062 generic-x86
vmTestbase/nsk/monitoring/GarbageCollectorMXBean/CollectionCounters/CollectionCounters002/TestDescription.java JBR-2062 generic-x86
vmTestbase/nsk/monitoring/GarbageCollectorMXBean/CollectionCounters/CollectionCounters003/TestDescription.java JBR-2062 generic-x86
vmTestbase/nsk/monitoring/MemoryPoolMBean/isCollectionUsageThresholdExceeded/isexceeded003/TestDescription.java 8153598 generic-all
vmTestbase/nsk/monitoring/MemoryPoolMBean/isUsageThresholdExceeded/isexceeded001/TestDescription.java 8198668 generic-all
vmTestbase/nsk/monitoring/MemoryPoolMBean/isUsageThresholdExceeded/isexceeded002/TestDescription.java 8153598 generic-all

View File

@@ -0,0 +1,62 @@
/*
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import java.awt.EventQueue;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Robot;
import java.awt.event.KeyEvent;
/**
* @test
* @key headful
* @bug 8234522
* @requires (os.family == "mac")
*/
public final class MacOSGoToFolderCrash {
public static void main(final String[] args) throws Exception {
EventQueue.invokeLater(() -> {
FileDialog fd = new FileDialog((Frame) null);
fd.setVisible(true);
});
Robot robot = new Robot();
robot.setAutoDelay(400);
robot.waitForIdle();
// "⌘+Shift+G" Open "Go To Folder" window
robot.keyPress(KeyEvent.VK_META);
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_G);
robot.keyRelease(KeyEvent.VK_G);
robot.keyRelease(KeyEvent.VK_SHIFT);
robot.keyRelease(KeyEvent.VK_META);
// Select something
robot.keyPress(KeyEvent.VK_DOWN);
robot.keyRelease(KeyEvent.VK_DOWN);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
// Close File dialog
robot.keyPress(KeyEvent.VK_ESCAPE);
robot.keyRelease(KeyEvent.VK_ESCAPE);
}
}

View File

@@ -137,7 +137,7 @@ java/awt/Component/SetEnabledPerformance/SetEnabledPerformance.java
java/awt/Debug/DumpOnKey/DumpOnKey.java 8202667 windows-all,linux-all
java/awt/Dialog/DialogAboveFrame/DialogAboveFrame.java 8214923 windows-all,macosx-all
java/awt/Dialog/DialogAboveFrame/DialogAboveFrameTest.java 8215105 macosx-all,windows-all
java/awt/Dialog/NestedDialogs/Modeless/NestedModelessDialogTest.java 8225790 linux-all
java/awt/Dialog/NestedDialogs/Modeless/NestedModelessDialogTest.java 8225790 linux-all,windows-x86
java/awt/Dialog/SiblingChildOrder/SiblingChildOrderTest.java 8215105,8221383 macosx-all,windows-all
java/awt/EmbeddedFrame/EmbeddedFrameGrabTest/EmbeddedFrameGrabTest.java 8159069 windows-all
java/awt/EventDispatchThread/HandleExceptionOnEDT/HandleExceptionOnEDT.java 8203047 macosx-all,linux-all,windows-all
@@ -197,6 +197,7 @@ java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java
java/awt/FontMetrics/FontCrash.java 8198336 windows-all
java/awt/FontMetrics/MaxAdvanceIsMax.java 8221304 solaris-all,macosx-all
java/awt/Frame/DisposeParentGC/DisposeParentGC.java 8079786,8055833 macosx-all,linux-all
java/awt/Frame/DisposeStressTest/DisposeStressTest.html JBR-1905 macosx-all
java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java 8198237 macosx-all
java/awt/Frame/FramesGC/FramesGC.java 8079069 macosx-all
java/awt/Frame/FrameLocation/FrameLocation.java 8019803 macosx-all
@@ -206,6 +207,7 @@ java/awt/Frame/MaximizedUndecorated/MaximizedUndecorated.java
java/awt/Frame/MiscUndecorated/RepaintTest.java 8079267 windows-all,linux-all
java/awt/Frame/SetMaximizedBounds/SetMaximizedBounds.java 8196006 macosx-all,windows-all
java/awt/Frame/ShapeNotSetSometimes/ShapeNotSetSometimes.java 8144030 macosx-all,linux-all,windows-all
java/awt/Frame/ShownOffScreenOnWin98/ShownOffScreenOnWin98Test.java 8214505 linux-all
java/awt/Frame/UnfocusableMaximizedFrameResizablity/UnfocusableMaximizedFrameResizablity.java 8208290 macosx-all
java/awt/Frame/WindowDragTest/WindowDragTest.java 8169470 generic-all
java/awt/FullScreen/8013581/bug8013581.java 8169471 macosx-all,windows-all,linux-all
@@ -282,7 +284,7 @@ java/awt/Mixing/AWT_Mixing/MixingPanelsResizing.java
java/awt/Mixing/AWT_Mixing/OpaqueOverlapping.java 8194045 generic-all
java/awt/Mixing/AWT_Mixing/OpaqueOverlappingChoice.java 8048171 generic-all
java/awt/Mixing/AWT_Mixing/ViewportOverlapping.java 8194045 generic-all
java/awt/Mixing/MixingOnDialog.java 7124549 macosx-all,windows-all
java/awt/Mixing/MixingOnDialog.java 7124549,8225777 macosx-all,windows-all,linux-all
java/awt/Mixing/MixingOnShrinkingHWButton.java 7124549 macosx-all,windows-all
java/awt/Mixing/NonOpaqueInternalFrame.java 7124549 macosx-all,windows-all
java/awt/Mixing/OpaqueTest.java 7124549,8169457 macosx-all,windows-all,linux-all
@@ -568,6 +570,7 @@ java/awt/TextArea/AutoScrollOnSelectAndAppend/AutoScrollOnSelectAndAppend.java
java/awt/TextArea/DisposeTest/TestDispose.java JBR-1905 generic-all
java/awt/TextArea/TextAreaScrolling/TextAreaScrolling.java 8196300 windows-all
java/awt/TextField/SelectionInvisibleTest/SelectionInvisibleTest.java 8169533 macosx-all,windows-all
java/awt/TextField/DisposeTest/TestDispose.java JBR-1905 macosx-all
java/awt/Toolkit/DesktopProperties/rfe4758438.java 8193547 linux-all
java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java 8208514 windows-all
java/awt/Toolkit/RealSync/Test.java 6849383 generic-all
@@ -620,12 +623,13 @@ java/awt/dnd/DisposeFrameOnDragCrash/DisposeFrameOnDragTest.java
java/awt/dnd/DragInterceptorAppletTest/DragInterceptorAppletTest.html 8215538 windows-all,macosx-all,linux-all (macosx-all,linux-all: commit)
java/awt/dnd/DropTargetEnterExitTest/ExtraDragEnterTest.java 8029680 macosx-all,linux-all,windows-all
java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java 8028998,8159694 macosx-all,windows-all,linux-all
java/awt/dnd/FileListBetweenJVMsTest/FileListBetweenJVMsTest.html 7124379,7188825 macosx-all,linux-all,windows-all
java/awt/dnd/ImageTransferTest/ImageTransferTest.java 8176556 generic-all
java/awt/dnd/InterJVMGetDropSuccessTest/InterJVMGetDropSuccessTest.html
java/awt/dnd/InterJVMGetDropSuccessTest/InterJVMGetDropSuccessTest.html 8208555 windows-all
java/awt/dnd/MissingDragExitEventTest/MissingDragExitEventTest.java 8030121 macosx-all,windows-all,linux-all
java/awt/dnd/MissingEventsOnModalDialog/MissingEventsOnModalDialogTest.java 8164464 linux-all,macosx-all,windows-all
java/awt/dnd/NoFormatsCrashTest/NoFormatsCrashTest.html 8214221 windows-all,linux-all,macosx-all
java/awt/dnd/URIListBetweenJVMsTest/URIListBetweenJVMsTest.html 8171510 macosx-all
java/awt/dnd/URIListBetweenJVMsTest/URIListBetweenJVMsTest.html 8171510,7124379 macosx-all,linux-all
java/awt/dnd/URIListToFileListBetweenJVMsTest/URIListToFileListBetweenJVMsTest.html 8194947 generic-all
java/awt/event/ComponentEvent/MovedResizedTardyEventTest/MovedResizedTardyEventTest.html 6511207 generic-all
java/awt/event/HierarchyEvent/AncestorResized/AncestorResized.java 6618538 generic-all
@@ -659,7 +663,7 @@ java/awt/font/TextLayout/OSXLigatureTest.java
java/awt/font/TextLayout/TextLayoutBounds.java 8169188 generic-all
java/awt/grab/EmbeddedFrameTest1/EmbeddedFrameTest1.java 7080150 macosx-all
java/awt/grab/GrabOnUnfocusableToplevel/GrabOnUnfocusableToplevel.java 8169109 windows-all,linux-all,macosx-all
java/awt/im/memoryleak/InputContextMemoryLeakTest.java 8023814 linux-all,solaris-all
java/awt/im/memoryleak/InputContextMemoryLeakTest.java 8023814 linux-all,macosx-all,solaris-all
java/awt/image/DrawImage/IncorrectAlphaSurface2SW.java 8056077 generic-all
java/awt/image/DrawImage/IncorrectBounds.java 8169473 windows-all
java/awt/image/DrawImage/IncorrectClipXorModeSW2Surface.java 8196025 windows-all
@@ -714,6 +718,7 @@ java/beans/XMLEncoder/Test6570354.java
# jdk_lang
java/lang/String/StringRepeat.java 8221400 generic-x86
java/lang/StringCoding/CheckEncodings.sh 7008363 generic-all
java/lang/System/LoggerFinder/modules/JDKLoggerForImageTest.java nobug windows-6.1 fails on Windows 7 only
java/lang/System/LoggerFinder/modules/UnnamedLoggerForImageTest.java nobug windows-6.1 fails on Windows 7 only
@@ -973,7 +978,7 @@ javax/swing/JTree/8003830/bug8003830.java
javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java 8159131 macosx-all,windows-all,linux-all
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java 8081476 windows-all,macosx-all
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 8194128 macosx-all,linux-all,windows-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java 8198667 macosx-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java 8198667,8224876 macosx-all,linux-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java 8079254 linux-all
javax/swing/JWindow/ShapedAndTranslucentWindows/SetShapeAndClickSwing.java 8013450 macosx-all,windows-all
javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java 8024627 macosx-all,windows-all
@@ -1045,6 +1050,7 @@ javax/swing/tree/DefaultTreeCellRenderer/6225504/bug6225504.java
javax/swing/tree/DefaultTreeCellRenderer/7142955/bug7142955.java 8199076 generic-all
sanity/client/SwingSet/src/ButtonDemoScreenshotTest.java 8198920 macosx-all,linux-all,windows-all
sanity/client/SwingSet/src/GridBagLayoutDemoTest.java.GridBagLayoutDemoTest 8210302 linux-all
############################################################################
@@ -1076,6 +1082,52 @@ com/sun/jdi/RepStep.java
com/sun/jdi/GetLocalVariables4Test.sh 8067354 windows-all
com/sun/jdi/sde/SourceDebugExtensionTest.java 8158066 windows-all
com/sun/jdi/NashornPopFrameTest.java 8187143 generic-all
com/sun/jdi/ArrayLengthDumpTest.sh 8201652 windows-all
com/sun/jdi/BreakpointWithFullGC.sh 8201652 windows-all
com/sun/jdi/CatchAllTest.sh 8201652 windows-all
com/sun/jdi/CatchCaughtTest.sh 8201652 windows-all
com/sun/jdi/CatchPatternTest.sh 8201652 windows-all
com/sun/jdi/CommandCommentDelimiter.sh 8201652 windows-all
com/sun/jdi/DeferredStepTest.sh 8201652 windows-all
com/sun/jdi/DeoptimizeWalk.sh 8201652 windows-all
com/sun/jdi/EvalArgs.sh 8201652 windows-all
com/sun/jdi/EvalArraysAsList.sh 8201652 windows-all
com/sun/jdi/EvalInterfaceStatic.sh 8201652 windows-all
com/sun/jdi/GetLocalVariables3Test.sh 8201652 windows-all
com/sun/jdi/GetLocalVariables4Test.sh 8201652 windows-all
com/sun/jdi/ImmutableResourceTest.sh 8201652 windows-all
com/sun/jdi/JdbArgTest.sh 8201652 windows-all
com/sun/jdi/JdbExprTest.sh 8201652 windows-all
com/sun/jdi/JdbLockTest.sh 8201652 windows-all
com/sun/jdi/JdbMethodExitTest.sh 8201652 windows-all
com/sun/jdi/JdbMissStep.sh 8201652 windows-all
com/sun/jdi/JdbReadTwiceTest.sh 8201652 windows-all
com/sun/jdi/JdbVarargsTest.sh 8201652 windows-all
com/sun/jdi/JITDebug.sh 8201652 windows-all
com/sun/jdi/MixedSuspendTest.sh 8201652 windows-all
com/sun/jdi/NotAField.sh 8201652 windows-all
com/sun/jdi/NullLocalVariable.sh 8201652 windows-all
com/sun/jdi/PrivateTransportTest.sh 8201652 windows-all
com/sun/jdi/redefine/RedefineTest.java 8201652 windows-all
com/sun/jdi/Redefine-g.sh 8201652 windows-all
com/sun/jdi/RedefineAbstractClass.sh 8201652 windows-all
com/sun/jdi/RedefineAddPrivateMethod.sh 8201652 windows-all
com/sun/jdi/RedefineAnnotation.sh 8201652 windows-all
com/sun/jdi/RedefineChangeClassOrder.sh 8201652 windows-all
com/sun/jdi/RedefineClasses.sh 8201652 windows-all
com/sun/jdi/RedefineClearBreakpoint.sh 8201652 windows-all
com/sun/jdi/RedefineException.sh 8201652 windows-all
com/sun/jdi/RedefineFinal.sh 8201652 windows-all
com/sun/jdi/RedefineImplementor.sh 8201652 windows-all
com/sun/jdi/RedefineIntConstantToLong.sh 8201652 windows-all
com/sun/jdi/redefineMethod/RedefineTest.java 8201652 windows-all
com/sun/jdi/RedefineMulti.sh 8201652 windows-all
com/sun/jdi/RedefinePop.sh 8201652 windows-all
com/sun/jdi/RedefineStep.sh 8201652 windows-all
com/sun/jdi/RedefineTTYLineNumber.sh 8201652 windows-all
com/sun/jdi/StringConvertTest.sh 8201652 windows-all
com/sun/jdi/WatchFramePop.sh 8201652 windows-all
com/sun/jdi/ZZZcleanup.sh 8201652 windows-all
############################################################################

View File

@@ -112,11 +112,9 @@ java/awt/datatransfer/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.html
java/awt/datatransfer/SystemSelection/SystemSelectionSwingTest.java nobug linux-all
java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java nobug macosx-all,windows-all,linux-all
java/awt/dnd/DnDTestWithHIDPI/DragTestWithHIDPI.java nobug macosx-all,windows-all,linux-all
java/awt/dnd/FileListBetweenJVMsTest/FileListBetweenJVMsTest.html nobug macosx-all,linux-all,windows-all
java/awt/dnd/InterJVMGetDropSuccessTest/InterJVMGetDropSuccessTest.html nobug macosx-all,windows-all,linux-all
java/awt/dnd/RecognizedActionTest/RecognizedActionTest.java nobug macosx-all,windows-all,linux-all
java/awt/dnd/RemoveDropTargetCrashTest/RemoveDropTargetCrashTest.java nobug macosx-all,windows-all
java/awt/dnd/URIListBetweenJVMsTest/URIListBetweenJVMsTest.html nobug macosx-all,linux-all
java/awt/event/KeyEvent/AltCharAcceleratorTest/AltCharAcceleratorTest.java nobug macosx-all,windows-all,linux-all
java/awt/event/KeyEvent/DeadKey/DeadKeyMacOSXInputText.java nobug macosx-all
java/awt/event/KeyEvent/DeadKey/deadKeyMacOSX.java nobug macosx-all

View File

@@ -1,38 +0,0 @@
###Tips for compiling libraries and preparing env for test running
## Linux
prepare env for work with uinput: [group permissions](https://github.com/tuomasjjrasanen/python-uinput/issues/6#issuecomment-538710069)
```shell script
cd JetBrainsRuntime/test/jdk/jbu/native
# complile lib
gcc -shared -fPIC -I<path_to_jdk>/JetBrainsRuntime/build/linux-x86_64-normal-server-release/images/jdk/include/linux -I<path_to_jdk>/JetBrainsRuntime/build/linux-x86_64-normal-server-release/images/jdk/include touchscreen_device.c -o libtouchscreen_device.so
```
In IDEA run configurations set envvar to find libtouchscreen_device.so
```
LD_LIBRARY_PATH=<path_to_jdk>\JetBrainsRuntime\test\jdk\jbu\native
```
## Windows
prepare windows env: look for vcvarsall.bat [here](https://github.com/JetBrains/JetBrainsRuntime#windows)
```
cd JetBrainsRuntime\test\jdk\jbu\native
cl -I<path_to_jdk>\JetBrainsRuntime\build\windows-x86_64-normal-server-release\jdk\include\win32 -I<path_to_jdk>\JetBrainsRuntime\build\windows-x86_64-normal-server-release\jdk\include -MD -LD windows_touch_robot.c "<path_to_user32lib>\user32.lib" -Fewindows_touch_robot.dll
```
user32.lib is needed for WinUser.h (touch injection stuff)
In IDEA run configurations set envvar to find windows_touch_robot.dll
```
PATH="<path_to_jdk>\JetBrainsRuntime\test\jdk\jbu\native"
```
my paths are
```
user32: "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\user32.lib"
path_to_jdk: "C:\Program_Files\cygwin64\home\Denis.Konoplev"
```

View File

@@ -1,205 +0,0 @@
#include <jni.h>
#include <errno.h>
#include <fcntl.h>
#include <linux/input.h>
#include <linux/types.h>
#include <linux/uinput.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
// TODO sort includes
// TODO add casts
typedef struct {
__u16 type;
__u16 code;
__s32 value;
} TEventData;
static int set_bit(int fd, unsigned long int request, unsigned long int bit) {
return ioctl(fd, request, bit);
}
static int touch_begin(int fd, int tracking_id, int x, int y) {
struct input_event ev;
const int cnt = 7;
TEventData eventData[7] = {{EV_ABS, ABS_MT_TRACKING_ID, tracking_id},
{EV_ABS, ABS_MT_POSITION_X, x},
{EV_ABS, ABS_MT_POSITION_Y, y},
{EV_KEY, BTN_TOUCH, 1},
{EV_ABS, ABS_X, x},
{EV_ABS, ABS_Y, y},
{EV_SYN, 0, 0}};
for (int i = 0; i < cnt; i++) {
memset(&ev, 0, sizeof(struct input_event));
ev.type = eventData[i].type;
ev.code = eventData[i].code;
ev.value = eventData[i].value;
if (write(fd, &ev, sizeof(struct input_event)) < 0) {
return -1;
}
}
return 0;
}
static int touch_update(int fd, int x, int y) {
struct input_event ev;
const int cnt = 5;
TEventData eventData[5] = {{EV_ABS, ABS_MT_POSITION_X, x},
{EV_ABS, ABS_MT_POSITION_Y, y},
{EV_ABS, ABS_X, x},
{EV_ABS, ABS_Y, y},
{EV_SYN, 0, 0}};
for (int i = 0; i < cnt; i++) {
memset(&ev, 0, sizeof(struct input_event));
ev.type = eventData[i].type;
ev.code = eventData[i].code;
ev.value = eventData[i].value;
if (write(fd, &ev, sizeof(struct input_event)) < 0) {
return -1;
}
}
return 0;
}
// todo consider different name in case of multitouch
static int touch_end(int fd) {
struct input_event ev;
const int cnt = 3;
TEventData eventData[3] = {
{EV_ABS, ABS_MT_TRACKING_ID, -1}, {EV_KEY, BTN_TOUCH, 0}, {EV_SYN, 0, 0}};
for (int i = 0; i < cnt; i++) {
memset(&ev, 0, sizeof(struct input_event));
ev.type = eventData[i].type;
ev.code = eventData[i].code;
ev.value = eventData[i].value;
if (write(fd, &ev, sizeof(struct input_event)) < 0) {
return -1;
}
}
return 0;
}
/*
* Class: quality_util_TouchScreenDevice
* Method: create
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_quality_util_UnixTouchScreenDevice_create(JNIEnv *env,
jobject o,
jint width,
jint height) {
int productId = 123;
const int FAKE_VENDOR_ID = 0x453;
const int MAX_FINGER_COUNT = 9;
const int MAX_TRACKING_ID = 65535;
int fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);
if (fd < 0) {
return -1;
}
int ret_code = 0;
ret_code = set_bit(fd, UI_SET_EVBIT, EV_SYN);
ret_code = set_bit(fd, UI_SET_EVBIT, EV_KEY);
ret_code = set_bit(fd, UI_SET_KEYBIT, BTN_TOUCH);
ret_code = set_bit(fd, UI_SET_EVBIT, EV_ABS);
ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_X);
ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_Y);
ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_MT_SLOT);
ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_MT_POSITION_X);
ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_MT_POSITION_Y);
ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_MT_TRACKING_ID);
ret_code = set_bit(fd, UI_SET_PROPBIT, INPUT_PROP_DIRECT);
if (ret_code < 0) {
return -1;
}
struct uinput_user_dev virtual_touch_device;
memset(&virtual_touch_device, 0, sizeof(virtual_touch_device));
snprintf(virtual_touch_device.name, UINPUT_MAX_NAME_SIZE,
"Virtual Touch Device - %#x", productId);
virtual_touch_device.id.bustype = BUS_VIRTUAL;
virtual_touch_device.id.vendor = FAKE_VENDOR_ID;
virtual_touch_device.id.product = productId;
virtual_touch_device.id.version = 1;
virtual_touch_device.absmin[ABS_X] = 0;
virtual_touch_device.absmax[ABS_X] = width;
virtual_touch_device.absmin[ABS_Y] = 0;
virtual_touch_device.absmax[ABS_Y] = height;
virtual_touch_device.absmin[ABS_MT_SLOT] = 0;
virtual_touch_device.absmax[ABS_MT_SLOT] = MAX_FINGER_COUNT;
virtual_touch_device.absmin[ABS_MT_POSITION_X] = 0;
virtual_touch_device.absmax[ABS_MT_POSITION_X] = width;
virtual_touch_device.absmin[ABS_MT_POSITION_Y] = 0;
virtual_touch_device.absmax[ABS_MT_POSITION_Y] = height;
virtual_touch_device.absmin[ABS_MT_TRACKING_ID] = 0;
virtual_touch_device.absmax[ABS_MT_TRACKING_ID] = MAX_TRACKING_ID;
ret_code = write(fd, &virtual_touch_device, sizeof(virtual_touch_device));
ret_code = ioctl(fd, UI_DEV_CREATE);
if (ret_code < 0) {
return -1;
}
return fd;
}
/*
* Class: quality_util_TouchScreenDevice
* Method: destroy
* Signature: (I)V
*/
JNIEXPORT jint JNICALL Java_quality_util_UnixTouchScreenDevice_destroy(JNIEnv *env,
jobject o,
jint fd) {
if (ioctl(fd, UI_DEV_DESTROY) < 0) {
return -1;
}
return close(fd);
}
/*
* Class: quality_util_TouchScreenDevice
* Method: clickImpl
* Signature: (IIII)V
*/
// todo return code with checked exception
JNIEXPORT jint JNICALL Java_quality_util_UnixTouchScreenDevice_clickImpl(
JNIEnv *env, jobject o, jint fd, jint trackingId, jint x, jint y) {
touch_begin(fd, trackingId, x, y);
touch_end(fd);
return 0;
}
/*
* Class: quality_util_TouchScreenDevice
* Method: moveImpl
* Signature: (IIIIII)V
*/
JNIEXPORT jint JNICALL Java_quality_util_UnixTouchScreenDevice_moveImpl(
JNIEnv *env, jobject o, jint fd, jint trackingId, jint fromX, jint fromY,
jint toX, jint toY) {
touch_begin(fd, trackingId, fromX, fromY);
touch_update(fd, toX, toY);
touch_end(fd);
return 0;
}

View File

@@ -1,84 +0,0 @@
#include <jni.h>
#include <windows.h>
#include <WinUser.h>
POINTER_TOUCH_INFO create_touch_info()
{
POINTER_TOUCH_INFO contact;
InitializeTouchInjection(1, TOUCH_FEEDBACK_DEFAULT); // Number of contact point
memset(&contact, 0, sizeof(POINTER_TOUCH_INFO));
contact.touchFlags = TOUCH_FLAG_NONE;
contact.touchMask = TOUCH_MASK_CONTACTAREA | TOUCH_MASK_ORIENTATION | TOUCH_MASK_PRESSURE;
contact.orientation = 90; // Orientation of 90 means touching perpendicular to screen.
contact.pressure = 32000;
return contact;
}
void set_contact_area(POINTER_TOUCH_INFO *contact)
{
// 4 x 4 pixel contact area
contact->rcContact.top = contact->pointerInfo.ptPixelLocation.y - 2;
contact->rcContact.bottom = contact->pointerInfo.ptPixelLocation.y + 2;
contact->rcContact.left = contact->pointerInfo.ptPixelLocation.x - 2;
contact->rcContact.right = contact->pointerInfo.ptPixelLocation.x + 2;
}
void touchBegin(POINTER_TOUCH_INFO* contact, LONG x, LONG y)
{
contact->pointerInfo.pointerType = PT_TOUCH;
// primary finger pointerId == 0
contact->pointerInfo.pointerId = 0;
contact->pointerInfo.ptPixelLocation.x = x;
contact->pointerInfo.ptPixelLocation.y = y;
set_contact_area(contact);
contact->pointerInfo.pointerFlags = POINTER_FLAG_DOWN | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT;
InjectTouchInput(1, contact);
}
void touchUpdate(POINTER_TOUCH_INFO* contact, LONG x, LONG y)
{
contact->pointerInfo.pointerFlags = POINTER_FLAG_UPDATE | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT;
contact->pointerInfo.ptPixelLocation.x = x;
contact->pointerInfo.ptPixelLocation.y = y;
InjectTouchInput(1, contact);
}
void touchEnd(POINTER_TOUCH_INFO* contact)
{
contact->pointerInfo.pointerFlags = POINTER_FLAG_UP;
InjectTouchInput(1, contact);
}
/*
* Class: quality_util_WindowsTouchRobot
* Method: clickImpl
* Signature: (II)V
*/
JNIEXPORT void JNICALL
Java_quality_util_WindowsTouchRobot_clickImpl(JNIEnv* env, jobject o,
jint x, jint y)
{
POINTER_TOUCH_INFO contact = create_touch_info();
touchBegin(&contact, x, y);
touchEnd(&contact);
}
/*
* Class: quality_util_WindowsTouchRobot
* Method: moveImpl
* Signature: (IIII)V
*/
JNIEXPORT void JNICALL
Java_quality_util_WindowsTouchRobot_moveImpl(JNIEnv* env, jobject o,
jint fromX, jint fromY,
jint toX, jint toY)
{
POINTER_TOUCH_INFO contact = create_touch_info();
touchBegin(&contact, fromX, fromY);
touchUpdate(&contact, toX, toY);
touchEnd(&contact);
}

View File

@@ -1,338 +0,0 @@
package quality.event;
import org.apache.commons.lang3.SystemUtils;
import org.junit.Test;
import quality.util.UnixTouchRobot;
import quality.util.TouchRobot;
import quality.util.WindowsTouchRobot;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class TouchScreenEventsTest {
static final int TIMEOUT = 2;
// TODO make this constants accessible within jdk
static final int TOUCH_BEGIN = 2;
static final int TOUCH_UPDATE = 3;
static final int TOUCH_END = 4;
@Test
public void testTouchClick() throws Exception {
runTest(new TouchClickSuite());
}
@Test
public void testTouchMove() throws Exception {
runTest(new TouchMoveSuite());
}
@Test
public void testTouchTinyMove() throws Exception {
runTest(new TouchTinyMoveSuite());
}
@Test
public void testTouchHorizontalScroll() throws Exception {
runTest(new TouchAxesScrollSuite(TouchAxesScrollSuite.AXIS.X));
}
@Test
public void testTouchVerticalScroll() throws Exception {
runTest(new TouchAxesScrollSuite(TouchAxesScrollSuite.AXIS.Y));
}
private static void runTest(TouchTestSuite suite) throws Exception {
GUI gui = new GUI();
try {
TouchRobot robot = getTouchRobot();
SwingUtilities.invokeAndWait(gui::createAndShow);
suite.addListener(gui.frame);
robot.waitForIdle();
suite.perform(gui, robot);
robot.waitForIdle();
suite.passed();
} finally {
SwingUtilities.invokeLater(() -> {
if (gui.frame != null) {
gui.frame.dispose();
}
});
}
}
private static TouchRobot getTouchRobot() throws IOException, AWTException {
if (SystemUtils.IS_OS_UNIX) {
return new UnixTouchRobot();
} else if (SystemUtils.IS_OS_WINDOWS) {
return new WindowsTouchRobot();
}
throw new RuntimeException("Touch robot for this platform isn't implemented");
}
}
class GUI {
JFrame frame;
Rectangle frameBounds;
void createAndShow() {
frame = new JFrame();
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frameBounds = frame.getBounds();
}
}
interface TouchTestSuite {
void perform(GUI gui, TouchRobot robot) throws IOException;
void passed() throws InterruptedException;
void addListener(JFrame frame);
}
class TouchClickSuite implements MouseListener, TouchTestSuite {
private volatile boolean pressed;
private volatile boolean released;
private volatile boolean clicked;
private final CountDownLatch latch = new CountDownLatch(3);
@Override
public void mouseClicked(MouseEvent e) {
if (!clicked) {
clicked = true;
latch.countDown();
}
}
@Override
public void mousePressed(MouseEvent e) {
pressed = true;
if (!pressed) {
pressed = true;
latch.countDown();
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (!released) {
released = true;
latch.countDown();
}
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void perform(GUI gui, TouchRobot robot) throws IOException {
int x = gui.frameBounds.x + gui.frameBounds.width / 2;
int y = gui.frameBounds.y + gui.frameBounds.height / 2;
robot.touchClick(42, x, y);
}
@Override
public void passed() throws InterruptedException {
latch.await(TouchScreenEventsTest.TIMEOUT, TimeUnit.SECONDS);
if (!pressed || !released || !clicked) {
String error = (pressed ? "" : "pressed: " + pressed) +
(released ? "" : ", released: " + released) +
(clicked ? "" : ", clicked: " + clicked);
throw new RuntimeException("Touch click failed: " + error);
}
}
@Override
public void addListener(JFrame frame) {
frame.addMouseListener(this);
}
}
class TouchMoveSuite implements MouseWheelListener, TouchTestSuite {
private volatile boolean begin;
private volatile boolean update;
private volatile boolean end;
private final CountDownLatch latch = new CountDownLatch(3);
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if (e.getScrollType() == TouchScreenEventsTest.TOUCH_BEGIN) {
if (!begin) {
begin = true;
latch.countDown();
}
} else if (e.getScrollType() == TouchScreenEventsTest.TOUCH_UPDATE) {
if (!update) {
update = true;
latch.countDown();
}
} else if (e.getScrollType() == TouchScreenEventsTest.TOUCH_END) {
if (!end) {
end = true;
latch.countDown();
}
}
}
@Override
public void perform(GUI gui, TouchRobot robot) throws IOException {
int x1 = gui.frameBounds.x + gui.frameBounds.width / 4;
int y1 = gui.frameBounds.y + gui.frameBounds.height / 4;
int x2 = gui.frameBounds.x + gui.frameBounds.width / 2;
int y2 = gui.frameBounds.y + gui.frameBounds.height / 2;
robot.touchMove(42, x1, y1, x2, y2);
}
@Override
public void passed() throws InterruptedException {
latch.await(TouchScreenEventsTest.TIMEOUT, TimeUnit.SECONDS);
if (!begin || !update || !end) {
String error = (begin ? "" : "begin: " + begin) +
(update ? "" : ", update: " + update) +
(end ? "" : ", end: " + end);
throw new RuntimeException("Touch move failed: " + error);
}
}
@Override
public void addListener(JFrame frame) {
frame.addMouseWheelListener(this);
}
}
class TouchTinyMoveSuite implements MouseWheelListener, MouseListener, TouchTestSuite {
private volatile boolean scroll;
private volatile boolean click;
private final CountDownLatch latch = new CountDownLatch(1);
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if (e.getScrollType() == TouchScreenEventsTest.TOUCH_UPDATE) {
scroll = true;
latch.countDown();
}
}
@Override
public void perform(GUI gui, TouchRobot robot) throws IOException {
int x1 = gui.frameBounds.x + gui.frameBounds.width / 4;
int y1 = gui.frameBounds.y + gui.frameBounds.height / 4;
// move inside tiny area
int x2 = x1 + 1;
int y2 = y1 + 1;
robot.touchMove(42, x1, y1, x2, y2);
}
@Override
public void passed() throws InterruptedException {
latch.await(TouchScreenEventsTest.TIMEOUT, TimeUnit.SECONDS);
if (scroll || !click) {
String error = (scroll ? "scroll " + scroll : "") +
(click ? "" : ", click: " + click);
throw new RuntimeException("Tiny touch move failed: " + error);
}
}
@Override
public void addListener(JFrame frame) {
frame.addMouseWheelListener(this);
frame.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
click = true;
latch.countDown();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
class TouchAxesScrollSuite implements MouseWheelListener, TouchTestSuite {
enum AXIS {X, Y}
private final AXIS axis;
private volatile boolean vertical;
private volatile boolean horizontal;
private final CountDownLatch latch = new CountDownLatch(1);
TouchAxesScrollSuite(AXIS axis) {
this.axis = axis;
}
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if (e.getScrollType() == TouchScreenEventsTest.TOUCH_UPDATE) {
if (e.isShiftDown()) {
horizontal = true;
} else {
vertical = true;
}
latch.countDown();
}
}
@Override
public void perform(GUI gui, TouchRobot robot) throws IOException {
int x1 = gui.frameBounds.x + gui.frameBounds.width / 4;
int y1 = gui.frameBounds.y + gui.frameBounds.height / 4;
switch (axis) {
case X:
int x2 = gui.frameBounds.x + gui.frameBounds.width / 2;
robot.touchMove(42, x1, y1, x2, y1);
break;
case Y:
int y2 = gui.frameBounds.y + gui.frameBounds.height / 2;
robot.touchMove(42, x1, y1, x1, y2);
break;
}
}
@Override
public void passed() throws InterruptedException {
latch.await(TouchScreenEventsTest.TIMEOUT, TimeUnit.SECONDS);
String error = "horizontal " + horizontal + ", vertical: " + vertical;
switch (axis) {
case X:
if (!horizontal || vertical) {
throw new RuntimeException("Touch axes failed: " + error);
}
break;
case Y:
if (horizontal || !vertical) {
throw new RuntimeException("Touch axes failed: " + error);
}
break;
}
}
@Override
public void addListener(JFrame frame) {
frame.addMouseWheelListener(this);
}
}

View File

@@ -1,17 +0,0 @@
package quality.util;
import java.awt.*;
import java.io.IOException;
public abstract class TouchRobot extends Robot {
public TouchRobot() throws AWTException {
}
public TouchRobot(GraphicsDevice screen) throws AWTException {
super(screen);
}
public abstract void touchClick(int fingerId, int x, int y) throws IOException;
public abstract void touchMove(int fingerId, int fromX, int fromY, int toX, int toY) throws IOException;
}

View File

@@ -1,26 +0,0 @@
package quality.util;
import java.awt.*;
import java.io.IOException;
public class UnixTouchRobot extends TouchRobot {
private UnixTouchScreenDevice device;
public UnixTouchRobot() throws AWTException, IOException {
super();
device = new UnixTouchScreenDevice();
}
public UnixTouchRobot(GraphicsDevice screen) throws AWTException, IOException {
super(screen);
device = new UnixTouchScreenDevice();
}
public void touchClick(int fingerId, int x, int y) throws IOException {
device.click(fingerId, x, y);
}
public void touchMove(int fingerId, int fromX, int fromY, int toX, int toY) throws IOException {
device.move(fingerId, fromX, fromY, toX, toY);
}
}

View File

@@ -1,68 +0,0 @@
package quality.util;
import java.awt.*;
import java.io.IOException;
public class UnixTouchScreenDevice implements AutoCloseable {
// TODO add product id
private int width;
private int height;
private int fileDescriptor;
static {
System.loadLibrary("touchscreen_device");
}
public UnixTouchScreenDevice() throws IOException {
this(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
}
public UnixTouchScreenDevice(int width, int height) throws IOException {
this.width = width;
this.height = height;
fileDescriptor = create(getWidth(), getHeight());
checkCompletion(fileDescriptor,
"Failed to create virtual touchscreen device");
}
@Override
public void close() throws Exception {
checkCompletion(destroy(fileDescriptor),
"Failed to close touchscreen device");
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
public void click(int trackingId, int x, int y) throws IOException {
checkCompletion(clickImpl(fileDescriptor, trackingId, x, y),
"Failed to click on touchscreen device");
}
public void move(int trackingId, int fromX, int fromY, int toX, int toY) throws IOException {
checkCompletion(moveImpl(fileDescriptor, trackingId, fromX, fromY, toX, toY),
"Failed to move on virtual touchscreen device");
}
private void checkCompletion(int code, String errorMessage) throws IOException {
if (code < 0) {
throw new IOException(errorMessage);
}
}
private native int create(int width, int height);
private native int destroy(int fd);
private native int clickImpl(int fd, int trackingId, int x, int y);
private native int moveImpl(int fd, int trackingId, int fromX, int fromY, int toX, int toY);
}

View File

@@ -1,34 +0,0 @@
package quality.util;
import java.awt.*;
import java.io.IOException;
public class WindowsTouchRobot extends TouchRobot {
static {
System.loadLibrary("windows_touch_robot");
}
public WindowsTouchRobot() throws AWTException, IOException {
super();
}
public WindowsTouchRobot(GraphicsDevice screen) throws AWTException, IOException {
super(screen);
}
@Override
public void touchClick(int fingerId, int x, int y) throws IOException {
// TODO unused finger id cause windows use different finger id model
clickImpl(x, y);
}
@Override
public void touchMove(int fingerId, int fromX, int fromY, int toX, int toY) throws IOException {
// TODO unused finger id cause windows use different finger id model
moveImpl(fromX, fromY, toX, toY);
}
private native void clickImpl(int x, int y);
private native void moveImpl(int fromX, int fromY, int toX, int toY);
}