Compare commits

..

29 Commits

Author SHA1 Message Date
Vitaly Provodin
325f8c0d42 update exclude list on results of 21.0.2_b430.2 test runs 2024-04-15 11:15:16 +07:00
Vitaly Provodin
2e92b31fa5 Revert "JBR-6372: implement detecting of OS theme on linux"
This reverts commit 51d67613bb.
2024-04-13 07:43:44 +07:00
Dmitrii Morskii
51d67613bb JBR-6372: implement detecting of OS theme on linux 2024-04-12 18:33:56 +02:00
Dmitrii Morskii
48dee1515d JBR-6171 removing deadlock related to calling getCurrentServerTime 2024-04-12 18:23:27 +02:00
Vitaly Provodin
37c68cafd6 introduce jbMuslProblemList.txt exclude list 2024-04-11 16:35:59 +07:00
Sergei Tachenov
35da2d269e JBR-6771 BoxLayout throws mysterious NPEs due to previous exceptions
The checkRequests method only does layout initialization
if it isn't initialized already. However, when an exception
is thrown during the initialization, the layout may end up
in a half-initialized state.

Fix this by using the field that is initialized the last to check
if the layout is initialized. If that field is null, it may mean
that the layout isn't initialized or that the last attempt
failed midway. Then we try again. This attempt can,
of course, break for the same reason as the previous one,
but in that case we'll at least get a stack trace pointing
to a real cause of the error and not some mysterious NPE
that seems to be impossible from the logic.

The bug is that if we add a component that throws an exception
in one of its methods called by BoxLayout, then the layout may
end up in a half-initialized state that would mistakenly be considered
fully initialized. Then it would try to access some fields
and throw NPE with a stack trace that tells exactly nothing
about what went wrong and where.

This test checks for the presence of this bug by adding a broken
component to a BoxLayout and then un-breaking this component
and checking that an exception is thrown even though the component
is no longer broken.
2024-04-10 18:03:46 +04:00
Maxim Kartashev
035ccf385d JBR-6769 Make it possible to get info whether IDE is running in a virtual env
Added system property intellij.os.virtualization with possible values
"none", "Xen", "KVM", "VMWare", "HyperV"
2024-04-10 14:39:58 +04:00
Vitaly Provodin
d3bdc5491b update exclude list on results of 21.0.2_b427.6 test runs 2024-04-10 16:37:02 +07:00
Nikita Gubarkov
5eac943de6 JBR-6927 Safe asynchronous destruction of Metal graphics config. 2024-04-09 14:40:44 +02:00
Maxim Kartashev
c7468389dd JBR-6926 Wayland: fonts are aliased/grainy on first start 2024-04-05 13:59:41 +03:00
Maxim Kartashev
3144ad1b33 JBR-6920 Wayland: some IDEA popups positioned incorrectly 2024-04-05 11:41:15 +03:00
Alexey Ushakov
93a43e2977 JBR-6911 IDE crashes (EXC_BAD_ACCESS) after disconnecting the secondary display if a markdown file is opened (macOS Sonoma 14.4.1)
Corrected invalid usage of dealloc method, fixed memory leaks.
2024-04-05 09:36:35 +02:00
Vitaly Provodin
c0f413d150 JBR-6915 add the option -w into mkimages scripts 2024-04-04 05:54:26 +07:00
Vitaly Provodin
cbab59fafd update exclude list on results of 21.0.2_b421.1 test runs 2024-04-04 05:52:16 +07:00
Maxim Kartashev
317ec132e6 JBR-6847 Improve locking performance on Windows
Use -XX:+UnlockExperimentalVMOptions -XX:-UseCriticalSection
to revert to the old behavior
2024-03-28 21:15:06 +04:00
bourgesl
ed2fd2e1a4 8323695: RenderPerf (2D) enhancements (23.12)
(backported from commit 8b30503387)

Reviewed-by: avu, prr
2024-03-28 16:38:36 +01:00
Maxim Kartashev
1c9cb2d81c JBR-6895 Wayland: cursor changes to resize at edges even when window is maximized 2024-03-27 14:53:46 +03:00
Vitaly Provodin
f26d1e523b update exclude list on results of 21.0.2_b417.1 test runs 2024-03-27 05:20:39 +07:00
Maxim Kartashev
75a7617dd3 JBR-6884 SIGSEGV in Java_sun_java2d_wl_WLSMSurfaceData_pixelsAt 2024-03-26 15:28:44 +03:00
Volker Simonis
a946a753c2 8324241: Always record evol_method deps to avoid excessive method flushing
JBR-6826 Include JDK-8324241 in the JBR17/21 builds

Reviewed-by: eastigeevich, phh, coleenp, dlong, shade
2024-03-22 11:02:37 +03:00
Vitaly Provodin
4c8b745e4d update exclude list on results of 21.0.2_b400.1 test runs 2024-03-22 04:04:59 +07:00
Dmitrii Morskii
036ca4d18a JBR-6541 Added ability to get supported features and stylistic sets for font 2024-03-21 19:52:12 +01:00
Nikita Gubarkov
aacc225090 JBR-6723 Deal with integer overflow in DrawGlyphList with enabled subpixelResolution 2024-03-21 16:56:51 +01:00
Nikita Provotorov
5433855472 JBR-3112 Linux: Last character issue with Korean.
Only for the new mode introduced in JBR-2460 (-Djb.awt.newXimClient.preferBelowTheSpot=true): cancel text composing on each mouse press, so that preedit text stops following the caret if it's moving in response to mouse clicks.

(cherry picked from commit 156e5d9b65)
2024-03-20 20:34:54 +01:00
Maxim Kartashev
d89b396383 JBR-6448 Wayland: IDEA window looks pixelated after monitors scale was changed 2024-03-19 16:51:45 +03:00
Maxim Kartashev
241fbd07ba JBR-6814 Wayland: support sun.java2d.uiScale property 2024-03-19 16:51:45 +03:00
Nikita Provotorov
fe208fb379 JBR-3112 Linux: Last character issue with Korean.
Ignores the IM text returned from XmbLookupString/XwcLookupString if the KeyPress event which XmbResetIC was called with was synthetic and the first after a call of XmbResetIC/XwcResetIC.

(cherry picked from commit 43a9a3a17a)
2024-03-18 19:13:18 +01:00
Dominik Matta
21906cd0a9 JBR-6763 Wayland: application crashes when popup closed
Certain Wayland compositors (wlroots) invalidate xdg_surface after window with popup loses focus. Subsequent attempts to
commit the popup window fail with protocol error "xdg_surface has never been configured".

Handle popup_done event by hiding the popup window. Also emit WINDOW_CLOSING event as otherwise focus remains on the popup parent.

Co-authored-by: Maxim Kartashёv <maxim@kartashev.spb.ru>
2024-03-18 10:23:51 +04:00
Vitaly Provodin
29f7cc3c2f update exclude list on results of 21.0.2_b393.7 test runs 2024-03-15 17:19:26 +07:00
67 changed files with 1563 additions and 534 deletions

View File

@@ -126,7 +126,7 @@ $ docker run -v `pwd`../../../../:/JetBrainsRuntime -it 942ea9900054
### Ubuntu Linux
Install the necessary tools, libraries, and headers with:
```
$ sudo apt-get install autoconf make build-essential libwayland-dev libx11-dev libxext-dev libxrender-dev \
$ sudo apt-get install autoconf make build-essential libx11-dev libxext-dev libxrender-dev \
libxtst-dev libxt-dev libxrandr-dev libcups2-dev libfontconfig1-dev libasound2-dev libwayland-dev \
libxkbcommon-x11-0
```

View File

@@ -17,9 +17,11 @@ function getVersionProp() {
grep "^${1}" make/conf/version-numbers.conf | cut -d'=' -f2
}
while getopts ":i?" o; do
DISABLE_WARNINGS_AS_ERRORS=""
while getopts ":iw?" o; do
case "${o}" in
i) INC_BUILD=1 ;;
w) DISABLE_WARNINGS_AS_ERRORS="--disable-warnings-as-errors" ;;
esac
done
shift $((OPTIND-1))

View File

@@ -35,6 +35,7 @@ function do_configure {
--with-version-opt=b"$build_number" \
--with-boot-jdk="$BOOT_JDK" \
--enable-cds=yes \
$DISABLE_WARNINGS_AS_ERRORS \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \

View File

@@ -43,6 +43,7 @@ function do_configure {
--with-boot-jdk="$BOOT_JDK" \
--enable-cds=yes \
$LINUX_TARGET \
$DISABLE_WARNINGS_AS_ERRORS \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \

View File

@@ -25,6 +25,7 @@ function do_configure {
--with-boot-jdk="$BOOT_JDK" \
$STATIC_CONF_ARGS \
--enable-cds=yes \
$DISABLE_WARNINGS_AS_ERRORS \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \
|| do_exit $?

View File

@@ -38,6 +38,7 @@ function do_configure {
--with-version-opt=b"$build_number" \
--with-boot-jdk="$BOOT_JDK" \
--enable-cds=yes \
$DISABLE_WARNINGS_AS_ERRORS \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \

View File

@@ -49,6 +49,7 @@ function do_configure {
--with-nvdacontrollerclient=$NVDA_PATH \
--disable-ccache \
--enable-cds=yes \
$DISABLE_WARNINGS_AS_ERRORS \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
|| do_exit $?

View File

@@ -40,6 +40,7 @@ function do_configure {
--with-nvdacontrollerclient=$NVDA_PATH \
--disable-ccache \
--enable-cds=yes \
$DISABLE_WARNINGS_AS_ERRORS \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
|| do_exit $?

View File

@@ -36,6 +36,7 @@ function do_configure {
--with-nvdacontrollerclient=$NVDA_PATH \
--disable-ccache \
--enable-cds=yes \
$DISABLE_WARNINGS_AS_ERRORS \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
|| do_exit $?

View File

@@ -37,7 +37,10 @@
constraint) \
\
product(bool, UseOSErrorReporting, false, \
"Let VM fatal error propagate to the OS (ie. WER on Windows)")
"Let VM fatal error propagate to the OS (ie. WER on Windows)") \
\
product(bool, UseCriticalSection, true, EXPERIMENTAL, \
"Use the critical section API instead of WaitForSingleObject")
// end of RUNTIME_OS_FLAGS

View File

@@ -39,6 +39,8 @@ static INIT_ONCE initialized = INIT_ONCE_STATIC_INIT;
static int lock_count = 0;
static HANDLE lock_event;
static DWORD lock_owner = 0;
static CRITICAL_SECTION critical_section;
//
// Note that Microsoft's critical region code contains a race
@@ -52,8 +54,13 @@ static DWORD lock_owner = 0;
//
static BOOL WINAPI initialize(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context) {
lock_event = CreateEvent(nullptr, false, true, nullptr);
assert(lock_event != nullptr, "unexpected return value from CreateEvent");
if (UseCriticalSection) {
bool success = InitializeCriticalSectionAndSpinCount(&critical_section, 0x00000400);
assert(success, "unexpected return value from InitializeCriticalSectionAndSpinCount");
} else {
lock_event = CreateEvent(nullptr, false, true, nullptr);
assert(lock_event != nullptr, "unexpected return value from CreateEvent");
}
return true;
}
@@ -62,9 +69,13 @@ ThreadCritical::ThreadCritical() {
DWORD current_thread = GetCurrentThreadId();
if (lock_owner != current_thread) {
// Grab the lock before doing anything.
DWORD ret = WaitForSingleObject(lock_event, INFINITE);
assert(ret == WAIT_OBJECT_0, "unexpected return value from WaitForSingleObject");
if (UseCriticalSection) {
EnterCriticalSection(&critical_section);
} else {
// Grab the lock before doing anything.
DWORD ret = WaitForSingleObject(lock_event, INFINITE);
assert(ret == WAIT_OBJECT_0, "unexpected return value from WaitForSingleObject");
}
lock_owner = current_thread;
}
// Atomicity isn't required. Bump the recursion count.
@@ -79,8 +90,12 @@ ThreadCritical::~ThreadCritical() {
if (lock_count == 0) {
// We're going to unlock
lock_owner = 0;
// No lost wakeups, lock_event stays signaled until reset.
DWORD ret = SetEvent(lock_event);
assert(ret != 0, "unexpected return value from SetEvent");
if (UseCriticalSection) {
LeaveCriticalSection(&critical_section);
} else {
// No lost wakeups, lock_event stays signaled until reset.
DWORD ret = SetEvent(lock_event);
assert(ret != 0, "unexpected return value from SetEvent");
}
}
}

View File

@@ -149,7 +149,15 @@ class JvmtiExport : public AllStatic {
JVMTI_ONLY(_can_access_local_variables = (on != 0);)
}
inline static void set_can_hotswap_or_post_breakpoint(bool on) {
JVMTI_ONLY(_can_hotswap_or_post_breakpoint = (on != 0);)
#if INCLUDE_JVMTI
// Check that _can_hotswap_or_post_breakpoint is not reset once it
// was set to true. When _can_hotswap_or_post_breakpoint is set to true
// _all_dependencies_are_recorded is also set to true and never
// reset so we have to ensure that evol dependencies are always
// recorded from that point on.
assert(!_can_hotswap_or_post_breakpoint || on, "sanity check");
_can_hotswap_or_post_breakpoint = (on != 0);
#endif
}
inline static void set_can_walk_any_space(bool on) {
JVMTI_ONLY(_can_walk_any_space = (on != 0);)

View File

@@ -4099,21 +4099,22 @@ void VM_RedefineClasses::transfer_old_native_function_registrations(InstanceKlas
// Deoptimize all compiled code that depends on the classes redefined.
//
// If the can_redefine_classes capability is obtained in the onload
// phase then the compiler has recorded all dependencies from startup.
// In that case we need only deoptimize and throw away all compiled code
// that depends on the class.
// phase or 'AlwaysRecordEvolDependencies' is true, then the compiler has
// recorded all dependencies from startup. In that case we need only
// deoptimize and throw away all compiled code that depends on the class.
//
// If can_redefine_classes is obtained sometime after the onload
// phase then the dependency information may be incomplete. In that case
// the first call to RedefineClasses causes all compiled code to be
// thrown away. As can_redefine_classes has been obtained then
// all future compilations will record dependencies so second and
// subsequent calls to RedefineClasses need only throw away code
// that depends on the class.
// If can_redefine_classes is obtained sometime after the onload phase
// (and 'AlwaysRecordEvolDependencies' is false) then the dependency
// information may be incomplete. In that case the first call to
// RedefineClasses causes all compiled code to be thrown away. As
// can_redefine_classes has been obtained then all future compilations will
// record dependencies so second and subsequent calls to RedefineClasses
// need only throw away code that depends on the class.
//
void VM_RedefineClasses::flush_dependent_code() {
assert(SafepointSynchronize::is_at_safepoint(), "sanity check");
assert(JvmtiExport::all_dependencies_are_recorded() || !AlwaysRecordEvolDependencies, "sanity check");
DeoptimizationScope deopt_scope;

View File

@@ -399,6 +399,30 @@ void Arguments::init_system_properties() {
os::init_system_properties_values();
}
static const char * get_virtualization_type() {
VirtualizationType vrt = VM_Version::get_detected_virtualization();
if (vrt == XenHVM || vrt == XenPVHVM) {
return "Xen";
} else if (vrt == KVM) {
return "KVM";
} else if (vrt == VMWare) {
return "VMWare";
} else if (vrt == HyperV) {
return "HyperV";
} else if (vrt == HyperVRole) {
// Enables users to create and manage virtual machines (VMs) on a physical host machine,
// but doesn't mean we are running in virtual.
return "none";
}
return "none";
}
void Arguments::post_init_system_properties() {
const char *virtualization_type = get_virtualization_type();
PropertyList_add(&_system_properties, new SystemProperty("intellij.os.virtualization", virtualization_type, false));
}
// Update/Initialize System properties after JDK version number is known
void Arguments::init_version_specific_system_properties() {
enum { bufsz = 16 };

View File

@@ -460,6 +460,8 @@ class Arguments : AllStatic {
// System properties
static void init_system_properties();
static void post_init_system_properties();
// Update/Initialize System properties after JDK version number is known
static void init_version_specific_system_properties();

View File

@@ -1980,6 +1980,14 @@ const int ObjectAlignmentInBytes = 8;
"(default) disables native heap trimming.") \
range(0, UINT_MAX) \
\
product(bool, ProfileExceptionHandlers, true, \
"Profile exception handlers") \
\
product(bool, AlwaysRecordEvolDependencies, true, EXPERIMENTAL, \
"Unconditionally record nmethod dependencies on class " \
"rewriting/transformation independently of the JVMTI " \
"can_{retransform/redefine}_classes capabilities.") \
\
product(bool, AllowEnhancedClassRedefinition, false, \
"Allow enhanced class redefinition beyond swapping method " \
"bodies") \
@@ -1993,7 +2001,6 @@ const int ObjectAlignmentInBytes = 8;
"modules.") \
constraint(HotswapAgentConstraintFunc, AfterErgo)
// end of RUNTIME_FLAGS
DECLARE_FLAGS(LP64_RUNTIME_FLAGS)

View File

@@ -35,6 +35,7 @@
#include "prims/jvmtiExport.hpp"
#include "prims/methodHandles.hpp"
#include "prims/downcallLinker.hpp"
#include "runtime/arguments.hpp"
#include "runtime/globals.hpp"
#include "runtime/atomic.hpp"
#include "runtime/continuation.hpp"
@@ -115,6 +116,12 @@ void vm_init_globals() {
jint init_globals() {
management_init();
JvmtiExport::initialize_oop_storage();
#if INCLUDE_JVMTI
if (AlwaysRecordEvolDependencies) {
JvmtiExport::set_can_hotswap_or_post_breakpoint(true);
JvmtiExport::set_all_dependencies_are_recorded(true);
}
#endif
bytecodes_init();
classLoader_init1();
compilationPolicy_init();
@@ -126,6 +133,8 @@ jint init_globals() {
if (status != JNI_OK)
return status;
Arguments::post_init_system_properties();
#ifdef LEAK_SANITIZER
{
// Register the Java heap with LSan.

View File

@@ -374,7 +374,7 @@ setXICWindowFocus(XIC ic, Window w)
#define INITIAL_LOOKUP_BUF_SIZE 512
Boolean
awt_x11inputmethod_lookupString(XKeyPressedEvent *event, KeySym *keysymp)
awt_x11inputmethod_lookupString(XKeyPressedEvent *event, KeySym *keysymp, Boolean /* not used */)
{
JNIEnv *env = GetJNIEnv();
X11InputMethodData *pX11IMData = NULL;

View File

@@ -38,19 +38,17 @@ MTLGC_DestroyMTLGraphicsConfig(jlong pConfigInfo)
{
J2dTraceLn(J2D_TRACE_INFO, "MTLGC_DestroyMTLGraphicsConfig");
JNI_COCOA_ENTER(env);
[ThreadUtilities performOnMainThreadWaiting:YES block:^() {
MTLGraphicsConfigInfo *mtlinfo =
(MTLGraphicsConfigInfo *)jlong_to_ptr(pConfigInfo);
if (mtlinfo == NULL) {
J2dRlsTraceLn(J2D_TRACE_ERROR,
"MTLGC_DestroyMTLGraphicsConfig: info is null");
return;
}
MTLContext *mtlc = (MTLContext*)mtlinfo->context;
__block MTLGraphicsConfigInfo *mtlinfo = (MTLGraphicsConfigInfo *)jlong_to_ptr(pConfigInfo);
if (mtlinfo == NULL) {
J2dRlsTraceLn(J2D_TRACE_ERROR,
"MTLGC_DestroyMTLGraphicsConfig: info is null");
return;
}
__block MTLContext *mtlc = (MTLContext*)mtlinfo->context;
mtlinfo->context = nil;
[ThreadUtilities performOnMainThreadWaiting:NO block:^() {
if (mtlc != NULL) {
[mtlinfo->context release];
mtlinfo->context = nil;
[mtlc release];
}
free(mtlinfo);
}];

View File

@@ -255,8 +255,11 @@ union StateIndex {
}
- (void) dealloc {
[super dealloc];
[computeStates release];
self.library = nil;
self.shaders = nil;
self.states = nil;
[super dealloc];
}
@end

View File

@@ -605,10 +605,6 @@ MTLTR_DrawColorGlyphNoCache(MTLContext *mtlc,
return JNI_TRUE;
}
// see DrawGlyphList.c for more on this macro...
#define FLOOR_ASSIGN(l, r) \
if ((r)<0) (l) = ((int)floor(r)); else (l) = ((int)(r))
#define ADJUST_SUBPIXEL_GLYPH_POSITION(coord, res) \
if ((res) > 1) (coord) += 0.5f / ((float)(res)) - 0.5f
@@ -653,21 +649,32 @@ MTLTR_DrawGlyphList(JNIEnv *env, MTLContext *mtlc, BMTLSDOps *dstOps,
jfloat posy = NEXT_FLOAT(positions);
glyphx = glyphListOrigX + posx + ginfo->topLeftX;
glyphy = glyphListOrigY + posy + ginfo->topLeftY;
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphx, ginfo->subpixelResolutionX);
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphy, ginfo->subpixelResolutionY);
FLOOR_ASSIGN(x, glyphx);
FLOOR_ASSIGN(y, glyphy);
} else {
glyphx = glyphListOrigX + ginfo->topLeftX;
glyphy = glyphListOrigY + ginfo->topLeftY;
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphx, ginfo->subpixelResolutionX);
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphy, ginfo->subpixelResolutionY);
FLOOR_ASSIGN(x, glyphx);
FLOOR_ASSIGN(y, glyphy);
glyphListOrigX += ginfo->advanceX;
glyphListOrigY += ginfo->advanceY;
}
int rx = ginfo->subpixelResolutionX;
int ry = ginfo->subpixelResolutionY;
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphx, rx);
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphy, ry);
int subx = 0, suby = 0;
// see DrawGlyphList.c FLOOR_ASSIGN & getSubpixelGlyphImage
if (glyphx >= 0.0f && glyphy >= 0.0f) {
x = (int) glyphx;
y = (int) glyphy;
subx = ((int) (glyphx * (float) rx)) % rx;
suby = ((int) (glyphy * (float) ry)) % ry;
} else {
float fx = floor(glyphx), fy = floor(glyphy);
x = (int) fx;
y = (int) fy;
subx = (int) ((glyphx - fx) * (float) rx);
suby = (int) ((glyphy - fy) * (float) ry);
}
if (ginfo->image == NULL) {
J2dTraceLn(J2D_TRACE_INFO, "Glyph image is null");
continue;
@@ -677,13 +684,11 @@ MTLTR_DrawGlyphList(JNIEnv *env, MTLContext *mtlc, BMTLSDOps *dstOps,
J2dTraceLn1(J2D_TRACE_INFO, "rowBytes = %d", ginfo->rowBytes);
if (ginfo->format == sun_font_StrikeCache_PIXEL_FORMAT_GREYSCALE) {
// grayscale or monochrome glyph data
int rx = ginfo->subpixelResolutionX;
int ry = ginfo->subpixelResolutionY;
int subimage;
if ((rx == 1 && ry == 1) || rx <= 0 || ry <= 0) {
subimage = 0;
} else {
subimage = (jint)((glyphx - x) * rx) + (jint)((glyphy - y) * ry) * rx;
subimage = subx + suby * rx;
}
if (ginfo->width <= MTLTR_CACHE_CELL_WIDTH &&
ginfo->height <= MTLTR_CACHE_CELL_HEIGHT)

View File

@@ -60,7 +60,9 @@ public class JBRApiModule {
.service("com.jetbrains.FontExtensions")
.withStatic("getSubpixelResolution", "getSubpixelResolution", "sun.font.FontUtilities")
.withStatic("deriveFontWithFeatures", "deriveFont", "java.awt.Font")
.withStatic("getFeaturesAsString", "getFeaturesAsString", "com.jetbrains.desktop.FontExtensions")
.withStatic("getAvailableFeatures", "getAvailableFeatures", "java.awt.Font")
.service("com.jetbrains.FontOpenTypeFeatures")
.withStatic("getAvailableFeatures", "getAvailableFeatures", "java.awt.Font")
.clientProxy("java.awt.Font$Features", "com.jetbrains.FontExtensions$Features")
.service("com.jetbrains.WindowMove", "java.awt.Window$WindowMoveService")
.service("com.jetbrains.FontMetricsAccessor", "sun.font.FontDesignMetrics$Accessor")

View File

@@ -71,6 +71,7 @@ import sun.font.FontManagerFactory;
import sun.font.FontUtilities;
import sun.font.GlyphLayout;
import sun.font.StandardGlyphVector;
import sun.font.SunLayoutEngine;
import static sun.font.EAttribute.EBACKGROUND;
import static sun.font.EAttribute.EBIDI_EMBEDDING;
@@ -2732,7 +2733,16 @@ public class Font implements java.io.Serializable
return font.values != null && (font.values.getKerning() != 0);
}
/**
/**
* Returns a list of OpenType's features supported by current Font.
* Implementation of such logic goes to HarfBuzz library.
* @return list of OpenType's features concatenated to String
*/
private static Set<String> getAvailableFeatures(Font font) {
return SunLayoutEngine.getAvailableFeatures(FontUtilities.getFont2D(font));
}
/**
* Returns the logical bounds of the characters indexed in the
* specified {@link CharacterIterator} in the
* specified {@code FontRenderContext}. The logical bounds

View File

@@ -459,7 +459,8 @@ public class BoxLayout implements LayoutManager2, Serializable {
}
void checkRequests() {
if (xChildren == null || yChildren == null) {
// check yTotal, as it's assigned the last, to ensure initialization completed without exceptions:
if (yTotal == null) {
// The requests have been invalidated... recalculate
// the request information.
int n = target.getComponentCount();

View File

@@ -297,6 +297,12 @@ public class PopupFactory {
(EmbeddedFrame.getAppletIfAncestorOf(owner) != null)) {
((HeavyWeightPopup)popup).setCacheEnabled(false);
}
if (isPopupPositionedRelatively()) {
// Or else there are positioning artifacts when moving between monitors
// with a different scale and -Dsun.java2d.uiScale=N was specified.
((HeavyWeightPopup)popup).setCacheEnabled(false);
}
return popup;
}
return null;

View File

@@ -37,9 +37,12 @@ import sun.java2d.DisposerRecord;
import java.awt.geom.Point2D;
import java.lang.ref.SoftReference;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.WeakHashMap;
import java.util.stream.Collectors;
/*
* different ways to do this
@@ -90,7 +93,7 @@ import java.util.WeakHashMap;
* character.
*
* I'd expect that the majority of scripts use the default mapper for
* a particular font. Loading the hastable with 40 or so keys 30+ of
* a particular font. Loading the hashtable with 40 or so keys 30+ of
* which all map to the same object is unfortunate. It might be worth
* instead having a per-font list of 'scripts with non-default
* engines', e.g. the factory has a hashtable mapping fonts to 'script
@@ -156,7 +159,7 @@ public final class SunLayoutEngine implements LayoutEngine, LayoutEngineFactory
private static final WeakHashMap<Font2D, FaceRef> facePtr =
new WeakHashMap<>();
private long getFacePtr(Font2D font2D) {
private static long getFacePtr(Font2D font2D) {
FaceRef ref;
synchronized (facePtr) {
ref = facePtr.computeIfAbsent(font2D, FaceRef::new);
@@ -164,6 +167,12 @@ public final class SunLayoutEngine implements LayoutEngine, LayoutEngineFactory
return ref.getNativePtr();
}
public static Set<String> getAvailableFeatures(Font2D font) {
long pFace = getFacePtr(font);
return (pFace != 0) ? Arrays.stream(getFeatures(pFace)).filter(elem -> elem != null).collect(Collectors.toSet())
: Set.of();
}
public void layout(FontStrikeDesc desc, float[] mat, float ptSize, int gmask,
int baseIndex, TextRecord tr, boolean ltrDirection, Map<String, Integer> features,
Point2D.Float pt, GVData data) {
@@ -216,4 +225,6 @@ public final class SunLayoutEngine implements LayoutEngine, LayoutEngineFactory
disposeFace(facePtr);
}
}
private static native String[] getFeatures(long pFace);
}

View File

@@ -1216,10 +1216,6 @@ extern int lcdSubPixelPosSupported;
extern int useFontSmoothing;
#endif
// see DrawGlyphList.c for more on this macro...
#define FLOOR_ASSIGN(l, r) \
if ((r)<0) (l) = ((int)floor(r)); else (l) = ((int)(r))
#define ADJUST_SUBPIXEL_GLYPH_POSITION(coord, res) \
if ((res) > 1) (coord) += 0.5f / ((float)(res)) - 0.5f
@@ -1290,21 +1286,32 @@ OGLTR_DrawGlyphList(JNIEnv *env, OGLContext *oglc, OGLSDOps *dstOps,
jfloat posy = NEXT_FLOAT(positions);
glyphx = glyphListOrigX + posx + ginfo->topLeftX;
glyphy = glyphListOrigY + posy + ginfo->topLeftY;
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphx, ginfo->subpixelResolutionX);
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphy, ginfo->subpixelResolutionY);
FLOOR_ASSIGN(x, glyphx);
FLOOR_ASSIGN(y, glyphy);
} else {
glyphx = glyphListOrigX + ginfo->topLeftX;
glyphy = glyphListOrigY + ginfo->topLeftY;
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphx, ginfo->subpixelResolutionX);
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphy, ginfo->subpixelResolutionY);
FLOOR_ASSIGN(x, glyphx);
FLOOR_ASSIGN(y, glyphy);
glyphListOrigX += ginfo->advanceX;
glyphListOrigY += ginfo->advanceY;
}
int rx = ginfo->subpixelResolutionX;
int ry = ginfo->subpixelResolutionY;
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphx, rx);
ADJUST_SUBPIXEL_GLYPH_POSITION(glyphy, ry);
int subx = 0, suby = 0;
// see DrawGlyphList.c FLOOR_ASSIGN & getSubpixelGlyphImage
if (glyphx >= 0.0f && glyphy >= 0.0f) {
x = (int) glyphx;
y = (int) glyphy;
subx = ((int) (glyphx * (float) rx)) % rx;
suby = ((int) (glyphy * (float) ry)) % ry;
} else {
float fx = floor(glyphx), fy = floor(glyphy);
x = (int) fx;
y = (int) fy;
subx = (int) ((glyphx - fx) * (float) rx);
suby = (int) ((glyphy - fy) * (float) ry);
}
if (ginfo->image == NULL) {
continue;
}
@@ -1314,13 +1321,11 @@ OGLTR_DrawGlyphList(JNIEnv *env, OGLContext *oglc, OGLSDOps *dstOps,
OGLContext_InitGrayRenderHints(env, oglc);
}
// grayscale or monochrome glyph data
int rx = ginfo->subpixelResolutionX;
int ry = ginfo->subpixelResolutionY;
int subimage;
if ((rx == 1 && ry == 1) || rx <= 0 || ry <= 0) {
subimage = 0;
} else {
subimage = (jint)((glyphx - x) * rx) + (jint)((glyphy - y) * ry) * rx;
subimage = subx + suby * rx;
}
if (ginfo->width <= OGLTR_CACHE_CELL_WIDTH &&
ginfo->height <= OGLTR_CACHE_CELL_HEIGHT)

View File

@@ -222,6 +222,58 @@ JDKFontInfo*
}
static hb_tag_t *createFeatureTags(hb_face_t *face, int tag, int *count) {
*count = hb_ot_layout_table_get_feature_tags(face, tag, 0, NULL, NULL);
if (*count == 0) {
return NULL;
}
hb_tag_t *res = calloc(*count, sizeof(hb_tag_t));
if (res == NULL) {
*count = 0;
return NULL;
}
hb_ot_layout_table_get_feature_tags(face, tag, 0, (unsigned int *)count, res);
return res;
}
static void putFeatureTagsToArray(JNIEnv *env, int count, int offset,
hb_tag_t *featureTags, jobjectArray arr) {
if (featureTags == NULL) {
return;
}
char feature[sizeof(hb_tag_t) + 1] = {0};
for (int i = 0; i < count; i++) {
hb_tag_to_string(featureTags[i], feature);
(*env)->SetObjectArrayElement(env, arr, offset + i, (*env)->NewStringUTF(env, feature));
}
}
JNIEXPORT jobjectArray JNICALL Java_sun_font_SunLayoutEngine_getFeatures
(JNIEnv *env, jclass cls, jlong pFace) {
jobjectArray res;
int gposFeatureCount, gsubFeatureCount;
hb_face_t *hbface = (hb_face_t*) jlong_to_ptr(pFace);
hb_tag_t *gposFeatureTags = createFeatureTags(hbface, HB_OT_TAG_GPOS, &gposFeatureCount);
hb_tag_t *gsubFeatureTags = createFeatureTags(hbface, HB_OT_TAG_GSUB, &gsubFeatureCount);
res = (*env)->NewObjectArray(env, gposFeatureCount + gsubFeatureCount,
(*env)->FindClass(env, "java/lang/String"), NULL);
if (res) {
putFeatureTagsToArray(env, gposFeatureCount, 0, gposFeatureTags, res);
putFeatureTagsToArray(env, gsubFeatureCount, gposFeatureCount, gsubFeatureTags, res);
}
free(gposFeatureTags);
free(gsubFeatureTags);
return res;
}
JNIEXPORT jboolean JNICALL Java_sun_font_SunLayoutEngine_shape
(JNIEnv *env, jclass cls,
jobject font2D,

View File

@@ -213,6 +213,10 @@ public class XBaseWindow {
}
}
protected boolean isInitialising() {
return initialising == InitialiseState.INITIALISING;
}
public boolean checkInitialised() {
awtLock();
try {

View File

@@ -97,11 +97,68 @@ public class XInputMethod extends X11InputMethod {
@Override
public void dispatchEvent(AWTEvent e) {
if (doesSupportMovingCandidatesNativeWindow) {
if (e.getID() == MouseEvent.MOUSE_PRESSED) {
/* doesSupportMovingCandidatesNativeWindow == true means that natively the IM uses XIMPreeditPosition
* input mode (the term "input style" is used in XOrg docs).
* The main flaw of this mode is that AWT doesn't receive any information about changes in the
* currently composed preedit text. In other words, Java applications don't know whether
* composing is happening now or not and don't have a way to get the current preedit text. Therefore,
* when the caret position changes in response to mouse clicks, Swing doesn't understand that
* there's a need to discard the preedit text (because it thinks there is no any), see
* javax.swing.text.JTextComponent.ComposedTextCaret#positionCaret.
* To prevent the preedit text from following the caret when it's moved in response to mouse clicks,
* let's manually discard the preedit text here.
*/
endComposition();
}
clientComponentCaretPositionTracker.onDispatchEvent(e);
}
super.dispatchEvent(e);
}
@Override
public void endComposition() {
if (!doesSupportMovingCandidatesNativeWindow) {
// Use the old implementation if
// the IM isn't using the new mode introduced in JBR-2460 (XIMPreeditPosition)
super.endComposition();
return;
}
if (disposed) {
return;
}
String preeditText = invokeResetXIC();
needResetXIC = false;
awtLock();
try {
if (composedText != null) {
composedText = null;
// Remove any existing composed text by posting an InputMethodEvent with null composed text
postInputMethodEvent(
InputMethodEvent.INPUT_METHOD_TEXT_CHANGED,
null,
0,
null,
null,
EventQueue.getMostRecentEventTime()
);
}
if (committedText != null) {
preeditText = preeditText == null ? committedText : committedText + preeditText;
committedText = null;
}
if (preeditText != null && !preeditText.isEmpty()) {
dispatchCommittedText(preeditText);
}
} finally {
awtUnlock();
}
}
// Is called from native
private static boolean isJbNewXimClientEnabled() {

View File

@@ -119,7 +119,6 @@ import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
@@ -988,6 +987,14 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
processXkbChanges(ev);
}
if (ev.get_type() == XConstants.KeyPress) {
doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC =
mayXResetICReturnThePreeditTextViaNextKeyPressEvent &&
isKeyPressSyntetic(ev.get_xkey());
mayXResetICReturnThePreeditTextViaNextKeyPressEvent = false;
}
if (XDropTargetEventProcessor.processEvent(ev) ||
XDragSourceContextPeer.processEvent(ev)) {
continue;
@@ -1036,6 +1043,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
XBaseWindow.ungrabInput();
processException(thr);
} finally {
doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC = false;
// free event data if XGetEventData was called
XlibWrapper.XFreeEventData(getDisplay(), ev.pData);
awtUnlock();
@@ -1043,6 +1051,62 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
}
}
// ================================================================================================================
// JBR-3112 Linux: Last character issue with Korean.
// XmbResetIC/XwcResetIC are called (by sun.awt.X11InputMethodBase#endComposition) when
// the keyboard focus goes to another Java component.
// By the X11 specification, these functions must return the current preedit text. However, some
// input methods (e.g., iBus and fcitx4) don't return the preedit text, but instead send it later
// (asynchronously) via a combination of a synthetic KeyPress event + XmbLookupString applied to it.
// Not only does this behavior breaks the X11 specification,
// but it also causes the preedit text to wrongly go to the newly focused Java component rather than
// its intended target, the previously focused component for which the preedit text was originally composed.
// Thus, in order to prevent the "outdated" preedit text from going to the newly focused component, let's
// at least discard it at all.
// *How* it's done: the toolkit gets notified whenever XmbResetIC/XwcResetIC gets called and then
// discards the preedit text returned from XmbLookupString/XwcLookupString, applied to the next
// KeyPress event being dispatched.
// ================================================================================================================
private volatile boolean mayXResetICReturnThePreeditTextViaNextKeyPressEvent = false;
private boolean doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC = false;
/**
* Notifies the toolkit that XmbResetIC/XwcResetIC has recently returned null
* (likely meaning that the preedit text will be sent later via a synthetic KeyPress event,
* although the focus may have already moved to another component)
*/
public void xResetICMayReturnThePreeditTextViaNextKeyPressEvent() {
mayXResetICReturnThePreeditTextViaNextKeyPressEvent = true;
}
/**
* @return true if the composed text returned from XmbLookupString/XwcLookupString
* (see function awt_x11inputmethod_lookupString in awt_InputMethod.c), applied to the currently
* dispatched KeyEvent, must be discarded (instead of being dispatched to the focused component) ;
* false otherwise
* @see XWindow#handleKeyPress(XKeyEvent)
*/
public boolean doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC() {
assert isToolkitThread();
return doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC;
}
private static boolean isKeyPressSyntetic(XKeyEvent ev) {
assert (ev.get_type() == XConstants.KeyPress);
return ( (ev.get_root() == 0) &&
(ev.get_subwindow() == 0) &&
(ev.get_time() == 0) &&
(ev.get_x() == 0) &&
(ev.get_y() == 0) &&
(ev.get_x_root() == 0) &&
(ev.get_y_root() == 0) &&
(ev.get_state() == 0) );
}
/**
* Listener installed to detect display changes.
*/

View File

@@ -1017,7 +1017,8 @@ class XWindow extends XBaseWindow implements X11ComponentPeer {
// REMIND: need to implement looking for disabled events
private native boolean x11inputMethodLookupString(long event,
long[] keysymArray);
long[] keysymArray,
boolean keyPressContainsThePreeditTextOfLastXResetIC);
private native boolean haveCurrentX11InputMethodInstance();
@@ -1274,7 +1275,12 @@ class XWindow extends XBaseWindow implements X11ComponentPeer {
if ( //TODO check if there's an active input method instance
// without calling a native method. Is it necessary though?
haveCurrentX11InputMethodInstance()) {
if (x11inputMethodLookupString(ev.pData, keysym)) {
final boolean keyPressContainsThePreeditTextOfLastXResetIC =
Toolkit.getDefaultToolkit() instanceof XToolkit xToolkit &&
xToolkit.doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC();
if (x11inputMethodLookupString(ev.pData, keysym, keyPressContainsThePreeditTextOfLastXResetIC)) {
if (keyEventLog.isLoggable(PlatformLogger.Level.FINE)) {
keyEventLog.fine("--XWindow.java XIM did process event; return; dec keysym processed:"+(keysym[0])+
"; hex keysym processed:"+Long.toHexString(keysym[0])

View File

@@ -1287,8 +1287,10 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
@Override
void setUserTimeBeforeShowing() {
if (XWM.getWMID() == XWM.KDE2_WM && isSimpleWindow() && ((Window)target).getType() == Window.Type.POPUP) {
if (XWM.getWMID() == XWM.KDE2_WM && isSimpleWindow() && ((Window)target).getType() == Window.Type.POPUP &&
!isInitialising()) {
// Workaround, to suppress blinking of taskbar icon, when hover popup is displayed for a background window
// Checking of initializing status of XBaseWindow class allows to avoid deadlock.
setUserTime(XToolkit.getCurrentServerTime(), false);
}
else if (winAttr.initialFocus || shouldSuppressWmTakeFocus()) {

View File

@@ -30,6 +30,7 @@ import java.awt.AWTException;
import java.awt.Component;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.event.InputMethodEvent;
import java.awt.font.TextAttribute;
@@ -37,10 +38,6 @@ import java.awt.font.TextHitInfo;
import java.awt.im.InputMethodHighlight;
import java.awt.im.spi.InputMethodContext;
import java.awt.peer.ComponentPeer;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.lang.Character.Subset;
import java.lang.ref.WeakReference;
import java.text.AttributedCharacterIterator;
@@ -49,9 +46,8 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.regex.Pattern;
import sun.awt.X11.XToolkit;
import sun.awt.im.InputMethodAdapter;
import sun.util.logging.PlatformLogger;
@@ -256,7 +252,7 @@ public abstract class X11InputMethodBase extends InputMethodAdapter {
*/
if (needResetXIC && haveActiveClient() &&
getClientComponent() != needResetXICClient.get()){
resetXIC();
invokeResetXIC();
// needs to reset the last xic focused component.
lastXICFocussedComponent = null;
@@ -311,7 +307,7 @@ public abstract class X11InputMethodBase extends InputMethodAdapter {
lastXICFocussedComponent = null;
isLastXICActive = false;
resetXIC();
invokeResetXIC();
needResetXICClient.clear();
needResetXIC = false;
}
@@ -370,7 +366,7 @@ public abstract class X11InputMethodBase extends InputMethodAdapter {
// method could get the input focus.
disableInputMethod();
if (needResetXIC) {
resetXIC();
invokeResetXIC();
needResetXICClient.clear();
needResetXIC = false;
}
@@ -472,7 +468,7 @@ public abstract class X11InputMethodBase extends InputMethodAdapter {
}
}
private void dispatchCommittedText(String str) {
protected final void dispatchCommittedText(String str) {
dispatchCommittedText(str, EventQueue.getMostRecentEventTime());
}
@@ -614,7 +610,7 @@ public abstract class X11InputMethodBase extends InputMethodAdapter {
return;
}
String text = resetXIC();
String text = invokeResetXIC();
/* needResetXIC is only set to true for active client. So passive
client should not reset the flag to false. */
if (active) {
@@ -799,6 +795,27 @@ public abstract class X11InputMethodBase extends InputMethodAdapter {
}
}
protected final String invokeResetXIC() {
if (Toolkit.getDefaultToolkit() instanceof XToolkit xToolkit) {
awtLock();
try {
final String resetResult = resetXIC();
if (resetResult == null) {
// If XmbResetIC/XwcResetIC returns null, it means one of the following:
// * There was no preedit text
// * In case of iBus/fcitx4, the preedit text is sent later to the toolkit via
// a synthetic KeyPress event + XmbLookupString/XwcLookupString applied to it
xToolkit.xResetICMayReturnThePreeditTextViaNextKeyPressEvent();
}
return resetResult;
} finally {
awtUnlock();
}
} else {
return resetXIC();
}
}
/*
* Native methods
*/
@@ -813,6 +830,7 @@ public abstract class X11InputMethodBase extends InputMethodAdapter {
protected native void disposeXIC();
/** Don't use it directly, use {@link #invokeResetXIC} instead */
private native String resetXIC();
protected native boolean setCompositionEnabledNative(boolean enable);

View File

@@ -39,7 +39,26 @@ import sun.util.logging.PlatformLogger;
import sun.util.logging.PlatformLogger.Level;
import javax.swing.SwingUtilities;
import java.awt.*;
import java.awt.AWTEvent;
import java.awt.AWTException;
import java.awt.BufferCapabilities;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.SystemColor;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.event.ComponentEvent;
import java.awt.event.FocusEvent;
import java.awt.event.InputEvent;
@@ -103,6 +122,7 @@ public class WLComponentPeer implements ComponentPeer {
int width; // protected by dataLock
int height; // protected by dataLock
int wlBufferScale; // protected by dataLock
double effectiveScale; // protected by dataLock
static {
initIDs();
@@ -118,7 +138,8 @@ public class WLComponentPeer implements ComponentPeer {
width = size.width;
height = size.height;
final WLGraphicsConfig config = (WLGraphicsConfig)target.getGraphicsConfiguration();
wlBufferScale = config.getScale();
wlBufferScale = config.getWlScale();
effectiveScale = config.getEffectiveScale();
surfaceData = config.createSurfaceData(this);
nativePtr = nativeCreateFrame();
paintArea = new WLRepaintArea();
@@ -165,7 +186,9 @@ public class WLComponentPeer implements ComponentPeer {
}
boolean isVisible() {
return visible && hasSurface();
synchronized (getStateLock()) {
return visible && hasSurface();
}
}
boolean hasSurface() {
@@ -237,12 +260,16 @@ public class WLComponentPeer implements ComponentPeer {
}
protected void wlSetVisible(boolean v) {
this.visible = v;
synchronized (getStateLock()) {
if (this.visible == v) return;
this.visible = v;
}
if (v) {
String title = getTitle();
boolean isWlPopup = targetIsWlPopup();
int thisWidth = getWidth();
int thisHeight = getHeight();
int thisWidth = javaUnitsToSurfaceUnits(getWidth());
int thisHeight = javaUnitsToSurfaceUnits(getHeight());
boolean isModal = targetIsModal();
int state = (target instanceof Frame frame)
@@ -260,13 +287,13 @@ public class WLComponentPeer implements ComponentPeer {
final Point toplevelLocation = toplevel == null
? new Point(popupParent.getX(), popupParent.getY())
: SwingUtilities.convertPoint(popupParent, 0, 0, toplevel);
final int parentX = toplevelLocation.x;
final int parentY = toplevelLocation.y;
final int parentX = javaUnitsToSurfaceUnits(toplevelLocation.x);
final int parentY = javaUnitsToSurfaceUnits(toplevelLocation.y);
// Offset must be relative to the top-left corner of the "parent".
final Point offsetFromParent = popup.getLocation();
final int offsetX = offsetFromParent.x;
final int offsetY = offsetFromParent.y;
final int offsetX = javaUnitsToSurfaceUnits(offsetFromParent.x);
final int offsetY = javaUnitsToSurfaceUnits(offsetFromParent.y);
if (popupLog.isLoggable(PlatformLogger.Level.FINE)) {
popupLog.fine("New popup: " + popup);
@@ -280,9 +307,11 @@ public class WLComponentPeer implements ComponentPeer {
thisWidth, thisHeight,
parentX + offsetX, parentY + offsetY);
} else {
int xNative = javaUnitsToSurfaceUnits(target.getX());
int yNative = javaUnitsToSurfaceUnits(target.getY());
nativeCreateWLSurface(nativePtr,
getParentNativePtr(target),
target.getX(), target.getY(),
xNative, yNative,
isModal, isMaximized, isMinimized,
title, WLToolkit.getApplicationID());
}
@@ -322,12 +351,17 @@ public class WLComponentPeer implements ComponentPeer {
|| dialog.getModalityType() == Dialog.ModalityType.TOOLKIT_MODAL);
}
void updateSurfaceData() {
SurfaceData.convertTo(WLSurfaceDataExt.class, surfaceData).revalidate(
getBufferWidth(), getBufferHeight(), getBufferScale());
updateWindowGeometry();
}
void configureWLSurface() {
if (log.isLoggable(PlatformLogger.Level.FINE)) {
log.fine(String.format("%s is configured to %dx%d with %dx scale", this, getBufferWidth(), getBufferHeight(), getBufferScale()));
}
SurfaceData.convertTo(WLSurfaceDataExt.class, surfaceData).revalidate(
getBufferWidth(), getBufferHeight(), getBufferScale());
updateSurfaceData();
}
@Override
@@ -421,7 +455,9 @@ public class WLComponentPeer implements ComponentPeer {
// the location will be updated in notifyConfigured() following
// the xdg_popup::repositioned event
} else {
performLocked(() -> WLRobotPeer.setLocationOfWLSurface(getWLSurface(nativePtr), newX, newY));
int newXNative = javaUnitsToSurfaceUnits(newX);
int newYNative = javaUnitsToSurfaceUnits(newY);
performLocked(() -> WLRobotPeer.setLocationOfWLSurface(getWLSurface(nativePtr), newXNative, newYNative));
}
}
@@ -436,9 +472,7 @@ public class WLComponentPeer implements ComponentPeer {
log.fine(String.format("%s is resizing its buffer to %dx%d with %dx scale",
this, getBufferWidth(), getBufferHeight(), getBufferScale()));
}
SurfaceData.convertTo(WLSurfaceDataExt.class, surfaceData).revalidate(
getBufferWidth(), getBufferHeight(), getBufferScale());
updateWindowGeometry();
updateSurfaceData();
layout();
WLToolkit.postEvent(new ComponentEvent(getTarget(), ComponentEvent.COMPONENT_RESIZED));
@@ -467,8 +501,10 @@ public class WLComponentPeer implements ComponentPeer {
final Point toplevelLocation = toplevel == null
? new Point(popupParent.getX(), popupParent.getY())
: SwingUtilities.convertPoint(popupParent, 0, 0, toplevel);
final int parentX = toplevelLocation.x;
final int parentY = toplevelLocation.y;
final int parentX = javaUnitsToSurfaceUnits(toplevelLocation.x);
final int parentY = javaUnitsToSurfaceUnits(toplevelLocation.y);
int newXNative = javaUnitsToSurfaceUnits(newX);
int newYNative = javaUnitsToSurfaceUnits(newY);
if (popupLog.isLoggable(Level.FINE)) {
popupLog.fine("Repositioning popup: " + popup);
popupLog.fine("\tparent:" + popupParent);
@@ -476,7 +512,7 @@ public class WLComponentPeer implements ComponentPeer {
popupLog.fine("\toffset of anchor from toplevel: " + toplevelLocation);
popupLog.fine("\toffset from anchor: " + newX + ", " + newY);
}
nativeRepositionWLPopup(nativePtr, thisWidth, thisHeight, parentX + newX, parentY + newY);
nativeRepositionWLPopup(nativePtr, thisWidth, thisHeight, parentX + newXNative, parentY + newYNative);
} );
}
@@ -499,16 +535,16 @@ public class WLComponentPeer implements ComponentPeer {
}
}
private int toBufferUnits(int x) {
return x * getBufferScale();
}
public int getBufferWidth() {
return toBufferUnits(getWidth());
synchronized (dataLock) {
return (int)(width * effectiveScale);
}
}
public int getBufferHeight() {
return toBufferUnits(getHeight());
synchronized (dataLock) {
return (int)(height * effectiveScale);
}
}
public Rectangle getBufferBounds() {
@@ -523,10 +559,14 @@ public class WLComponentPeer implements ComponentPeer {
// user's perspective. Client-side decorations often have invisible
// portions like drop-shadows which should be ignored for the
// purposes of aligning, placing and constraining windows"
final Rectangle visibleBounds = getVisibleBounds();
Rectangle nativeVisibleBounds = getVisibleBounds();
nativeVisibleBounds.x = javaUnitsToSurfaceUnits(nativeVisibleBounds.x);
nativeVisibleBounds.y = javaUnitsToSurfaceUnits(nativeVisibleBounds.y);
nativeVisibleBounds.width = javaUnitsToSurfaceUnits(nativeVisibleBounds.width);
nativeVisibleBounds.height = javaUnitsToSurfaceUnits(nativeVisibleBounds.height);
performLocked(() -> nativeSetWindowGeometry(nativePtr,
visibleBounds.x, visibleBounds.y,
visibleBounds.width, visibleBounds.height));
nativeVisibleBounds.x, nativeVisibleBounds.y,
nativeVisibleBounds.width, nativeVisibleBounds.height));
}
public void coalescePaintEvent(PaintEvent e) {
@@ -559,10 +599,10 @@ public class WLComponentPeer implements ComponentPeer {
try {
return WLRobotPeer.getLocationOfWLSurface(wlSurfacePtr);
} catch (UnsupportedOperationException ignore) {
return new Point(0, 0);
return new Point();
}
} else {
throw new UnsupportedOperationException("getLocationOnScreen() not supported without wayland surface");
return new Point();
}
}, Point::new);
}
@@ -690,17 +730,23 @@ public class WLComponentPeer implements ComponentPeer {
}
void setMinimumSizeTo(Dimension minSize) {
Dimension constrainedSize = constrainSize(minSize);
performLocked(() -> nativeSetMinimumSize(nativePtr, constrainedSize.width, constrainedSize.height));
Dimension nativeSize = constrainSize(minSize);
nativeSize.width = javaUnitsToSurfaceUnits(nativeSize.width);
nativeSize.height = javaUnitsToSurfaceUnits(nativeSize.height);
performLocked(() -> nativeSetMinimumSize(nativePtr, nativeSize.width, nativeSize.height));
}
void setMaximumSizeTo(Dimension maxSize) {
Dimension constrainedSize = constrainSize(maxSize);
performLocked(() -> nativeSetMaximumSize(nativePtr, constrainedSize.width, constrainedSize.height));
Dimension nativeSize = constrainSize(maxSize);
nativeSize.width = javaUnitsToSurfaceUnits(nativeSize.width);
nativeSize.height = javaUnitsToSurfaceUnits(nativeSize.height);
performLocked(() -> nativeSetMaximumSize(nativePtr, nativeSize.width, nativeSize.height));
}
void showWindowMenu(int x, int y) {
performLocked(() -> nativeShowWindowMenu(nativePtr, x, y));
int xNative = javaUnitsToSurfaceUnits(x);
int yNative = javaUnitsToSurfaceUnits(y);
performLocked(() -> nativeShowWindowMenu(nativePtr, xNative, yNative));
}
@Override
@@ -781,7 +827,7 @@ public class WLComponentPeer implements ComponentPeer {
WLComponentPeer peer = inputState.getPeer();
if (peer == null) return;
Cursor cursor = peer.getCursor(inputState.getPointerX(), inputState.getPointerY());
setCursor(cursor, getGraphicsDevice() != null ? getGraphicsDevice().getScale() : 1);
setCursor(cursor, getGraphicsDevice() != null ? getGraphicsDevice().getWlScale() : 1);
}
Cursor getCursor(int x, int y) {
@@ -892,17 +938,18 @@ public class WLComponentPeer implements ComponentPeer {
@Override
public boolean updateGraphicsData(GraphicsConfiguration gc) {
final int newScale = ((WLGraphicsConfig)gc).getScale();
final int newWlScale = ((WLGraphicsConfig)gc).getWlScale();
WLGraphicsDevice gd = ((WLGraphicsConfig) gc).getDevice();
gd.addWindow(this);
synchronized (dataLock) {
if (newScale != wlBufferScale) {
wlBufferScale = newScale;
if (newWlScale != wlBufferScale) {
wlBufferScale = newWlScale;
effectiveScale = ((WLGraphicsConfig)gc).getEffectiveScale();
if (log.isLoggable(PlatformLogger.Level.FINE)) {
log.fine(String.format("%s is updating buffer to %dx%d with %dx scale", this, getBufferWidth(), getBufferHeight(), wlBufferScale));
}
SurfaceData.convertTo(WLSurfaceDataExt.class, surfaceData).revalidate(
getBufferWidth(), getBufferHeight(), wlBufferScale);
updateSurfaceData();
postPaintEvent();
}
}
@@ -1124,7 +1171,37 @@ public class WLComponentPeer implements ComponentPeer {
performLocked(() -> nativeStartResize(nativePtr, edges));
}
void notifyConfigured(int newX, int newY, int newWidth, int newHeight, boolean active, boolean maximized) {
/**
* Converts a value in the Wayland surface-local coordinate system
* into the Java coordinate system.
*/
int surfaceUnitsToJavaUnits(int value) {
if (!WLGraphicsEnvironment.isDebugScaleEnabled()) {
return value;
} else {
synchronized (dataLock) {
return (int)(value * wlBufferScale / effectiveScale);
}
}
}
/**
* Converts a value in the Java coordinate system into the Wayland
* surface-local coordinate system.
*/
int javaUnitsToSurfaceUnits(int value) {
if (!WLGraphicsEnvironment.isDebugScaleEnabled()) {
return value;
} else {
synchronized (dataLock) {
return (int)(value * effectiveScale / wlBufferScale);
}
}
}
void notifyConfigured(int newXNative, int newYNative, int newWidthNative, int newHeightNative, boolean active, boolean maximized) {
int newWidth = surfaceUnitsToJavaUnits(newWidthNative);
int newHeight = surfaceUnitsToJavaUnits(newHeightNative);
final long wlSurfacePtr = getWLSurface(nativePtr);
if (!surfaceAssigned) {
SurfaceData.convertTo(WLSurfaceDataExt.class, surfaceData).assignSurface(wlSurfacePtr);
@@ -1137,6 +1214,8 @@ public class WLComponentPeer implements ComponentPeer {
boolean isWlPopup = targetIsWlPopup();
if (isWlPopup) { // Only popups provide (relative) location
int newX = surfaceUnitsToJavaUnits(newXNative);
int newY = surfaceUnitsToJavaUnits(newYNative);
setLocationTo(newX, newY);
}
@@ -1159,7 +1238,7 @@ public class WLComponentPeer implements ComponentPeer {
}
void notifyEnteredOutput(int wlOutputID) {
// Called from native code whenever the corresponding wl_surface enters a new output
// NB: May also be called from native code whenever the corresponding wl_surface enters a new output
synchronized (devices) {
final WLGraphicsEnvironment ge = (WLGraphicsEnvironment)WLGraphicsEnvironment.getLocalGraphicsEnvironment();
final WLGraphicsDevice gd = ge.notifySurfaceEnteredOutput(this, wlOutputID);
@@ -1194,6 +1273,13 @@ public class WLComponentPeer implements ComponentPeer {
checkIfOnNewScreen();
}
void notifyPopupDone() {
assert(targetIsWlPopup());
setVisible(false);
// TODO: may need a better way of notifying interested components about popup disappearance
WLToolkit.postEvent(new WindowEvent((Window) target, WindowEvent.WINDOW_CLOSING));
}
private WLGraphicsDevice getGraphicsDevice() {
int scale = 0;
WLGraphicsDevice theDevice = null;
@@ -1204,8 +1290,8 @@ public class WLComponentPeer implements ComponentPeer {
// Wayland's output and are removed as soon as we have left.
synchronized (devices) {
for (WLGraphicsDevice gd : devices) {
if (gd.getScale() > scale) {
scale = gd.getScale();
if (gd.getWlScale() > scale) {
scale = gd.getWlScale();
theDevice = gd;
}
}
@@ -1221,6 +1307,11 @@ public class WLComponentPeer implements ComponentPeer {
if (log.isLoggable(Level.FINE)) {
log.fine(this + " is on (possibly) new device " + newDevice);
}
var oldDevice = (WLGraphicsDevice) target.getGraphicsConfiguration().getDevice();
if (oldDevice != newDevice) {
oldDevice.removeWindow(this);
newDevice.addWindow(this);
}
performUnlocked(() -> {
var acc = AWTAccessor.getComponentAccessor();
acc.setGraphicsConfiguration(target, gc);

View File

@@ -45,6 +45,7 @@ public abstract class WLDecoratedPeer extends WLWindowPeer {
}
public abstract boolean isResizable();
public abstract boolean isInteractivelyResizable();
public abstract void setState(int newState);
public abstract int getState();
@@ -108,8 +109,8 @@ public abstract class WLDecoratedPeer extends WLWindowPeer {
}
@Override
void notifyConfigured(int newX, int newY, int newWidth, int newHeight, boolean active, boolean maximized) {
super.notifyConfigured(newX, newY, newWidth, newHeight, active, maximized);
void notifyConfigured(int newX, int newY, int newWidthNative, int newHeightNative, boolean active, boolean maximized) {
super.notifyConfigured(newX, newY, newWidthNative, newHeightNative, active, maximized);
decoration.setActive(active);
}

View File

@@ -49,6 +49,11 @@ public class WLDialogPeer extends WLDecoratedPeer implements DialogPeer {
return ((Dialog)target).isResizable();
}
@Override
public boolean isInteractivelyResizable() {
return isResizable();
}
@Override
public String getTitle() {
return ((Dialog)target).getTitle();

View File

@@ -278,7 +278,7 @@ public class WLFrameDecoration {
final boolean isRMBPressed = isRMB && isPressed;
Point point = e.getPoint();
if (isLMBPressed && peer.isResizable()) {
if (isLMBPressed && peer.isInteractivelyResizable()) {
int resizeSide = getResizeEdges(point.x, point.y);
if (resizeSide != 0) {
peer.startResize(resizeSide);
@@ -330,7 +330,7 @@ public class WLFrameDecoration {
}
private int getResizeEdges(int x, int y) {
if (!peer.isResizable()) return 0;
if (!peer.isInteractivelyResizable()) return 0;
int edges = 0;
if (x < RESIZE_EDGE_THICKNESS) {
edges |= XDG_TOPLEVEL_RESIZE_EDGE_LEFT;

View File

@@ -73,6 +73,11 @@ public class WLFramePeer extends WLDecoratedPeer implements FramePeer {
return getFrame().isResizable();
}
@Override
public boolean isInteractivelyResizable() {
return getFrame().isResizable() && !isMaximized();
}
@Override
public String getTitle() {
return getFrame().getTitle();
@@ -108,6 +113,10 @@ public class WLFramePeer extends WLDecoratedPeer implements FramePeer {
}
}
public boolean isMaximized() {
return (getState() & Frame.MAXIMIZED_BOTH) != 0;
}
@Override
public void setMaximizedBounds(Rectangle bounds) {
}
@@ -133,11 +142,11 @@ public class WLFramePeer extends WLDecoratedPeer implements FramePeer {
}
@Override
void notifyConfigured(int newX, int newY, int newWidth, int newHeight, boolean active, boolean maximized) {
void notifyConfigured(int newXNative, int newYNative, int newWidthNative, int newHeightNative, boolean active, boolean maximized) {
int widthBefore = getWidth();
int heightBefore = getHeight();
super.notifyConfigured(newX, newY, newWidth, newHeight, active, maximized);
super.notifyConfigured(newXNative, newYNative, newWidthNative, newHeightNative, active, maximized);
synchronized (getStateLock()) {
int oldState = state;
@@ -147,7 +156,7 @@ public class WLFramePeer extends WLDecoratedPeer implements FramePeer {
if (maximized) {
widthBeforeMaximized = widthBefore;
heightBeforeMaximized = heightBefore;
} else if (newWidth == 0 && newHeight == 0 && widthBeforeMaximized > 0 && heightBeforeMaximized > 0) {
} else if (newWidthNative == 0 && newHeightNative == 0 && widthBeforeMaximized > 0 && heightBeforeMaximized > 0) {
performUnlocked(() -> target.setSize(widthBeforeMaximized, heightBeforeMaximized));
}
WLToolkit.postEvent(new WindowEvent(getFrame(), WindowEvent.WINDOW_STATE_CHANGED, oldState, state));

View File

@@ -39,17 +39,19 @@ public abstract class WLGraphicsConfig extends GraphicsConfiguration {
private final WLGraphicsDevice device;
private final int width;
private final int height;
private final int scale;
private final int wlScale; // as reported by Wayland
private final double effectiveScale; // as enforced by Java
protected WLGraphicsConfig(WLGraphicsDevice device, int width, int height, int scale) {
protected WLGraphicsConfig(WLGraphicsDevice device, int width, int height, int wlScale) {
this.device = device;
this.width = width;
this.height = height;
this.scale = scale;
this.wlScale = wlScale;
this.effectiveScale = WLGraphicsEnvironment.effectiveScaleFrom(wlScale);
}
boolean differsFrom(int width, int height, int scale) {
return width != this.width || height != this.height || scale != this.scale;
return width != this.width || height != this.height || scale != this.wlScale;
}
@Override
@@ -67,7 +69,7 @@ public abstract class WLGraphicsConfig extends GraphicsConfiguration {
@Override
public AffineTransform getDefaultTransform() {
double scale = getScale();
double scale = effectiveScale;
return AffineTransform.getScaleInstance(scale, scale);
}
@@ -80,11 +82,25 @@ public abstract class WLGraphicsConfig extends GraphicsConfiguration {
@Override
public Rectangle getBounds() {
return new Rectangle(width, height);
// NB: despite the claims of GraphicsConfiguration.getBounds()'s javadoc,
// the value returned is expected to be in user-space coordinates,
// same as windows sizes, offsets, components' coordinates, etc.
return new Rectangle((int) (width / effectiveScale), (int) (height / effectiveScale));
}
public int getScale() {
return scale;
/**
* Returns the preferred Wayland buffer scale for this display configuration.
*/
public int getWlScale() {
return wlScale;
}
/**
* Returns the effective scale, which can differ from the buffer scale
* if overridden with the sun.java2d.uiScale system property.
*/
public double getEffectiveScale() {
return effectiveScale;
}
public abstract SurfaceType getSurfaceType();
@@ -92,6 +108,6 @@ public abstract class WLGraphicsConfig extends GraphicsConfiguration {
@Override
public String toString() {
return String.format("%dx%d %dx scale", width, height, scale);
return String.format("%dx%d %dx scale", width, height, wlScale);
}
}

View File

@@ -34,6 +34,8 @@ import java.awt.GraphicsDevice;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Window;
import java.util.HashSet;
import java.util.Set;
/**
* Corresponds to Wayland's output and is identified by its wlID and x, y coordinates
@@ -71,6 +73,10 @@ public class WLGraphicsDevice extends GraphicsDevice {
// The default config is an object from the configs array
private volatile WLGraphicsConfig defaultConfig = null;
// Top-level window peers that consider this device as their primary one
// and get their graphics configuration from it
private final Set<WLComponentPeer> toplevels = new HashSet<>(); // guarded by 'this'
private WLGraphicsDevice(int id, int x, int y, int widthMm, int heightMm) {
this.wlID = id;
this.x = x;
@@ -109,6 +115,24 @@ public class WLGraphicsDevice extends GraphicsDevice {
configs = newConfigs;
defaultConfig = newDefaultConfig;
}
// It is important that by the time displayChanged() events are delivered,
// all the peers on this device had their graphics configuration updated
// to refer to the new ones with, perhaps, different scale or resolution.
// This affects various BufferStrategy that use volatile images as their buffers.
notifyToplevels();
}
private void notifyToplevels() {
Set<WLComponentPeer> toplevelsCopy = new HashSet<>(toplevels.size());
synchronized (this) {
toplevelsCopy.addAll(toplevels);
}
int wlOutputID = this.wlID;
// NB: each of those peers will likely receive another such notification
// from Wayland when it gets the wl_surface::enter event, but the second one
// will effectively be a no-op.
toplevelsCopy.forEach((peer) -> peer.notifyEnteredOutput(wlOutputID));
}
/**
@@ -121,7 +145,7 @@ public class WLGraphicsDevice extends GraphicsDevice {
this.x = similarDevice.x;
this.y = similarDevice.y;
int newScale = similarDevice.getScale();
int newScale = similarDevice.getWlScale();
Rectangle newBounds = similarDevice.defaultConfig.getBounds();
updateConfiguration(similarDevice.name, newBounds.width, newBounds.height, newScale);
}
@@ -183,8 +207,8 @@ public class WLGraphicsDevice extends GraphicsDevice {
return defaultConfig;
}
int getScale() {
return defaultConfig.getScale();
int getWlScale() {
return defaultConfig.getWlScale();
}
int getResolution() {
@@ -247,13 +271,15 @@ public class WLGraphicsDevice extends GraphicsDevice {
}
public void addWindow(WLComponentPeer peer) {
// TODO: may be needed to keep track of windows on the device to notify
// them of display change events, perhaps.
synchronized (this) {
toplevels.add(peer);
}
}
public void removeWindow(WLComponentPeer peer) {
// TODO: may be needed to keep track of windows on the device to notify
// them of display change events, perhaps.
synchronized (this) {
toplevels.remove(peer);
}
}
@Override

View File

@@ -49,6 +49,7 @@ public class WLGraphicsEnvironment extends SunGraphicsEnvironment {
private static boolean verboseVulkanStatus = false;
private static boolean vulkanRequested = false;
private static int vulkanRequestedDeviceNumber = -1;
private static final boolean debugScaleEnabled;
@SuppressWarnings("removal")
private static String vulkanOption =
AccessController.doPrivileged(
@@ -80,6 +81,8 @@ public class WLGraphicsEnvironment extends SunGraphicsEnvironment {
log.fine("Vulkan rendering enabled: " + (vulkanEnabled?"YES":"NO"));
}
debugScaleEnabled = SunGraphicsEnvironment.isUIScaleEnabled() && SunGraphicsEnvironment.getDebugScale() >= 1;
// Make sure the toolkit is loaded because otherwise this GE is going to be empty
WLToolkit.isInitialized();
}
@@ -143,6 +146,7 @@ public class WLGraphicsEnvironment extends SunGraphicsEnvironment {
if (gd.getID() == wlID) {
newOutput = false;
if (gd.isSameDeviceAs(wlID, x, y)) {
// These coordinates and the size are not scaled.
gd.updateConfiguration(humanID, width, height, scale);
} else {
final WLGraphicsDevice updatedDevice = WLGraphicsDevice.createWithConfiguration(wlID, humanID,
@@ -211,7 +215,6 @@ public class WLGraphicsEnvironment extends SunGraphicsEnvironment {
synchronized (devices) {
for (WLGraphicsDevice gd : devices) {
if (gd.getID() == wlOutputID) {
gd.addWindow(wlComponentPeer);
return gd;
}
}
@@ -223,7 +226,6 @@ public class WLGraphicsEnvironment extends SunGraphicsEnvironment {
synchronized (devices) {
for (WLGraphicsDevice gd : devices) {
if (gd.getID() == wlOutputID) {
gd.removeWindow(wlComponentPeer);
return gd;
}
}
@@ -250,4 +252,12 @@ public class WLGraphicsEnvironment extends SunGraphicsEnvironment {
}
}
}
static double effectiveScaleFrom(int displayScale) {
return debugScaleEnabled ? SunGraphicsEnvironment.getDebugScale() : displayScale;
}
static boolean isDebugScaleEnabled() {
return debugScaleEnabled;
}
}

View File

@@ -215,11 +215,23 @@ record WLInputState(WLPointerEvent eventWithSurface,
}
public int getPointerX() {
return eventWithCoordinates != null ? eventWithCoordinates.getSurfaceX() : 0;
int x = eventWithCoordinates != null ? eventWithCoordinates.getSurfaceX() : 0;
if (!WLGraphicsEnvironment.isDebugScaleEnabled()) {
return x;
} else {
WLComponentPeer peer = getPeer();
return peer == null ? x : peer.surfaceUnitsToJavaUnits(x);
}
}
public int getPointerY() {
return eventWithCoordinates != null ? eventWithCoordinates.getSurfaceY() : 0;
int y = eventWithCoordinates != null ? eventWithCoordinates.getSurfaceY() : 0;
if (!WLGraphicsEnvironment.isDebugScaleEnabled()) {
return y;
} else {
WLComponentPeer peer = getPeer();
return peer == null ? y : peer.surfaceUnitsToJavaUnits(y);
}
}
public WLComponentPeer getPeer() {
@@ -233,8 +245,8 @@ record WLInputState(WLPointerEvent eventWithSurface,
*/
public boolean isPointerOverPeer() {
if (isPointerOverSurface && eventWithCoordinates != null) {
int x = eventWithCoordinates.getSurfaceX();
int y = eventWithCoordinates.getSurfaceY();
int x = getPointerX();
int y = getPointerY();
WLComponentPeer peer = getPeer();
if (peer != null) {
return x >= 0

View File

@@ -25,7 +25,14 @@
package sun.awt.wl;
import sun.awt.AWTAccessor;
import java.awt.*;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets;
import java.awt.SystemColor;
import java.awt.Window;
import java.awt.event.WindowEvent;
import java.awt.peer.ComponentPeer;
import java.awt.peer.WindowPeer;
@@ -141,6 +148,13 @@ public class WLWindowPeer extends WLComponentPeer implements WindowPeer {
if (maxSize != null) super.setMaximumSizeTo(maxSize);
}
@Override
void updateSurfaceData() {
updateMinimumSize();
updateMaximumSize();
super.updateSurfaceData();
}
@Override
public void updateIconImages() {
// No support for this from Wayland, icon is a desktop integration feature.

View File

@@ -60,7 +60,7 @@ public abstract class WLVKSurfaceData extends VKSurfaceData implements WLSurface
final int backgroundRGB = peer.getBackground() != null
? peer.getBackground().getRGB()
: 0;
int scale = ((WLGraphicsConfig)peer.getGraphicsConfiguration()).getScale();
int scale = ((WLGraphicsConfig)peer.getGraphicsConfiguration()).getWlScale();
initOps(peer.getBufferWidth(), peer.getBufferHeight(), scale, backgroundRGB);
}

View File

@@ -75,7 +75,7 @@ public class WLSMSurfaceData extends SurfaceData implements WLSurfaceDataExt {
}
ColorModel cm = graphicsConfig.getColorModel();
SurfaceType surfaceType = graphicsConfig.getSurfaceType();
return new WLSMSurfaceData(peer, surfaceType, cm, graphicsConfig.getScale(), graphicsConfig.getWlShmFormat());
return new WLSMSurfaceData(peer, surfaceType, cm, graphicsConfig.getWlScale(), graphicsConfig.getWlShmFormat());
}
@Override

View File

@@ -26,18 +26,25 @@
package sun.java2d.wl;
import java.awt.Component;
import java.awt.GraphicsConfiguration;
import java.awt.ImageCapabilities;
import java.awt.Transparency;
import java.awt.image.ColorModel;
import sun.awt.wl.WLGraphicsConfig;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import sun.awt.image.SunVolatileImage;
import sun.awt.image.VolatileSurfaceManager;
import sun.java2d.SurfaceData;
public class WLVolatileSurfaceManager extends VolatileSurfaceManager {
public class WLVolatileSurfaceManager extends VolatileSurfaceManager implements PropertyChangeListener {
private static final String SCALE_PROPERTY_NAME = "graphicsContextScaleTransform";
public WLVolatileSurfaceManager(SunVolatileImage vImg, Object context) {
super(vImg, context);
Component component = vImg.getComponent();
if (component != null) {
component.addPropertyChangeListener(SCALE_PROPERTY_NAME, this);
}
}
protected boolean isAccelerationEnabled() {
@@ -54,4 +61,11 @@ public class WLVolatileSurfaceManager extends VolatileSurfaceManager {
// neither accelerated nor volatile
return new ImageCapabilities(false);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
assert SCALE_PROPERTY_NAME.equals(evt.getPropertyName());
displayChanged();
}
}

View File

@@ -1056,9 +1056,15 @@ WLSBM_SizeChangeTo(WLSurfaceBufferManager * manager, jint width, jint height, ji
}
MUTEX_LOCK(manager->drawLock);
MUTEX_LOCK(manager->showLock);
const bool change_needed =
manager->bufferForDraw.width != width
|| manager->bufferForDraw.height != height
|| manager->scale != scale;
manager->scale = scale;
MUTEX_UNLOCK(manager->showLock);
const bool size_changed = manager->bufferForDraw.width != width || manager->bufferForDraw.height != height;
if (size_changed) {
if (change_needed) {
DrawBufferDestroy(manager);
manager->bufferForDraw.width = width;
@@ -1069,12 +1075,6 @@ WLSBM_SizeChangeTo(WLSurfaceBufferManager * manager, jint width, jint height, ji
WLBufferTrace(manager, "WLSBM_SizeChangeTo %dx%d", width, height);
}
MUTEX_LOCK(manager->showLock);
if (manager->scale != scale) {
manager->scale = scale;
}
MUTEX_UNLOCK(manager->showLock);
MUTEX_UNLOCK(manager->drawLock);
}

View File

@@ -176,6 +176,11 @@ Java_sun_java2d_wl_WLSMSurfaceData_pixelsAt(JNIEnv *env, jobject wsd, jint x, ji
return NULL;
}
if (rasInfo.bounds.x2 - rasInfo.bounds.x1 < width || rasInfo.bounds.y2 - rasInfo.bounds.y1 < height) {
JNU_ThrowByName(env, "java/lang/ArrayIndexOutOfBoundsException", "Surface too small");
return NULL;
}
jintArray arrayObj = NULL;
ops->GetRasInfo(env, ops, &rasInfo);
if (rasInfo.rasBase && rasInfo.pixelStride == sizeof(jint)) {

View File

@@ -43,6 +43,7 @@ static jmethodID postWindowClosingMID;
static jmethodID notifyConfiguredMID;
static jmethodID notifyEnteredOutputMID;
static jmethodID notifyLeftOutputMID;
static jmethodID notifyPopupDoneMID;
struct activation_token_list_item {
struct xdg_activation_token_v1 *token;
@@ -261,6 +262,14 @@ xdg_popup_done(void *data,
struct xdg_popup *xdg_popup)
{
J2dTrace1(J2D_TRACE_INFO, "WLComponentPeer: xdg_popup_done(%p)\n", xdg_popup);
struct WLFrame *frame = data;
JNIEnv *env = getEnv();
const jobject nativeFramePeer = (*env)->NewLocalRef(env, frame->nativeFramePeer);
if (nativeFramePeer) {
(*env)->CallVoidMethod(env, nativeFramePeer, notifyPopupDoneMID);
(*env)->DeleteLocalRef(env, nativeFramePeer);
JNU_CHECK_EXCEPTION(env);
}
}
static void
@@ -311,6 +320,9 @@ Java_sun_awt_wl_WLComponentPeer_initIDs
CHECK_NULL_THROW_IE(env,
notifyLeftOutputMID = (*env)->GetMethodID(env, clazz, "notifyLeftOutput", "(I)V"),
"Failed to find method WLComponentPeer.notifyLeftOutput");
CHECK_NULL_THROW_IE(env,
notifyPopupDoneMID = (*env)->GetMethodID(env, clazz, "notifyPopupDone", "()V"),
"Failed to find method WLComponentPeer.notifyPopupDone");
}
JNIEXPORT void JNICALL
@@ -638,7 +650,8 @@ JNIEXPORT void JNICALL Java_sun_awt_wl_WLComponentPeer_nativeSetWindowGeometry
struct WLFrame *frame = jlong_to_ptr(ptr);
if (frame->xdg_surface) {
xdg_surface_set_window_geometry(frame->xdg_surface, x, y, width, height);
wlFlushToServer(env);
// Do not flush here as this update needs to be committed together with the change
// of the buffer's size and scale, if any.
}
}
@@ -648,7 +661,8 @@ JNIEXPORT void JNICALL Java_sun_awt_wl_WLComponentPeer_nativeSetMinimumSize
struct WLFrame *frame = jlong_to_ptr(ptr);
if (frame->toplevel) {
xdg_toplevel_set_min_size(frame->xdg_toplevel, width, height);
wlFlushToServer(env);
// Do not flush here as this update needs to be committed together with the change
// of the buffer's size and scale, if any.
}
}
@@ -658,7 +672,8 @@ JNIEXPORT void JNICALL Java_sun_awt_wl_WLComponentPeer_nativeSetMaximumSize
struct WLFrame *frame = jlong_to_ptr(ptr);
if (frame->toplevel) {
xdg_toplevel_set_max_size(frame->xdg_toplevel, width, height);
wlFlushToServer(env);
// Do not flush here as this update needs to be committed together with the change
// of the buffer's size and scale, if any.
}
}

View File

@@ -541,7 +541,7 @@ setXICWindowFocus(XIC ic, Window w)
#define INITIAL_LOOKUP_BUF_SIZE 512
Boolean
awt_x11inputmethod_lookupString(XKeyPressedEvent *event, KeySym *keysymp)
awt_x11inputmethod_lookupString(XKeyPressedEvent *event, KeySym *keysymp, const Boolean keyPressContainsThePreeditTextOfLastXResetIC)
{
JNIEnv *env = GetJNIEnv();
X11InputMethodData *pX11IMData = NULL;
@@ -627,17 +627,22 @@ awt_x11inputmethod_lookupString(XKeyPressedEvent *event, KeySym *keysymp)
/*FALLTHRU*/
case XLookupChars:
/*
printf("lookupString: status=XLookupChars, type=%d, state=%x, keycode=%x, keysym=%x\n",
event->type, event->state, event->keycode, keysym);
printf("lookupString: status=XLookupChars, type=%d, state=%x, keycode=%x, keysym=%x, keyPressContainsThePreeditTextOfLastXResetIC=%d\n",
event->type, event->state, event->keycode, keysym, (int)keyPressContainsThePreeditTextOfLastXResetIC);
*/
javastr = JNU_NewStringPlatform(env, (const char *)pX11IMData->lookup_buf);
if (javastr != NULL) {
JNU_CallMethodByName(env, NULL,
currentX11InputMethodInstance,
"dispatchCommittedText",
"(Ljava/lang/String;J)V",
javastr,
event->time);
// JBR-3112
// See sun.awt.X11.XToolkit#doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC
if (!keyPressContainsThePreeditTextOfLastXResetIC) {
javastr = JNU_NewStringPlatform(env, (const char *)pX11IMData->lookup_buf);
if (javastr != NULL) {
JNU_CallMethodByName(env, NULL,
currentX11InputMethodInstance,
"dispatchCommittedText",
"(Ljava/lang/String;J)V",
javastr,
event->time);
}
}
break;

View File

@@ -86,7 +86,7 @@ jfieldID targetID;
jfieldID graphicsConfigID;
extern jobject currentX11InputMethodInstance;
extern Boolean awt_x11inputmethod_lookupString(XKeyPressedEvent *, KeySym *);
extern Boolean awt_x11inputmethod_lookupString(XKeyPressedEvent *, KeySym *, Boolean keyPressContainsThePreeditTextOfLastXResetIC);
Boolean awt_UseType4Patch = False;
Boolean awt_ServerDetected = False;
Boolean awt_XKBDetected = False;
@@ -1103,7 +1103,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XWindow_haveCurrentX11InputMethodIns
}
JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XWindow_x11inputMethodLookupString
(JNIEnv *env, jobject object, jlong event, jlongArray keysymArray) {
(JNIEnv *env, jobject object, jlong event, jlongArray keysymArray, jboolean keyPressContainsThePreeditTextOfLastXResetIC) {
KeySym keysym = NoSymbol;
Boolean boo;
/* keysymArray (and testbuf[]) have dimension 2 because we put there two
@@ -1117,7 +1117,11 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XWindow_x11inputMethodLookupString
testbuf[1]=0;
boo = awt_x11inputmethod_lookupString((XKeyPressedEvent*)jlong_to_ptr(event), &keysym);
boo = awt_x11inputmethod_lookupString(
(XKeyPressedEvent*)jlong_to_ptr(event),
&keysym,
(keyPressContainsThePreeditTextOfLastXResetIC == JNI_TRUE) ? True : False
);
testbuf[0] = keysym;
(*env)->SetLongArrayRegion(env, keysymArray, 0, 2, (jlong *)(testbuf));

View File

@@ -61,7 +61,7 @@ public interface FontExtensions {
SS16, SS17, SS18, SS19, SS20, SSTY, STCH, SUBS, SUPS, SWSH, TITL, TJMO, TNAM, TNUM, TRAD, TWID, UNIC, VALT, VATU,
VCHW, VERT, VHAL, VJMO, VKNA, VKRN, VPAL, VRT2, VRTR, ZERO;
String getName() {
public String getName() {
return toString().toLowerCase();
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright 2024 JetBrains s.r.o.
* 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
package com.jetbrains;
import java.awt.*;
import java.util.Set;
@Deprecated(forRemoval=true)
public interface FontOpenTypeFeatures {
/**
* This method returns set of OpenType's features converted to String supported by current font
*
* @param font basic font
*/
Set<String> getAvailableFeatures(Font font);
}

View File

@@ -6,9 +6,9 @@
# 2. When only new API is added, or some existing API was @Deprecated - increment MINOR, reset PATCH to 0
# 3. For major backwards incompatible API changes - increment MAJOR, reset MINOR and PATCH to 0
VERSION = 0.0.16
VERSION = 0.0.17
# Hash is used to track changes to jetbrains.api, so you would not forget to update version when needed.
# When you make any changes, "make jbr-api" will fail and ask you to update hash and version number here.
HASH = 668AC33C794CA55FC4687EC63693E28
HASH = 5AB752E7446152B4D115528584543C8F

View File

@@ -0,0 +1,30 @@
#############################################################################
# :hotspot_runtime
runtime/8176717/TestInheritFD.java JBR-6974 linux-all
#############################################################################
# :hotspot_serviceability
serviceability/dcmd/framework/HelpTest.java JBR-6974 linux-all
serviceability/dcmd/framework/InvalidCommandTest.java JBR-6974 linux-all
serviceability/dcmd/framework/VMVersionTest.java JBR-6974 linux-all
serviceability/tmtools/jstat/GcCapacityTest.java JBR-6974 linux-all
serviceability/tmtools/jstat/GcCauseTest01.java JBR-6974 linux-all
serviceability/tmtools/jstat/GcCauseTest02.java JBR-6974 linux-all
serviceability/tmtools/jstat/GcCauseTest03.java JBR-6974 linux-all
serviceability/tmtools/jstat/GcNewTest.java JBR-6974 linux-all
serviceability/tmtools/jstat/GcTest01.java JBR-6974 linux-all
serviceability/tmtools/jstat/GcTest02.java JBR-6974 linux-all
#############################################################################
# :vmTestbase_*
#############################################################################
vmTestbase/nsk/aod/AttachProvider/AttachProvider01/AttachProvider01.java JBR-6970 linux-all
vmTestbase/nsk/aod/VirtualMachine/VirtualMachine05/VirtualMachine05.java JBR-6970 linux-all
vmTestbase/nsk/aod/VirtualMachineDescriptor/VirtualMachineDescriptor01/VirtualMachineDescriptor01.java JBR-6970 linux-all

View File

@@ -123,6 +123,7 @@ gc/stress/gclocker/TestGCLockerWithG1.java 8180622 generic-all
gc/stress/gclocker/TestGCLockerWithShenandoah.java initial_run generic-all
gc/stress/TestJNIBlockFullGC/TestJNIBlockFullGC.java 8192647 generic-all
gc/stress/TestStressG1Humongous.java 8286554 windows-x64
gc/stress/TestStressRSetCoarsening.java#id2 JBR-6706 windows-x64
gc/metaspace/CompressedClassSpaceSizeInJmapHeap.java 8241293 macosx-x64
gc/metaspace/TestMetaspacePerfCounters.java#id3 initial_run generic-all
@@ -258,6 +259,7 @@ vmTestbase/nsk/jdi/ReferenceType/instances/instances002/instances002.java initia
vmTestbase/nsk/jdi/Value/type/type003/TestDescription.java time_out_intermittent macosx-all
vmTestbase/nsk/jdi/VirtualMachine/allThreads/allthreads001/TestDescription.java JBR-6530 macosx-all
vmTestbase/nsk/jdi/VirtualMachine/canGetBytecodes/cangetbytecodes001/TestDescription.java time_out_intermittent macosx-aarch64
vmTestbase/nsk/jdi/VirtualMachine/canGetCurrentContendedMonitor/cangccm001/TestDescription.java JBR-6994 macosx-all
vmTestbase/nsk/jdi/VirtualMachine/canGetMonitorInfo/cangetmonitorinfo001/TestDescription.java JBR-6361 macosx-all
vmTestbase/nsk/jdi/VirtualMachine/canGetOwnedMonitorInfo/cangetinfo001/TestDescription.java JBR-6831 macosx-aarch64
vmTestbase/nsk/jdi/stress/ClassPrepareEvents/ClassPrepareEvents001/ClassPrepareEvents001.java JBR-6470 macosx-all

View File

@@ -0,0 +1,86 @@
/*
* Copyright 2024 JetBrains s.r.o.
* 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.
*/
/*
* @test
* @summary BoxLayout doesn't ignore invisible components
* @key headful
* @run main NPECheckRequests
*/
import java.awt.BorderLayout;
import java.lang.reflect.InvocationTargetException;
import java.awt.Dimension;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class NPECheckRequests {
JFrame frame;
JPanel p;
BrokenComponent foo;
public void init() {
frame = new JFrame();
p = new JPanel();
BoxLayout boxLayout = new BoxLayout(p, BoxLayout.X_AXIS);
p.setLayout(boxLayout);
foo = new BrokenComponent();
p.add(foo);
frame.setLayout(new BorderLayout());
frame.add(p, BorderLayout.CENTER);
try {
frame.pack();
} catch (RuntimeException ignored) {
// our broken component threw an exception
}
}
public void start() {
foo.broken = false;
// check that the layout isn't in a broken state because of that exception
frame.pack();
}
public static void main(String[] args) throws InterruptedException,
InvocationTargetException {
NPECheckRequests test = new NPECheckRequests();
SwingUtilities.invokeAndWait(test::init);
SwingUtilities.invokeAndWait(test::start);
}
private class BrokenComponent extends JPanel {
boolean broken = true;
@Override
public Dimension getPreferredSize() {
if (broken) {
throw new RuntimeException("Broken component");
}
return super.getPreferredSize();
}
}
}

View File

@@ -0,0 +1,50 @@
/*
* Copyright 2022-2024 JetBrains s.r.o.
* 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.
*/
/**
* @test
* @summary Verifies that the system property describing virtualization
* is present
* @library /test/lib
* @run main DetectVirtualization
*/
public class DetectVirtualization {
static final String VIRT_PROPERTY_NAME = "intellij.os.virtualization";
public static void main(String args[]) {
String virtualization = System.getProperty(VIRT_PROPERTY_NAME);
System.out.println("Detected virtualization: " + virtualization);
switch (virtualization) {
case "Xen":
case "KVM":
case "VMWare":
case "HyperV":
case "none":
break;
default:
throw new RuntimeException(VIRT_PROPERTY_NAME + " has an unexpected value " + virtualization);
}
}
}

View File

@@ -38,7 +38,9 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import static com.jetbrains.desktop.FontExtensions.featuresToStringArray;
import static com.jetbrains.desktop.FontExtensions.getFeatures;
@@ -211,11 +213,37 @@ public class FontExtensionsTest {
return textDrawingEquals(BASE_FONT, fontWithFeatures(), TEST_STRING);
}
@JBRTest
private static Boolean getAvailableFeatures1() {
Set<String> features = JBR.getFontOpenTypeFeatures().getAvailableFeatures(BASE_FONT);
Set<FontExtensions.FeatureTag> expected =
Set.of(FontExtensions.FeatureTag.SS01, FontExtensions.FeatureTag.CV03, FontExtensions.FeatureTag.ZERO);
return features.containsAll(expected.stream().map(FontExtensions.FeatureTag::getName).toList());
}
@JBRTest
private static Boolean getAvailableFeatures2() {
Set<String> features = JBR.getFontOpenTypeFeatures().getAvailableFeatures(new Font("Inconsolata", Font.PLAIN, 20));
return features.isEmpty();
}
@JBRTest
private static Boolean getAvailableFeatures3() {
Set<String> features = JBR.getFontOpenTypeFeatures().getAvailableFeatures(new Font("Inter", Font.PLAIN, 20));
Set<FontExtensions.FeatureTag> expected =
Set.of(FontExtensions.FeatureTag.SS01, FontExtensions.FeatureTag.SS02, FontExtensions.FeatureTag.SS03);
return features.containsAll(expected.stream().map(FontExtensions.FeatureTag::getName).toList());
}
public static void main(final String[] args) {
if (!JBR.isFontExtensionsSupported()) {
throw new RuntimeException("JBR FontExtension API is not available");
}
if (!JBR.isFontOpenTypeFeaturesSupported()) {
throw new RuntimeException("JBR FontOpenTypeFeatures API is not available");
}
String error = "";
try {
for (final Method method : FontExtensionsTest.class.getDeclaredMethods()) {

View File

@@ -7,49 +7,50 @@ javax/swing/JInternalFrame/Test6505027.java nobug macosx-all,linux-all,w
javax/swing/JPopupMenu/4634626/bug4634626.java nobug macosx-all,linux-all,windows-all
javax/swing/JPopupMenu/4966112/bug4966112.java nobug macosx-all,linux-all,windows-all
jb/java/awt/Desktop/AboutHandlerTest.java nobug macosx-all,linux-all,windows-all
sun/java2d/GdiRendering/InsetClipping.java nobug macosx-all,linux-all,windows-all
# VoiceOver on MacOS
java/awt/event/KeyEvent/ExtendedModifiersTest/ExtendedModifiersTest.java JBR-5397 macosx-all
java/awt/event/KeyEvent/KeyMaskTest/KeyMaskTest.java JBR-5397 macosx-all
java/awt/event/KeyEvent/KeyTyped/CtrlSpace.java JBR-5397 macosx-all
java/awt/event/KeyEvent/KeyEventLocationTest.java JBR-5397 macosx-all
java/awt/event/KeyEvent/KeyTyped/CtrlSpace.java JBR-3817,JBR-5397 windows-all,macosx-all
java/awt/event/KeyEvent/KeyEventLocationTest.java JBR-5916,JBR-5397 linux-all,macosx-all
java/awt/event/MouseEvent/MouseButtonsAndKeyMasksTest/MouseButtonsAndKeyMasksTest.java JBR-5397 macosx-all
java/awt/event/StressTest/MouseAndKeyEventStressTest.java JBR-5397 macosx-all
java/awt/FileDialog/FilenameFilterTest/FilenameFilterTest.java JBR-5397 macosx-all
java/awt/Focus/6378278/InputVerifierTest.java JBR-5397 macosx-all
java/awt/Focus/6382144/EndlessLoopTest.java JBR-5397 macosx-all
java/awt/Focus/8000326/SetFocusTraversalKeysEnabledTest.java JBR-5397 macosx-all
java/awt/Focus/8073453/AWTFocusTransitionTest.java JBR-5397 macosx-all
java/awt/Focus/8073453/SwingFocusTransitionTest.java JBR-5397 macosx-all
java/awt/Focus/ConsumeNextKeyTypedOnModalShowTest/ConsumeNextKeyTypedOnModalShowTest.java JBR-5397 macosx-all
java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java JBR-5397 macosx-all
java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java JBR-5397 macosx-all
java/awt/Focus/8000326/SetFocusTraversalKeysEnabledTest.java JBR-4997,JBR-5729,JBR-5397 windows-all,linux-all,macosx-all
java/awt/Focus/8073453/AWTFocusTransitionTest.java JBR-5210,8298247,JBR-5397 windows-all,linux-all,macosx-all
java/awt/Focus/8073453/SwingFocusTransitionTest.java JBR-5210,JBR-5397 windows-all,macosx-all
java/awt/Focus/ConsumeNextKeyTypedOnModalShowTest/ConsumeNextKeyTypedOnModalShowTest.java 6986252,JBR-5178,JBR-6750,JBR-5397 windows-all,linux-all,macosx-all
java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java JBR-5210,JBR-5397 windows-all,macosx-all
java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java JBR-5210,JBR-5397 windows-all,macosx-all
java/awt/hidpi/properties/HiDPIPropertiesUnixTest.java JBR-5397 macosx-all
java/awt/KeyboardFocusmanager/ConsumeNextMnemonicKeyTypedTest/ConsumeNextMnemonicKeyTypedTest.java JBR-5397 macosx-all
java/awt/KeyboardFocusmanager/TypeAhead/ButtonActionKeyTest/ButtonActionKeyTest.java JBR-5397 macosx-all
java/awt/KeyboardFocusmanager/TypeAhead/SubMenuShowTest/SubMenuShowTest.java JBR-5397 macosx-all
java/awt/KeyboardFocusmanager/TypeAhead/SubMenuShowTest/SubMenuShowTest.java JBR-5397,JBR-4074 macosx-all,windows-all
java/awt/List/ItemEventTest/ItemEventTest.java JBR-5397,JBR-5505 macosx-all,windows-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFAppModalTest.java JBR-5397 macosx-all
java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java JBR-5397 macosx-all
java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java JBR-5397,JBR-5802 macosx-all,windows-all
java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java JBR-6948 windows-x64
java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5397 macosx-all
javax/swing/JFileChooser/4524490/bug4524490.java JBR-5397 macosx-all
javax/swing/JFileChooser/4524490/bug4524490.java JBR-5397,JBR-5846 macosx-all,windows-all
javax/swing/JFileChooser/6520101/bug6520101.java JBR-5397 macosx-all
javax/swing/JFileChooser/8002077/bug8002077.java JBR-5397 macosx-all
javax/swing/JLabel/4138746/JLabelMnemonicsTest.java JBR-5397 macosx-all
javax/swing/JLabel/6596966/bug6596966.java JBR-5397 macosx-all
javax/swing/JList/4618767/JListSelectedElementTest.java JBR-5397 macosx-all
javax/swing/JList/6462008/bug6462008.java JBR-5397 macosx-all
javax/swing/JMenu/4213634/bug4213634.java JBR-5397 macosx-all
javax/swing/JMenu/4515762/bug4515762.java JBR-5397 macosx-all
javax/swing/JMenu/4692443/bug4692443.java JBR-5397 macosx-all
javax/swing/JMenu/6470128/bug6470128.java JBR-5397 macosx-all
javax/swing/JMenuBar/4750590/bug4750590.java JBR-5397 macosx-all
javax/swing/JMenuItem/4171437/bug4171437.java JBR-5397 macosx-all
javax/swing/JMenuItem/6249972/bug6249972.java JBR-5397 macosx-all
javax/swing/JFileChooser/8002077/bug8002077.java JBR-4880,JBR-5397 windows-all,macosx-all
javax/swing/JLabel/4138746/JLabelMnemonicsTest.java JBR-4949,JBR-5397 linux-all,windows-all,macosx-all
javax/swing/JLabel/6596966/bug6596966.java 8197552,JBR-5397 windows-all,macosx-all
javax/swing/JList/4618767/JListSelectedElementTest.java JBR-4955,JBR-5397 windows-all,macosx-all
javax/swing/JList/6462008/bug6462008.java JBR-5397,JBR-6773 macosx-all,windows-all
javax/swing/JMenu/4213634/bug4213634.java 8197552,JBR-5397 windows-all,macosx-all
javax/swing/JMenu/4515762/bug4515762.java 8197552,JBR-5397 windows-all,macosx-all
javax/swing/JMenu/4692443/bug4692443.java JBR-5397,JBR-6093 macosx-all,windows-all
javax/swing/JMenu/6470128/bug6470128.java 8253184,JBR-6307,JBR-5397 windows-all,linux-all,macosx-all
javax/swing/JMenuBar/4750590/bug4750590.java JBR-5397,JBR-6094 macosx-all,windows-all
javax/swing/JMenuItem/4171437/bug4171437.java JBR-5397,JBR-6112 macosx-all,windows-all
javax/swing/JMenuItem/6249972/bug6249972.java 8197552,JBR-5397 windows-all,macosx-all
javax/swing/JMenuItem/JMenuItemSetAcceleratorTest.java JBR-5397 macosx-all
javax/swing/JPopupMenu/4458079/bug4458079.java JBR-5397 macosx-all
javax/swing/JPopupMenu/4634626/bug4634626.java JBR-5397 macosx-all
javax/swing/JPopupMenu/4634626/bug4634626.java 8253184,JBR-5397 windows-all,macosx-all
javax/swing/JPopupMenu/6415145/bug6415145.java JBR-5397 macosx-all
javax/swing/JPopupMenu/6827786/bug6827786.java JBR-5397 macosx-all
javax/swing/JRadioButton/4314194/bug4314194.java JBR-5397 macosx-all
@@ -58,28 +59,28 @@ javax/swing/JSplitPane/4615365/JSplitPaneDividerLocationTest.java JBR-5397 macos
javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java JBR-5397 macosx-all
javax/swing/JTable/8236907/LastVisibleRow.java JBR-5397 macosx-all
javax/swing/JTextField/4532513/DefaultCaretRequestsFocusTest.java JBR-5397 macosx-all
javax/swing/JTextField/8036819/bug8036819.java JBR-5397 macosx-all
javax/swing/JTextField/8036819/bug8036819.java JBR-5397,JBR-6113 macosx-all,windows-all
javax/swing/JToolTip/bug5047379.java JBR-5397 macosx-all
javax/swing/JTree/4518432/JTreeNodeCopyPasteTest.java JBR-5397 macosx-all
javax/swing/JTree/4618767/JTreeSelectedElementTest.java JBR-5397 macosx-all
javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java JBR-5397 macosx-all
javax/swing/plaf/aqua/JInternalFrameBorderTest.java JBR-5397 macosx-all
javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java JBR-5397 macosx-all
javax/swing/plaf/synth/7158712/bug7158712.java JBR-5397 macosx-all
javax/swing/Popup/TaskbarPositionTest.java JBR-5397 macosx-all
javax/swing/text/CSSBorder/6796710/bug6796710.java JBR-5397 macosx-all
sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5397 macosx-all
javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java 8253184,JBR-6727,JBR-5397 windows-all,linux-all,macosx-all
javax/swing/plaf/synth/7158712/bug7158712.java JBR-125,8322653,JBR-5397 linux-all,windows-all,macosx-all
javax/swing/Popup/TaskbarPositionTest.java 8310689,JBR-5397 windows-all,macosx-all
javax/swing/text/CSSBorder/6796710/bug6796710.java JBR-5397,JBR-6465 macosx-all,windows-all,linux-aarch64
sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5397,8212240,JBR-5510,JBR-6285,8253184 macosx-all,linux-all,windows-all
sanity/client/SwingSet/src/ToolTipDemoTest.java JBR-5397 macosx-all
sun/java2d/DirectX/OnScreenRenderingResizeTest/OnScreenRenderingResizeTest.java JBR-5397 macosx-all
sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5397 macosx-all
sun/java2d/GdiRendering/InsetClipping.java JBR-5397 macosx-all
sun/java2d/GdiRendering/InsetClipping.java JBR-5397,7124403,JBR-6513 macosx-all,windows-all,linux-all
java/awt/Focus/NullActiveWindowOnFocusLost/NullActiveWindowOnFocusLost.java JBR-5397 macosx-all
java/awt/FullScreen/BufferStrategyExceptionTest/BufferStrategyExceptionTest.java JBR-5397 macosx-all
java/awt/FullScreen/FullScreenInsets/FullScreenInsets.java JBR-5397 macosx-all
java/awt/List/ListMultipleSelectTest/ListMultipleSelectTest.java JBR-5397 macosx-all
java/awt/FullScreen/FullScreenInsets/FullScreenInsets.java 7019055,8266245,JBR-5397 windows-all,linux-all,macosx-aarch64,macosx-all
java/awt/List/ListMultipleSelectTest/ListMultipleSelectTest.java JBR-5555,JBR-5397 windows-all,macosx-all
java/awt/Mouse/EnterExitEvents/DragWindowTest.java JBR-5397 macosx-all
java/awt/Mouse/ExtraMouseClick/ExtraMouseClick.java JBR-5397 macosx-all
java/awt/Mouse/MouseComboBoxTest/MouseComboBoxTest.java JBR-5397 macosx-all
java/awt/Mouse/MouseComboBoxTest/MouseComboBoxTest.java 8253184,JBR-6752,JBR-5397 windows-all,linux-all,macosx-all
java/awt/Mouse/MouseModifiersUnitTest/MouseModifiersInKeyEvent.java JBR-5397 macosx-all
java/awt/Paint/PaintNativeOnUpdate.java JBR-5397 macosx-all
java/awt/PopupMenu/PopupMenuLocation.java JBR-5397 macosx-all
@@ -93,136 +94,70 @@ javax/accessibility/SlowPanelIteration/SlowPanelIteration.java JBR-5397 macosx-a
javax/accessibility/JFileChooserAccessibleDescriptionTest.java JBR-5397 macosx-all
javax/swing/JButton/8151303/PressedIconTest.java JBR-5397 macosx-all
javax/swing/JComboBox/4743225/bug4743225.java JBR-5397 macosx-all
javax/swing/JComboBox/6236162/bug6236162.java JBR-5397 macosx-all
javax/swing/JComboBox/6236162/bug6236162.java JBR-5210,JBR-5397 windows-all,macosx-all
javax/swing/JComboBox/6559152/bug6559152.java JBR-5397 macosx-all
javax/swing/JComboBox/8033069/bug8033069NoScrollBar.java JBR-5397 macosx-all
javax/swing/JComboBox/8033069/bug8033069ScrollBar.java JBR-5397 macosx-all
javax/swing/JComboBox/8182031/ComboPopupTest.java JBR-5397 macosx-all
javax/swing/JComboBox/8182031/ComboPopupTest.java 8253184,JBR-5397 windows-all,macosx-all
javax/swing/JComboBox/JComboBoxPopupMenuEventTest.java JBR-5397 macosx-all
javax/swing/JComboBox/JComboBoxWithTitledBorderTest.java JBR-5397 macosx-all
javax/swing/JEditorPane/8195095/ImageViewTest.java JBR-5397 macosx-all
javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-5510,JBR-6283,JBR-5397 windows-all,linux-5.18.2-arch1-1,macosx-all
javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-5397 macosx-all
# Windows (ZoomText, NVDA, or JAWS is enabled during testing)
com/sun/java/accessibility/util/8051626/Bug8051626.java JBR-5505 windows-all
java/awt/Choice/ChoicePopupLocation/ChoicePopupLocation.java JBR-5505 windows-all
java/awt/Debug/DumpOnKey/DumpOnKey.java JBR-5505 windows-all
java/awt/Dialog/ModalDialogPermission/ModalDialogPermission.java JBR-5505 windows-all
java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java JBR-5505 windows-all
java/awt/dnd/Button2DragTest/Button2DragTest.java JBR-5505 windows-all
java/awt/event/MouseEvent/ClickDuringKeypress/ClickDuringKeypress.java JBR-5505 windows-all
java/awt/EventDispatchThread/HandleExceptionOnEDT/HandleExceptionOnEDT.java JBR-5505 windows-all
java/awt/EventDispatchThread/PropertyPermissionOnEDT/PropertyPermissionOnEDT.java JBR-5505 windows-all
java/awt/Button/DoubleActionEventTest.java JBR-6949 windows-x64
java/awt/Choice/ChoiceConsumeMouseEvents.java JBR-6951 windows-x64
java/awt/Choice/ChoiceFreezeTest.java JBR-6952 windows-x64
java/awt/Choice/ChoicePopupLocation/ChoicePopupLocation.java JBR-6857,JBR-5505 macosx-all,windows-all
java/awt/Choice/RemoveAllShrinkTest/RemoveAllShrinkTest.java JBR-5510,8310487,JBR-6950 linux-5.18.2-arch1-1,linux-all,windows-x64
java/awt/dnd/Button2DragTest/Button2DragTest.java 8310490,JBR-5505 windows-all,linux-all
java/awt/event/MouseEvent/ClickDuringKeypress/ClickDuringKeypress.java 8233568,JBR-5915,JBR-5505 macosx-all,linux-all,windows-all
java/awt/Focus/6378278/InputVerifierTest.java JBR-5505 windows-all
java/awt/Focus/CloseDialogActivateOwnerTest/CloseDialogActivateOwnerTest.java JBR-5505 windows-all
java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java JBR-5505 windows-all
java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java JBR-5505 windows-all
java/awt/Focus/NoAutotransferToDisabledCompTest/NoAutotransferToDisabledCompTest.java JBR-5505 windows-all
java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java JBR-5505 windows-all
java/awt/Focus/ShowFrameCheckForegroundTest/ShowFrameCheckForegroundTest.java JBR-5505 windows-all
java/awt/Focus/TranserFocusToWindow/TranserFocusToWindow.java JBR-5505 windows-all
java/awt/Focus/TypeAhead/TestFocusFreeze.java JBR-5505 windows-all
java/awt/Focus/WindowInitialFocusTest/WindowInitialFocusTest.java JBR-5210 windows-all
java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java 8169110,JBR-5505 linux-all,windows-all
java/awt/Focus/WindowUpdateFocusabilityTest/WindowUpdateFocusabilityTest.java JBR-5505 windows-all
java/awt/FontClass/FontAccess.java JBR-5505 windows-all
java/awt/Frame/FramesGC/FramesGC.java JBR-5505 windows-all
java/awt/Frame/WindowDragTest/WindowDragTest.java JBR-5505 windows-all
java/awt/FullScreen/MultimonFullscreenTest/MultimonDeadlockTest.java JBR-5505 windows-all
java/awt/hidpi/DrawOnFrameGraphicsTest.java JBR-5505 windows-all
java/awt/hidpi/SetMaximizedBoundsTest.java JBR-5505 windows-all
java/awt/im/4959409/bug4959409.java JBR-5505 windows-all
java/awt/im/memoryleak/InputContextMemoryLeakTest.java JBR-5505 windows-all
java/awt/image/mlib/MlibOpsTest.java JBR-5505 windows-all
java/awt/KeyboardFocusmanager/TypeAhead/FreezeTest/FreezeTest.java JBR-5505 windows-all
java/awt/KeyboardFocusmanager/TypeAhead/TestDialogTypeAhead.java JBR-5505 windows-all
java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java JBR-5505 windows-all
java/awt/List/ItemEventTest/ItemEventTest.java JBR-5505 windows-all
java/awt/List/KeyEventsTest/KeyEventsTest.java JBR-5505 windows-all
java/awt/List/ListMultipleSelectTest/ListMultipleSelectTest.java JBR-5505 windows-all
java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java JBR-5505 windows-all
java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5505 windows-all
java/awt/Mixing/LWPopupMenu.java JBR-5505 windows-all
java/awt/List/ItemEventTest/ItemEventTest.java JBR-5711,JBR-5505 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5510,JBR-5505 macosx-all,linux-5.18.2-arch1-1,windows-all
java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5510,JBR-5505 linux-5.18.2-arch1-1,windows-all
java/awt/Mixing/MixingOnDialog.java JBR-5505 windows-all
java/awt/Mixing/MixingOnShrinkingHWButton.java JBR-5505 windows-all
java/awt/Mixing/OpaqueTest.java JBR-5505 windows-all
java/awt/Mixing/OverlappingButtons.java JBR-5505 windows-all
java/awt/Mixing/Validating.java JBR-5505 windows-all
java/awt/Mixing/OpaqueTest.java JBR-5707,JBR-5505 linux-all,windows-all
java/awt/Mixing/OverlappingButtons.java JBR-5707,JBR-5505 linux-all,windows-all
java/awt/Mixing/Validating.java JBR-5708,JBR-5505 linux-all,windows-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsAppModalTest.java JBR-5505 windows-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsDocModalTest.java JBR-5505 windows-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsModelessTest.java JBR-5505 windows-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsNonModalTest.java JBR-5505 windows-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsDocModalTest.java 8164473,JBR-5505 linux-all,windows-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsModelessTest.java 8196432,JBR-5505 linux-all,windows-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsNonModalTest.java 8196432,JBR-5505 linux-all,windows-all
java/awt/MouseInfo/GetPointerInfoTest.java JBR-5505 windows-all
java/awt/MouseInfo/MultiscreenPointerInfo.java JBR-5505 windows-all
java/awt/Multiscreen/MouseEventTest/MouseEventTest.java JBR-5505 windows-all
java/awt/Multiscreen/MouseEventTest/MouseEventTest.java JBR-4908,JBR-5505 linux-all,windows-all
java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java JBR-5505 windows-all
java/awt/PopupMenu/PopupMenuLocation.java JBR-5505 windows-all
java/awt/print/PrinterJob/GetUserNameTest.java JBR-5505 windows-all
java/awt/PrintJob/Security/SecurityDialogTest.java JBR-5505 windows-all
java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java JBR-5505 windows-all
java/awt/Robot/MouseLocationOnScreen/MouseLocationOnScreen.java JBR-5505 windows-all
java/awt/Robot/MultiScreenRobotPosition/MultiScreenRobotPosition.java JBR-5505 windows-all
java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeCrashTest.java JBR-5505 windows-all
java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5505 windows-all
java/awt/Toolkit/SecurityTest/SecurityTest2.java JBR-5505 windows-all
java/awt/TrayIcon/SecurityCheck/NoPermissionTest/NoPermissionTest.java JBR-5505 windows-all
java/awt/TrayIcon/SecurityCheck/PermissionTest/PermissionTest.java JBR-5505 windows-all
java/awt/Robot/MultiScreenRobotPosition/MultiScreenRobotPosition.java JBR-830,JBR-5505 windows-x64,windows-all
java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5765,JBR-5505 windows-all,macosx-all
javax/accessibility/JSlider/AccessibleAction/JSliderAccessibleAction.java JBR-5505 windows-all
javax/imageio/plugins/external_plugin_tests/TestClassPathPlugin.sh JBR-5505 windows-all
javax/swing/JComboBox/8033069/bug8033069NoScrollBar.java JBR-5505 windows-all
javax/swing/JComboBox/8033069/bug8033069ScrollBar.java JBR-5505 windows-all
javax/swing/JComboBox/8136998/bug8136998.java JBR-5505 windows-all
javax/swing/JComboBox/JComboBoxPopupMenuEventTest.java JBR-5505 windows-all
javax/swing/JComboBox/JComboBoxWithTitledBorderTest.java JBR-5505 windows-all
javax/swing/JFileChooser/4524490/bug4524490.java JBR-5505 windows-all
javax/swing/JFileChooser/6570445/bug6570445.java JBR-5505 windows-all
javax/swing/JFileChooser/6738668/bug6738668.java JBR-5505 windows-all
javax/swing/JFileChooser/7036025/bug7036025.java JBR-5505 windows-all
javax/swing/JFileChooser/8062561/bug8062561.java JBR-5505 windows-all
javax/swing/JFileChooser/ShellFolderQueries/ShellFolderQueriesSecurityManagerTest.java JBR-5505 windows-all
javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java JBR-5505 windows-all
javax/swing/JInternalFrame/8145060/TestJInternalFrameMinimize.java JBR-5505 windows-all
javax/swing/JInternalFrame/Test6325652.java JBR-5505 windows-all
javax/swing/JInternalFrame/Test6505027.java JBR-5505 windows-all
javax/swing/JMenu/4213634/bug4213634.java JBR-5505 windows-all
javax/swing/JMenu/4515762/bug4515762.java JBR-5505 windows-all
javax/swing/JMenu/4692443/bug4692443.java JBR-5505 windows-all
javax/swing/JMenu/PopupReferenceMemoryLeak.java JBR-5505 windows-all
javax/swing/JMenuBar/4750590/bug4750590.java JBR-5505 windows-all
javax/swing/JMenuItem/4171437/bug4171437.java JBR-5505 windows-all
javax/swing/JMenuItem/8158566/CloseOnMouseClickPropertyTest.java JBR-5505 windows-all
javax/swing/JOptionPane/8081019/bug8081019.java JBR-5505 windows-all
javax/swing/JInternalFrame/Test6505027.java JBR-5954,JBR-5505 linux-all,macosx-all,windows-all
javax/swing/JPopupMenu/4458079/bug4458079.java JBR-5505 windows-all
javax/swing/JPopupMenu/6675802/bug6675802.java JBR-5505 windows-all
javax/swing/JRadioButton/8033699/bug8033699.java JBR-5505 windows-all
javax/swing/JRadioButton/8075609/bug8075609.java JBR-5505 windows-all
javax/swing/JRadioButton/ButtonGroupFocus/ButtonGroupFocusTest.java JBR-5505 windows-all
javax/swing/JRadioButton/FocusTraversal/FocusTraversal.java JBR-5505 windows-all
javax/swing/JRootPane/DefaultButtonTest.java JBR-5505 windows-all
javax/swing/JScrollBar/bug4202954/bug4202954.java JBR-5505 windows-all
javax/swing/JSpinner/4515999/JSpinnerMouseAndKeyPressTest.java JBR-5505 windows-all
javax/swing/JTable/6263446/bug6263446.java JBR-5505 windows-all
javax/swing/JTextField/8036819/bug8036819.java JBR-5505 windows-all
javax/swing/JTree/4908142/bug4908142.java JBR-5505 windows-all
javax/swing/JTree/4927934/bug4927934.java JBR-5505 windows-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java JBR-5505 windows-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java JBR-5505 windows-all
javax/swing/plaf/basic/BasicComboPopup/JComboBoxPopupLocation/JComboBoxPopupLocation.java JBR-5505 windows-all
javax/swing/plaf/basic/BasicTableHeaderUI/6394566/bug6394566.java JBR-5505 windows-all
javax/swing/plaf/synth/Test8043627.java JBR-5505 windows-all
javax/swing/PopupFactory/6276087/NonOpaquePopupMenuTest.java JBR-5505 windows-all
javax/swing/SwingUtilities/7088744/bug7088744.java JBR-5505 windows-all
javax/swing/text/JTextComponent/6361367/bug6361367.java JBR-5505 windows-all
javax/swing/ToolTipManager/Test6256140.java JBR-5505 windows-all
javax/swing/UIDefaults/6795356/TableTest.java JBR-5505 windows-all
javax/swing/plaf/basic/BasicComboPopup/JComboBoxPopupLocation/JComboBoxPopupLocation.java 8194945,JBR-5505 linux-all,macosx-all,windows-all
jdk/editpad/EditPadTest.java JBR-5505 windows-all
javax/swing/JPopupMenu/6217905/bug6217905.java JBR-5505 windows-all
javax/swing/JPopupMenu/6415145/bug6415145.java JBR-5505 windows-all
javax/swing/JPopupMenu/6515446/bug6515446.java JBR-5505 windows-all
javax/swing/JPopupMenu/6580930/bug6580930.java JBR-5505 windows-all
javax/swing/JPopupMenu/6800513/bug6800513.java JBR-5505 windows-all
javax/swing/JPopupMenu/6987844/bug6987844.java JBR-5505 windows-all
javax/swing/JPopupMenu/7156657/bug7156657.java JBR-5505 windows-all
javax/swing/JPopupMenu/8075063/ContextMenuScrollTest.java JBR-5505 windows-all
javax/swing/JPopupMenu/8075063/ContextMenuScrollTest.java JBR-6717,JBR-5505 linux-all,windows-all
javax/swing/JRadioButton/8041561/bug8041561.java JBR-5505 windows-all
javax/swing/JScrollBar/4708809/bug4708809.java JBR-5505 windows-all
javax/swing/JScrollBar/7163696/Test7163696.java JBR-5505 windows-all
@@ -231,24 +166,17 @@ javax/swing/JSlider/6401380/bug6401380.java JBR-5505 windows-all
javax/swing/JSpinner/4788637/bug4788637.java JBR-5505 windows-all
javax/swing/JSplitPane/4615365/JSplitPaneDividerLocationTest.java JBR-5505 windows-all
javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java JBR-5505 windows-all
javax/swing/JSplitPane/4885629/bug4885629.java JBR-5505 windows-all
javax/swing/JTabbedPane/4361477/bug4361477.java JBR-5505 windows-all
javax/swing/JSplitPane/4885629/bug4885629.java 8019935,JBR-5505 macosx-all,windows-all
javax/swing/JTabbedPane/4361477/bug4361477.java JBR-5932,JBR-5505 linux-all,windows-all
javax/swing/JTable/4275046/bug4275046.java JBR-5505 windows-all
javax/swing/JTable/7124218/SelectEditTableCell.java JBR-5505 windows-all
javax/swing/JTable/BugCellEditorListener.java JBR-5505 windows-all
javax/swing/JTableHeader/6884066/bug6884066.java JBR-5505 windows-all
javax/swing/JToolTip/4846413/bug4846413.java JBR-5505 windows-all
javax/swing/JToolTip/bug5047379.java JBR-5505 windows-all
javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java JBR-5505 windows-all
javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java 8159131,JBR-5505 linux-all,windows-all
javax/swing/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java JBR-5505 windows-all
javax/swing/plaf/nimbus/TestNimbusBGColor.java JBR-5505 windows-all
javax/swing/reliability/TaskUndJFrameProperties.java JBR-5505 windows-all
javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5505 windows-all
sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5505 windows-all
sanity/client/SwingSet/src/ToolTipDemoTest.java JBR-5505 windows-all
javax/swing/reliability/TaskUndJFrameProperties.java JBR-6586,JBR-5505 windows-x64,windows-all
sanity/client/SwingSet/src/ToolTipDemoTest.java 8293001,JBR-5505 linux-all,windows-all
sun/awt/dnd/8024061/bug8024061.java JBR-5505 windows-all
sun/java2d/GdiRendering/InsetClipping.java JBR-5505 windows-all
java/awt/event/MouseWheelEvent/DisabledComponent/DisabledComponent.java JBR-5505 windows-all
java/awt/List/ListGarbageCollectionTest/AwtListGarbageCollectionTest.java JBR-5505 windows-all
java/awt/Window/HandleWindowDestroyTest/HandleWindowDestroyTest.java JBR-5505 windows-all
java/awt/Window/HandleWindowDestroyTest/HandleWindowDestroyTest.java JBR-6540,JBR-5505 macosx-all,windows-all
javax/swing/JProgressBar/8015748/JProgressBarOrientationRobotTest.java JBR-5505 windows-all

View File

@@ -111,6 +111,7 @@
############################################################################
java/awt/Dialog/CloseDialog/CloseDialogTest.java JBR-6538 windows-all
java/awt/EventQueue/6980209/bug6980209.java JBR-6699 linux-all
java/awt/Focus/6378278/InputVerifierTest.java JBR-6700 linux-all
java/awt/Focus/6382144/EndlessLoopTest.java JBR-6701 linux-all
@@ -125,4 +126,5 @@ javax/swing/plaf/nimbus/8041642/bug8041642.java JBR-6698 linux-all
javax/swing/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java JBR-5952,JBR-6274 windows-x64,macosx-all
jb/java/awt/Focus/PopupIncomingFocusTest.java JBR-2651 generic-all
jb/java/awt/Window/UndecoratedDialogInTransientsChain.java JBR-6924 windows-all
jb/sun/awt/macos/InputMethodTest/KeyCodesTest.java JBR-6480 macosx-all

View File

@@ -99,13 +99,11 @@ java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5510 linu
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java 8222323,JBR-5510 windows-all,linux-all
java/awt/Window/MultiWindowApp/MultiWindowAppTest.java 8253184,JBR-5510 windows-all,linux-all
java/awt/Window/ShapedAndTranslucentWindows/SetShape.java 8253184,JBR-5510 windows-all,linux-all
java/awt/Window/TranslucentJAppletTest/TranslucentJAppletTest.java JBR-5510 linux-all
java/awt/Window/WindowTitleVisibleTest/WindowTitleVisibleTestLinuxGnome.java nobug linux-all
javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java nobug linux-all
javax/swing/JButton/8151303/PressedIconTest.java 8266246,JBR-5210,JBR-5510 macosx-aarch64,windows-all,linux-all
javax/swing/JComponent/7154030/bug7154030.java 8297454,JBR-5510 macosx-all,linux-all
javax/swing/JDialog/Transparency/TransparencyTest.java 8253184,JBR-5510 windows-all,linux-all
javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-5510,JBR-6283 windows-all,linux-all,macos-all
javax/swing/JEditorPane/TestBrowserBGColor.java JBR-5510 linux-all
javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java 8274106,JBR-5510 macosx-aarch64,linux-all
javax/swing/JInternalFrame/5066752/bug5066752.java 8253184,JBR-5510 windows-all,linux-all
@@ -130,7 +128,6 @@ javax/swing/plaf/nimbus/8057791/bug8057791.java 8253184,JBR-5510 windows-all,lin
javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5510,JBR-5951 linux-all,windows-x64
javax/swing/text/html/StyleSheet/bug4936917.java 8277816,JBR-899,JBR-5510 windows-all,macosx-aarch64,linux-all
jb/java/awt/MouseInfo/GetPointerInfoTest.java nobug linux-all
jb/java/awt/Window/BackgroundWindowOrderOnSpaceChange.java JBR-6486 macosx-all
jb/java/awt/Window/ZOrderOnModalDialogActivation.java JBR-5714 windows-all,linux-x64
sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5204 linux-all,macosx-all,windows-all

View File

@@ -0,0 +1,64 @@
com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java initial_runs generic-all
java/awt/BasicStroke/DashScaleMinWidth.java initial_runs generic-all
java/awt/BasicStroke/DashZeroWidth.java initial_runs generic-all
java/awt/datatransfer/Independence/IndependenceAWTTest.java initial_runs generic-all
java/awt/datatransfer/Independence/IndependenceSwingTest.java initial_runs generic-all
java/awt/event/ComponentEvent/ListItemEventsTest.java initial_runs generic-all
java/awt/font/Rotate/RotatedFontTest.java initial_runs generic-all
java/awt/font/Rotate/TranslatedOutlineTest.java initial_runs generic-all
java/awt/font/TextLayout/HitTest.java initial_runs generic-all
java/awt/font/TextLayout/TestGetPixelBounds.java initial_runs generic-all
java/awt/grab/MenuDragEvents/MenuDragEvents.java initial_runs generic-all
java/awt/Graphics2D/DrawString/RotTransText.java initial_runs generic-all
java/awt/GridLayout/ChangeGridSize/ChangeGridSize.java initial_runs generic-all
java/awt/image/DrawImage/SimpleManagedImage.java initial_runs generic-all
java/awt/image/DrawImage/SimpleUnmanagedImage.java initial_runs generic-all
java/awt/Mixing/AWT_Mixing/JListInGlassPaneOverlapping.java initial_runs generic-all
java/awt/Mixing/AWT_Mixing/JListOverlapping.java initial_runs generic-all
java/awt/Mixing/AWT_Mixing/JPopupMenuOverlapping.java initial_runs generic-all
java/awt/PopupMenu/PopupMenuLocation.java initial_runs generic-all
java/awt/PopupMenu/PopupMenuStayOpen.java initial_runs generic-all
java/awt/TextArea/AutoScrollOnSelectAndAppend/AutoScrollOnSelectAndAppend.java initial_runs generic-all
java/awt/TextComponent/MiddleMouseClickPasteTest.java initial_runs generic-all
java/awt/Window/ShapedAndTranslucentWindows/TranslucentChoice.java initial_runs generic-all
javax/imageio/plugins/shared/ImageWriterCompressionTest.java initial_runs generic-all
javax/swing/JCheckBox/ImageCheckboxFocus/ImageCheckboxTest.java initial_runs generic-all
javax/swing/JComboBox/6559152/bug6559152.java initial_runs generic-all
javax/swing/JComboBox/TestComboBoxComponentRendering.java initial_runs generic-all
javax/swing/JEditorPane/4666101/JEditorPaneNavigationTest.java initial_runs generic-all
javax/swing/JEditorPane/6917744/bug6917744.java initial_runs generic-all
javax/swing/JFileChooser/4400728/JFileChooserDefaultDirectoryTest.java initial_runs generic-all
javax/swing/JFileChooser/FileViewNPETest.java initial_runs generic-all
javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java initial_runs generic-all
javax/swing/JMenu/TestDisabledMenuForegroundColor.java initial_runs generic-all
javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java initial_runs generic-all
javax/swing/JScrollBar/bug4202954/bug4202954.java initial_runs generic-all
javax/swing/JScrollPane/HorizontalMouseWheelOnShiftPressed/HorizontalMouseWheelOnShiftPressed.java initial_runs generic-all
javax/swing/JSpinner/TestSelectedTextBackgroundColor.java initial_runs generic-all
javax/swing/JTable/6263446/bug6263446.java initial_runs generic-all
javax/swing/JTextArea/8149849/DNDTextToScaledArea.java initial_runs generic-all
javax/swing/JTextArea/JTextAreaOrientationTest.java initial_runs generic-all
javax/swing/JTextArea/JTextAreaWordWrapTest.java initial_runs generic-all
javax/swing/JTextField/4532513/DefaultCaretRequestsFocusTest.java initial_runs generic-all
javax/swing/JTextPane/JTextPaneDocumentWrapping.java initial_runs generic-all
javax/swing/JToolTip/TestTooltipBackgroundColor.java initial_runs generic-all
javax/swing/JTree/4518432/JTreeNodeCopyPasteTest.java initial_runs generic-all
javax/swing/JTree/6263446/bug6263446.java initial_runs generic-all
javax/swing/LookAndFeel/8145547/DemandGTK2.sh initial_runs generic-all
javax/swing/LookAndFeel/8145547/DemandGTK3.sh initial_runs generic-all
javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java initial_runs generic-all
javax/swing/plaf/basic/BasicHTML/4251579/bug4251579.java initial_runs generic-all
javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java initial_runs generic-all
javax/swing/plaf/nimbus/8041642/bug8041642.java initial_runs generic-all
javax/swing/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java initial_runs generic-all
javax/swing/plaf/nimbus/8057791/bug8057791.java initial_runs generic-all
javax/swing/text/FlowView/6318524/bug6318524.java initial_runs generic-all
javax/swing/text/html/CSS/4530474/bug4530474.java initial_runs generic-all
javax/swing/text/html/CSS/8231286/HtmlFontSizeTest.java initial_runs generic-all
javax/swing/text/ParagraphView/6364882/bug6364882.java initial_runs generic-all
javax/swing/text/StyledEditorKit/8016833/bug8016833.java initial_runs generic-all
javax/swing/text/Utilities/bug7045593.java initial_runs generic-all
javax/swing/UIDefaults/6302464/bug6302464.java initial_runs generic-all
jb/java/awt/Focus/PopupIncomingFocusTest.java initial_runs generic-all
jb/java/awt/Window/ZOrderOnModalDialogActivation.java initial_runs generic-all
jb/javax/swing/JLabel/JLabel/JLabel269.java initial_runs generic-all

View File

@@ -132,6 +132,8 @@ java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_4.java 820420
java/awt/event/MouseWheelEvent/WheelModifier/WheelModifier.java JBR-94 windows-x64,linux-all
java/awt/event/StressTest/MouseAndKeyEventStressTest.java JBR-6479 generic-all
java/awt/FileDialog/8003399/bug8003399.java JBR-6930 windows-all
java/awt/FileDialog/FileDialogIconTest/FileDialogIconTest.java 8160558 windows-all
java/awt/FlowLayout/PreferredLayoutSize.java JBR-6349 linux-all
java/awt/Focus/FocusOwnerFrameOnClick/FocusOwnerFrameOnClick.java 8081489 generic-all
java/awt/Focus/FocusSubRequestTest/FocusSubRequestTest.java JBR-5178 windows-all
@@ -151,9 +153,9 @@ java/awt/Frame/MaximizedUndecorated/MaximizedUndecorated.java 8022302 generic-al
java/awt/Frame/MaximizedToIconified/MaximizedToIconified.java 8296972 macosx-all
java/awt/Frame/MaximizedToOppositeScreen/MaximizedToOppositeScreenBig.java JBR-5303 windows-all
java/awt/Frame/RestoreToOppositeScreen/RestoreToOppositeScreen.java 8286840 linux-all
java/awt/FileDialog/FileDialogIconTest/FileDialogIconTest.java 8160558 windows-all
java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java JBR-4880,JBR-6683 windows-all,linux-all
java/awt/dnd/DragTriggerEventTest.java 8320083,JBR-6548 windows-all,linux-all
java/awt/dnd/DropActionChangeTest.java JBR-6489 generic-all
java/awt/dnd/DropActionChangeTest.java JBR-6489,JBR-6757 generic-all,windows-all
java/awt/dnd/DropTargetEnterExitTest/ExtraDragEnterTest.java 8029680 generic-all
java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java JBR-5730 linux-all
java/awt/dnd/DropTargetingTest.java JBR-6729 windows-all
@@ -161,6 +163,7 @@ java/awt/dnd/MissedDragEnterTest.java JBR-6091 windows-all
java/awt/dnd/MissingDragExitEventTest/MissingDragExitEventTest.java 8288839,JBR-5727,JBR-5959 windows-all,linux-all
java/awt/dnd/ModalDialogDeadlockTest.java JBR-6776 windows-all
java/awt/dnd/ModalDialogOnDropDeadlockTest.java JBR-6529 windows-all
java/awt/dnd/ModalDialogOnDragDeadlockTest.java JBR-6996 windows-all
java/awt/dnd/NestedHeavyweightDropTargetTest.java JBR-6580 windows-all
java/awt/dnd/NextDropActionTest/NextDropActionTest.java 8313633 macosx-aarch64
java/awt/dnd/URIListBetweenJVMsTest/URIListBetweenJVMsTest.java 8171510,JBR-881 macosx-all,linux-all
@@ -281,6 +284,7 @@ java/awt/Toolkit/ScreenInsetsTest/ScreenInsetsTest.java JBR-5812 linux-all
java/awt/Toolkit/SecurityTest/SecurityTest2.java JBR-5225 windows-all
java/awt/Toolkit/SunDisplayChangerLeakTest/SunDisplayChangerLeakTest.java JBR-5051 windows-all
java/awt/Toolkit/ToolkitPropertyTest/ToolkitPropertyTest_Enable.java 6847163 linux-all,windows-all
java/awt/TrayIcon/8072769/bug8072769.java JBR-6913 windows-all
java/awt/TrayIcon/ActionCommand/ActionCommand.java 8150540,JBR-3107 windows-all,linux-all
java/awt/TrayIcon/ActionEventMask/ActionEventMask.java 8150540,8242801,8295300,JBR-3107 windows-all,macosx-all,linux-all
java/awt/TrayIcon/ActionEventTest/ActionEventTest.java 8150540,8242801 windows-all,macosx-all
@@ -318,7 +322,7 @@ java/awt/Window/ShapedAndTranslucentWindows/Translucent.java 8222328 windows-all
java/awt/Window/AlwaysOnTop/AlwaysOnTopEvenOfWindow.java JBR-6686 linux-aarch64
java/awt/Window/AlwaysOnTop/AutoTestOnTop.java 6847593,8253184 linux-all,windows-all
java/awt/Window/AlwaysOnTop/TestAlwaysOnTopBeforeShow.java JBR-6661 windows-all
java/awt/Window/Grab/GrabTest.java 8253184 windows-all
java/awt/Window/Grab/GrabTest.java 8253184,JBR-6922 windows-all,linux-all
java/awt/Window/GrabSequence/GrabSequence.java 6848409 macosx-all,linux-all
java/awt/Window/LocationAtScreenCorner/LocationAtScreenCorner.java 8203371 linux-all
java/awt/FontClass/FontAccess.java JBR-5225 windows-all
@@ -685,9 +689,9 @@ java/awt/event/MouseEvent/RobotLWTest/RobotLWTest.java 8233568,JBR-5583 macosx-a
java/awt/event/MouseEvent/ClickDuringKeypress/ClickDuringKeypress.java 8233568,JBR-5915 macosx-all,linux-all
java/awt/event/KeyEvent/DeadKey/DeadKeyMacOSXInputText.java 8233568 macosx-all
java/awt/event/KeyEvent/DeadKey/deadKeyMacOSX.java 8233568 macosx-all
java/awt/TrayIcon/RightClickWhenBalloonDisplayed/RightClickWhenBalloonDisplayed.java 8238720 windows-all
java/awt/TrayIcon/RightClickWhenBalloonDisplayed/RightClickWhenBalloonDisplayed.java 8238720,JBR-6931 windows-all,linux-aarch64
java/awt/Paint/bug8024864.java JBR-6544 generic-all
java/awt/Paint/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java 8253184 windows-all
java/awt/Paint/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java 8253184,JBR-6844 windows-all,linux-all
java/awt/Paint/ListRepaint.java JBR-5060 linux-all
java/awt/Paint/PaintNativeOnUpdate.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/PopupMenu/PopupMenuLocation.java 8238720 windows-all
@@ -717,6 +721,7 @@ java/awt/Window/GetScreenLocation/GetScreenLocationTest.java 8225787,8253184 lin
# jdk_beans
java/beans/Beans/TypoInBeanDescription.java JBR-6916 windows-x64
java/beans/Introspector/8132566/OverridePropertyInfoTest.java 8132565 generic-all
java/beans/Introspector/8132566/OverrideUserDefPropertyInfoTest.java 8132565 generic-all
@@ -972,6 +977,7 @@ javax/swing/JPopupMenu/4760494/bug4760494.java 8253184 windows-all
javax/swing/JPopupMenu/4870644/bug4870644.java 8194130 macosx-all,linux-all
javax/swing/JPopupMenu/4966112/bug4966112.java 8253184 windows-all
javax/swing/JPopupMenu/6415145/bug6415145.java 8197552 windows-all
javax/swing/JPopupMenu/6495920/bug6495920.java JBR-6928 linux-x64
javax/swing/JPopupMenu/6515446/bug6515446.java 8197552,JBR-6531 windows-all,linux-all
javax/swing/JPopupMenu/6544309/bug6544309.java JBR-6532 windows-all,linux-all
javax/swing/JPopupMenu/6675802/bug6675802.java JBR-5767 windows-all
@@ -979,6 +985,7 @@ javax/swing/JPopupMenu/6800513/bug6800513.java 7184956,JBR-6533 macosx-all,linux
javax/swing/JPopupMenu/6827786/bug6827786.java JBR-6657 linux-all,windows-x64
javax/swing/JPopupMenu/6987844/bug6987844.java JBR-6718 linux-all,windows-all
javax/swing/JPopupMenu/8075063/ContextMenuScrollTest.java JBR-6717 linux-all
javax/swing/JPopupMenu/8173739/TestPopupMenu.java JBR-6959 linux-aarch64
javax/swing/JPopupMenu/SetInvokerJPopupMenuTest.java JBR-6021 linux-all
javax/swing/JRadioButton/8033699/bug8033699.java 8197552 windows-all
javax/swing/JRadioButton/8075609/bug8075609.java 8197552,8266085,JBR-5510 windows-all,linux-5.18.2-arch1-1
@@ -1020,7 +1027,7 @@ javax/swing/JFileChooser/8062561/bug8062561.java JBR-5767,JBR-5808 windows-all
javax/swing/JFileChooser/8194044/FileSystemRootTest.java JBR-5767 windows-all
javax/swing/JFileChooser/ShellFolderQueries/ShellFolderQueriesSecurityManagerTest.java JBR-5767 windows-all
javax/swing/JFrame/8016356/bug8016356.java JBR-108 windows-all
javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java JBR-5510,JBR-6999 linux-5.18.2-arch1-1,windows-x64,macosx-64
javax/swing/JScrollPane/HorizontalMouseWheelOnShiftPressed/HorizontalMouseWheelOnShiftPressed.java 8197552 windows-all
javax/swing/JSplitPane/4885629/bug4885629.java 8019935,JBR-5510 macosx-all,linux-5.18.2-arch1-1
javax/swing/JTabbedPane/4361477/bug4361477.java JBR-5932 linux-all
@@ -1031,6 +1038,7 @@ javax/swing/JToggleButton/TestSelectedKey.java JBR-5846 windows-all
javax/swing/JToolBar/4529206/bug4529206.java JBR-5387 linux-all
javax/swing/JToolTip/6219960/bug6219960.java 8253184 windows-all
javax/swing/SwingUtilities/TestBadBreak/TestBadBreak.java 8160720 generic-all
javax/swing/system/6799345/TestShutdown.java JBR-6881 windows-all
javax/swing/text/AbstractDocument/8190763/TestCCEOnEditEvent.java JBR-5799 windows-all
javax/swing/text/DefaultCaret/HidingSelection/HidingSelectionTest.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/text/TableView/TableViewLayoutTest.java 8194936,JBR-4316,JBR-5510 linux-5.18.2-arch1-1,linux-all
@@ -1046,12 +1054,12 @@ javax/swing/JInternalFrame/6647340/bug6647340.java 8253184 windows-all
javax/swing/JInternalFrame/8145060/TestJInternalFrameMinimize.java JBR-788 windows-all,linux-all
javax/swing/JInternalFrame/8145896/TestJInternalFrameMaximize.java JBR-5539 windows-all,,linux-5.18.2-arch1-1
javax/swing/JInternalFrame/Test6325652.java JBR-6111 windows-all
javax/swing/JInternalFrame/Test6505027.java JBR-5954 linux-all,osx-all
javax/swing/JInternalFrame/Test6505027.java JBR-5954 linux-all,macosx-all
javax/swing/JInternalFrame/Test6802868.java 8253184 windows-all
javax/swing/ProgressMonitor/ProgressMonitorEscapeKeyPress.java JBR-5210 windows-all
javax/swing/dnd/8139050/NativeErrorsInTableDnD.java 8202765,JBR-5210 macosx-all,linux-all,windows-all
javax/swing/JEditorPane/6917744/bug6917744.java 8213124 macosx-all
javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1
javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-5510,JBR-6283 windows-all,linux-5.18.2-arch1-1,macosx-all
javax/swing/JRadioButton/4314194/bug4314194.java 8298153 linux-all
javax/swing/JRootPane/4670486/bug4670486.java 8042381,8197552 macosx-all,windows-all
javax/swing/JRootPane/DefaultButtonTest.java JBR-5739 windows-all,linux-all
@@ -1068,6 +1076,7 @@ javax/swing/JInternalFrame/5066752/bug5066752.java 8253184,JBR-5510 windows-all,
javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java JBR-5510,JBR-6546 linux-5.18.2-arch1-1,windows-x64
javax/swing/JInternalFrame/8020708/bug8020708.java JBR-4879,JBR-6512 windows-all,linux-all
javax/swing/JInternalFrame/8069348/bug8069348.java 8253184,JBR-900 windows-all,linux-all
javax/swing/reliability/HangDuringStaticInitialization.java JBR-6958 windows-aarch64
javax/swing/reliability/TaskUndJFrameProperties.java JBR-6586 windows-x64
javax/swing/ToolTipManager/Test6256140.java 8197552 windows-all
javax/swing/text/DefaultEditorKit/4278839/bug4278839.java CODETOOLS-7901623 windows-all
@@ -1077,7 +1086,7 @@ javax/swing/text/JTextComponent/6361367/bug6361367.java JBR-5210 windows-all
javax/swing/text/StyledEditorKit/4506788/bug4506788.java JBR-180 windows-all
javax/swing/text/View/8014863/bug8014863.java JBR-5541 windows-all,linux-all
javax/swing/text/View/8156217/FPMethodCalledTest.java JBR-5541 linux-all
javax/swing/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java JBR-5952,JBR-6061 windows-x64,macosx-all
javax/swing/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java JBR-5952,JBR-6061 windows-all,macosx-all
javax/swing/UIDefaults/6795356/TableTest.java JBR-5767 windows-all
java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java 8253184,JBR-1656 windows-all,linux-all
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1
@@ -1239,7 +1248,7 @@ java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java JBR-5439 linux-all
java/awt/TextArea/TextAreaCursorTest/HoveringAndDraggingTest.java 8024986 macosx-all,linux-all
java/awt/TextArea/TextAreaTwicePack/TextAreaTwicePack.java 8253184 windows-all
java/awt/TextField/OverScrollTest/OverScrollTest.java 8253184 windows-all
java/awt/TextField/SelectionInvisibleTest/SelectionInvisibleTest.java JBR-6748 linux-x64
java/awt/TextField/SelectionInvisibleTest/SelectionInvisibleTest.java JBR-6748 linux-all
java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java 8256289 windows-all
java/awt/Focus/RequestFocusByCause/RequestFocusByCauseTest.java JBR-6335 linux-all
java/awt/Focus/RequestOnCompWithNullParent/RequestOnCompWithNullParent1.java JBR-6507 linux-all
@@ -1298,7 +1307,6 @@ javax/swing/SwingUtilities/4917669/bug4917669.java
javax/swing/SwingUtilities/7088744/bug7088744.java JBR-4677 windows-all
javax/swing/SwingUtilities/7146377/bug7146377.java JBR-4679 windows-all
java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java JBR-4880 windows-all
java/awt/event/KeyEvent/DeadKey/DeadKeySystemAssertionDialog.java JBR-4880,JBR-5706 windows-all,linux-all
java/awt/event/KeyEvent/KeyCharTest/KeyCharTest.java JBR-4880 windows-all
java/awt/Frame/LayoutOnMaximizeTest/LayoutOnMaximizeTest.java JBR-4880 windows-all
@@ -1318,7 +1326,7 @@ javax/swing/JSpinner/SpinnerTest.java JBR-4880 windows-all
javax/swing/JSpinner/TestJSpinnerFocusLost.java JBR-5210 windows-all
javax/swing/JTable/7068740/bug7068740.java 8197552,JBR-6680 windows-all,linux-all
javax/swing/JTable/7124218/SelectEditTableCell.java JBR-6679 linux-all,windows-all
javax/swing/JTable/8236907/LastVisibleRow.java JBR-6066 macosx-aarch64,linux-aarch64
javax/swing/JTable/8236907/LastVisibleRow.java JBR-6066 generic-all
javax/swing/JTable/BugCellEditorListener.java JBR-6678 linux-all,windows-all
javax/swing/JTable/JTableOrientationNavTest/JTableOrientationNavTest.java JBR-6836 linux-all
javax/swing/text/CSSBorder/6796710/bug6796710.java JBR-6465 windows-all,linux-aarch64
@@ -1345,6 +1353,7 @@ jb/javax/swing/JDialog/JDialog705.java JBR-4934 generic-all
jb/javax/swing/JEditorPane/ZeroMargin.java JBR-2256 generic-all
jb/javax/swing/JPopupMenu/JPopupMenuOutOfWindowTest.java JBR-5746 windows-all,linux-all
jb/java/awt/Window/BackgroundWindowOrderOnSpaceChange.java JBR-6486 macosx-all
jb/java/awt/Window/ModalDialogAndPopup.java JBR-4984 macosx-all
jb/java/awt/Window/ZOrderOnModalDialogActivation.java JBR-5714 windows-all
jb/java/api/frontend/CustomTitleBarDoubleClick.java JBR-4912 windows-all
@@ -1392,7 +1401,7 @@ java/awt/Mixing/LWPopupMenu.java JBR-824 generic-all
java/awt/Mixing/OpaqueTest.java JBR-5707 linux-all
java/awt/Mixing/OverlappingButtons.java JBR-5707 linux-all
java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Window/TranslucentJAppletTest/TranslucentJAppletTest.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Window/TranslucentJAppletTest/TranslucentJAppletTest.java JBR-4280 linux-all,macosx-all
javax/swing/JComponent/7154030/bug7154030.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JEditorPane/TestBrowserBGColor.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JRadioButton/8041561/bug8041561.java JBR-5510 linux-5.18.2-arch1-1
@@ -1410,7 +1419,7 @@ jb/java/awt/CustomTitleBar/HitTestNonClientArea.java JBR-5465,JBR-5550 windows-a
jb/java/awt/CustomTitleBar/MaximizeWindowTest.java JBR-5465,JBR-5550 windows-all
jb/java/awt/CustomTitleBar/MaximizedWindowFocusTest.java JBR-5828 windows-all
jb/java/awt/CustomTitleBar/MinimizingWindowTest.java JBR-5345 windows-x64
jb/java/awt/CustomTitleBar/MouseEventsOnClientArea.java JBR-5910 windows-x64
jb/java/awt/CustomTitleBar/MouseEventsOnClientArea.java JBR-6914 windows-all
jb/java/awt/CustomTitleBar/NativeControlsVisibilityTest.java JBR-5345,JBR-6835 windows-all,macosx-all
jb/java/awt/CustomTitleBar/WindowsControlWidthTest.java JBR-5345 windows-all
jb/java/awt/CustomTitleBar/WindowResizeTest.java JBR-5592 windows-all

View File

@@ -49,6 +49,7 @@ java/awt/Mixing/Validating.java JBR-5908,JBR-6090 linux-all,windows-all
java/awt/Modal/BlockedMouseInputTest2.java JBR-6090 windows-all
java/awt/Modal/BlockedMouseInputTest3.java JBR-6134 windows-x64
java/awt/PopupMenu/PopupMenuLocation.java 8238720,JBR-5071 windows-all,macosx-all,linux-all
java/awt/Window/AlwaysOnTop/SyncAlwaysOnTopFieldTest.java JBR-6845 linux-all
java/awt/Window/TopLevelLocation/TopLevelLocation.java JBR-5799 windows-all
java/awt/Window/WindowSizeDifferentScreens/WindowSizeDifferentScreens.java JBR-5513 linux-all
javax/swing/JComboBox/TestComboBoxComponentRendering.java JBR-6100 linux-all
@@ -58,6 +59,7 @@ javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradien
jb/java/awt/event/MouseEvent/ReleaseAndClickModifiers.java JBR-6589 windows-all
sanity/client/SwingSet/src/InternalFrameDemoTest.java 8253184,JBR-6685 windows-all,linux-all
sanity/client/SwingSet/src/ToolTipDemoTest.java 8293001,JBR-6293 linux-all,windows-all
sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5204 linux-all,macosx-all,windows-all
@@ -65,9 +67,13 @@ sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5204 linux-all,macosx-all,wi
# the below tests are not intended to be executed in S2 configurations because
# the tests contains tags to be launched for various scales including S2
#
java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java nobug generic-all
java/awt/Graphics/XORPaint.java#id0 nobug generic-all
java/awt/Graphics2D/LargeWindowPaintTest.java#ZGenerational nobug generic-all
java/awt/Graphics2D/LargeWindowPaintTest.java#ZSinglegen nobug generic-all
java/awt/Graphics2D/LargeWindowPaintTest.java#default nobug generic-all
java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java nobug generic-all
java/awt/Paint/PaintNativeOnUpdate.java nobug generic-all
java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java nobug generic-all
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java nobug generic-all
javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java nobug generic-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java nobug generic-all
@@ -101,7 +107,6 @@ jb/java/awt/Focus/PopupFromMenuTest.java JBR-5799 windows-all
jb/java/awt/Focus/PopupIncomingFocusTest.java JBR-2651 generic-all
jb/java/awt/Focus/RequestFocusInParent.java JBR-5715 windows-all
jb/java/awt/Focus/SecondLevelPopupTest.java JBR-6090 windows-all
jb/java/awt/Window/BackgroundWindowOrderOnSpaceChange.java JBR-6486 macosx-all
jb/java/awt/Window/UndecoratedDialogInTransientsChain.java JBR-6090 windows-all
jb/java/awt/Window/ZOrderOnModalDialogActivation.java JBR-5713 windows-all
jdk/editpad/EditPadTest.java JBR-5712 windows-all