mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-26 03:09:41 +01:00
Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6354ae8391 | ||
|
|
ddee227889 | ||
|
|
11164e1bad | ||
|
|
00db54c681 | ||
|
|
5d66bc6f42 | ||
|
|
55a8176c6d | ||
|
|
7f66caa16e | ||
|
|
08aeb1b30f | ||
|
|
b4a19f1154 | ||
|
|
2b2b48c6af | ||
|
|
38cc9f2592 | ||
|
|
94d95ad55c | ||
|
|
5b49bd750a | ||
|
|
6dc194e089 | ||
|
|
1f9120c283 | ||
|
|
0301983b6a | ||
|
|
73d3da2f28 | ||
|
|
321a4a3f83 | ||
|
|
8490a25a0f | ||
|
|
9fbb44cae7 | ||
|
|
d10e161b72 | ||
|
|
c9670beb62 | ||
|
|
a0f8c27bdf | ||
|
|
c39e4a4fcd | ||
|
|
51993ea193 |
@@ -11,7 +11,7 @@ can be found on the [releases page](https://github.com/JetBrains/JetBrainsRuntim
|
||||
|
||||
| IDE Version | Latest JBR | Date Released |
|
||||
| --- | --- | --- |
|
||||
| 2022.2 | [17.0.3-b463.3](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr17.0.3b463.3) | 24-May-2022 |
|
||||
| 2022.2 | [17.0.3-b469.3](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr17.0.3b469.3) | 9-Jun-2022 |
|
||||
|
||||
## Contents
|
||||
- [Welcome to JetBrains Runtime](#jetbrains-runtime)
|
||||
|
||||
@@ -60,7 +60,13 @@ else
|
||||
testContent=`paste -d '\t' $refFile <(echo "$curValues") | tail -n +1`
|
||||
fi
|
||||
|
||||
testContent=`echo "$testContent" | awk -F'\t' '{ if ($3>$2+$2*0.1) {print "* "$1"\t"$2"\t"$3"\t"(($2==0)?"-":$3/$2)} else {print " "$1"\t"$2"\t"$3"\t"(($2==0)?"-":$3/$2)} }'`
|
||||
testContent=`echo "$testContent" | tr "," "." | awk -F'\t' '{
|
||||
if ($3>$2+$2*0.1) {
|
||||
print "* "$1"\t"$2"\t"$3"\t"(($2>0)?$3/$2:"-")
|
||||
} else {
|
||||
print " "$1"\t"$2"\t"$3"\t"(($2>0)?$3/$2:"-")
|
||||
}
|
||||
}'`
|
||||
if [ -z $noHeaders ]; then
|
||||
echo "$header" > $resFile
|
||||
fi
|
||||
@@ -71,11 +77,12 @@ if [ -z $tc ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
failed=0
|
||||
echo "$testContent" 2>&1 | (
|
||||
while read -r s; do
|
||||
testname=`echo "$s" | cut -f 1 | tr -d "[:space:]" | tr -d "*"`
|
||||
duration=`echo "$s" | cut -f 3`
|
||||
failed=`echo "$s" | cut -c1 | grep -c "*"`
|
||||
echo "$s" | cut -c1 | grep -c "*" && failed=1
|
||||
echo \#\#teamcity[testStarted name=\'$testNamePrefix$testname\']
|
||||
echo "===>$s"
|
||||
echo \#\#teamcity[buildStatisticValue key=\'$testNamePrefix$testname\' value=\'$duration\']
|
||||
|
||||
@@ -59,8 +59,8 @@ function create_image_bundle {
|
||||
--module-path $__modules_path --no-man-pages --compress=2 \
|
||||
--add-modules $__modules --output $__root_dir || do_exit $?
|
||||
|
||||
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> $__arch_name/release
|
||||
if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then
|
||||
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> $__root_dir/release
|
||||
if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then
|
||||
sed 's/JBR/JBRSDK/g' $__root_dir/release > release
|
||||
mv release $__root_dir/release
|
||||
for dir in $(ls -d $IMAGES_DIR/jdk/*); do
|
||||
|
||||
@@ -54,7 +54,7 @@ function create_image_bundle {
|
||||
--module-path $__modules_path --no-man-pages --compress=2 \
|
||||
--add-modules $__modules --output $__root_dir || do_exit $?
|
||||
|
||||
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> $__arch_name/release
|
||||
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> $__root_dir/release
|
||||
if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then
|
||||
sed 's/JBR/JBRSDK/g' $__root_dir/release > release
|
||||
mv release $__root_dir/release
|
||||
|
||||
@@ -129,8 +129,17 @@ static inline uint32_t uimm(uint32_t val, int hi, int lo)
|
||||
|
||||
uint64_t replicate(uint64_t bits, int nbits, int count)
|
||||
{
|
||||
assert(count > 0, "must be");
|
||||
assert(nbits > 0, "must be");
|
||||
assert(count * nbits <= 64, "must be");
|
||||
|
||||
// Special case nbits == 64 since the shift below with that nbits value
|
||||
// would result in undefined behavior.
|
||||
if (nbits == 64) {
|
||||
return bits;
|
||||
}
|
||||
|
||||
uint64_t result = 0;
|
||||
// nbits may be 64 in which case we want mask to be -1
|
||||
uint64_t mask = ones(nbits);
|
||||
for (int i = 0; i < count ; i++) {
|
||||
result <<= nbits;
|
||||
|
||||
@@ -49,12 +49,10 @@ import java.awt.image.VolatileImage;
|
||||
import java.awt.peer.ComponentPeer;
|
||||
import java.awt.peer.ContainerPeer;
|
||||
import java.awt.peer.FileDialogPeer;
|
||||
import java.awt.peer.WindowPeer;
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.security.AccessController;
|
||||
import java.util.List;
|
||||
import sun.lwawt.LWWindowPeer;
|
||||
|
||||
import com.jetbrains.desktop.JBRFileDialog;
|
||||
import sun.awt.AWTAccessor;
|
||||
@@ -212,13 +210,6 @@ class CFileDialog implements FileDialogPeer {
|
||||
|
||||
@Override
|
||||
public void blockWindows(List<Window> windows) {
|
||||
for (Window w : windows) {
|
||||
WindowPeer wp =
|
||||
(WindowPeer) AWTAccessor.getComponentAccessor().getPeer(w);
|
||||
if (wp != null) {
|
||||
wp.setModalBlocked(target, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -381,7 +372,7 @@ class CFileDialog implements FileDialogPeer {
|
||||
|
||||
@Override
|
||||
public boolean isFocusable() {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -78,7 +78,7 @@ import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
public class CPlatformWindow extends CFRetainedResource implements PlatformWindow {
|
||||
private native long nativeCreateNSWindow(long nsViewPtr,long ownerPtr, long styleBits, double x, double y, double w, double h);
|
||||
private native long nativeCreateNSWindow(long nsViewPtr,long ownerPtr, long styleBits, double x, double y, double w, double h, double transparentTitleBarHeight);
|
||||
private static native void nativeSetNSWindowStyleBits(long nsWindowPtr, int mask, int data);
|
||||
private static native void nativeSetNSWindowAppearance(long nsWindowPtr, String appearanceName);
|
||||
private static native void nativeSetNSWindowMenuBar(long nsWindowPtr, long menuBarPtr);
|
||||
@@ -292,6 +292,10 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
new Property<CPlatformWindow>(WINDOW_TRANSPARENT_TITLE_BAR_HEIGHT) {
|
||||
public void applyProperty(final CPlatformWindow c, final Object value) {
|
||||
if (value != null && (value instanceof Float)) {
|
||||
boolean enabled = (float) value != 0f;
|
||||
c.setStyleBits(FULL_WINDOW_CONTENT, enabled);
|
||||
c.setStyleBits(TRANSPARENT_TITLE_BAR, enabled);
|
||||
c.setStyleBits(TITLE_VISIBLE, !enabled);
|
||||
c.execute(ptr -> AWTThreading.executeWaitToolkit(wait -> nativeSetTransparentTitleBarHeight(ptr, (float) value)));
|
||||
}
|
||||
}
|
||||
@@ -362,6 +366,8 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
responder = createPlatformResponder();
|
||||
contentView.initialize(peer, responder);
|
||||
|
||||
float transparentTitleBarHeight = getTransparentTitleBarHeight(_target);
|
||||
|
||||
Rectangle bounds;
|
||||
if (!IS(DECORATED, styleBits)) {
|
||||
// For undecorated frames the move/resize event does not come if the frame is centered on the screen
|
||||
@@ -382,7 +388,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
+ ", bounds=" + bounds);
|
||||
}
|
||||
long windowPtr = createNSWindow(viewPtr, ownerPtr, styleBits,
|
||||
bounds.x, bounds.y, bounds.width, bounds.height);
|
||||
bounds.x, bounds.y, bounds.width, bounds.height, transparentTitleBarHeight);
|
||||
if (logger.isLoggable(PlatformLogger.Level.FINE)) {
|
||||
logger.fine("window created: " + Long.toHexString(windowPtr));
|
||||
}
|
||||
@@ -397,7 +403,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
+ ", bounds=" + bounds);
|
||||
}
|
||||
long windowPtr = createNSWindow(viewPtr, 0, styleBits,
|
||||
bounds.x, bounds.y, bounds.width, bounds.height);
|
||||
bounds.x, bounds.y, bounds.width, bounds.height, transparentTitleBarHeight);
|
||||
if (logger.isLoggable(PlatformLogger.Level.FINE)) {
|
||||
logger.fine("window created: " + Long.toHexString(windowPtr));
|
||||
}
|
||||
@@ -559,6 +565,14 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
if (prop != null) {
|
||||
styleBits = SET(styleBits, TITLE_VISIBLE, Boolean.parseBoolean(prop.toString()));
|
||||
}
|
||||
|
||||
prop = rootpane.getClientProperty(WINDOW_TRANSPARENT_TITLE_BAR_HEIGHT);
|
||||
if (prop != null) {
|
||||
boolean enabled = Float.parseFloat(prop.toString()) != 0f;
|
||||
styleBits = SET(styleBits, FULL_WINDOW_CONTENT, enabled);
|
||||
styleBits = SET(styleBits, TRANSPARENT_TITLE_BAR, enabled);
|
||||
styleBits = SET(styleBits, TITLE_VISIBLE, !enabled);
|
||||
}
|
||||
}
|
||||
|
||||
if (isDialog) {
|
||||
@@ -1437,8 +1451,16 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
return false;
|
||||
}
|
||||
|
||||
private long createNSWindow(long nsViewPtr,long ownerPtr, long styleBits, double x, double y, double w, double h) {
|
||||
return AWTThreading.executeWaitToolkit(() -> nativeCreateNSWindow(nsViewPtr, ownerPtr, styleBits, x, y, w, h));
|
||||
private long createNSWindow(long nsViewPtr,
|
||||
long ownerPtr,
|
||||
long styleBits,
|
||||
double x,
|
||||
double y,
|
||||
double w,
|
||||
double h,
|
||||
double transparentTitleBarHeight) {
|
||||
return AWTThreading.executeWaitToolkit(() ->
|
||||
nativeCreateNSWindow(nsViewPtr, ownerPtr, styleBits, x, y, w, h, transparentTitleBarHeight));
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
@@ -1472,20 +1494,24 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
isFullScreenAnimationOn = false;
|
||||
}
|
||||
|
||||
// JBR API internals
|
||||
private static void setCustomDecorationTitleBarHeight(Window target, ComponentPeer peer, float height) {
|
||||
if (peer instanceof LWComponentPeer) {
|
||||
PlatformWindow platformWindow = ((LWComponentPeer<?, ?>) peer).getPlatformWindow();
|
||||
if (platformWindow instanceof CPlatformWindow) {
|
||||
((CPlatformWindow) platformWindow).execute(ptr -> {
|
||||
AWTThreading.executeWaitToolkit(wait -> nativeSetTransparentTitleBarHeight(ptr, height));
|
||||
});
|
||||
if (target instanceof javax.swing.RootPaneContainer) {
|
||||
final javax.swing.JRootPane rootpane = ((javax.swing.RootPaneContainer)target).getRootPane();
|
||||
if (rootpane != null) rootpane.putClientProperty(WINDOW_TRANSPARENT_TITLE_BAR_HEIGHT, height);
|
||||
private float getTransparentTitleBarHeight(Window target) {
|
||||
if (target instanceof javax.swing.RootPaneContainer) {
|
||||
final javax.swing.JRootPane rootpane = ((javax.swing.RootPaneContainer)target).getRootPane();
|
||||
if (rootpane != null) {
|
||||
Object transparentTitleBarHeightProperty = rootpane.getClientProperty(WINDOW_TRANSPARENT_TITLE_BAR_HEIGHT);
|
||||
if (transparentTitleBarHeightProperty != null) {
|
||||
return Float.parseFloat(transparentTitleBarHeightProperty.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
// JBR API internals
|
||||
private static void setCustomDecorationTitleBarHeight(Window target, ComponentPeer peer, float height) {
|
||||
if (target instanceof javax.swing.RootPaneContainer) {
|
||||
final javax.swing.JRootPane rootpane = ((javax.swing.RootPaneContainer)target).getRootPane();
|
||||
if (rootpane != null) rootpane.putClientProperty(WINDOW_TRANSPARENT_TITLE_BAR_HEIGHT, height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -416,7 +416,7 @@ AWT_NS_WINDOW_IMPLEMENTATION
|
||||
}
|
||||
|
||||
if (IS(mask, TITLE_VISIBLE) && [self.nsWindow respondsToSelector:@selector(setTitleVisibility:)]) {
|
||||
[self.nsWindow setTitleVisibility:(IS(bits, TITLE_VISIBLE)) ? NSWindowTitleVisible :NSWindowTitleHidden];
|
||||
[self.nsWindow setTitleVisibility:(IS(bits, TITLE_VISIBLE) ? NSWindowTitleVisible : NSWindowTitleHidden)];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -426,6 +426,7 @@ AWT_NS_WINDOW_IMPLEMENTATION
|
||||
styleBits:(jint)bits
|
||||
frameRect:(NSRect)rect
|
||||
contentView:(NSView *)view
|
||||
transparentTitleBarHeight:(CGFloat)transparentTitleBarHeight
|
||||
{
|
||||
AWT_ASSERT_APPKIT_THREAD;
|
||||
|
||||
@@ -486,6 +487,11 @@ AWT_ASSERT_APPKIT_THREAD;
|
||||
self.nsWindow.collectionBehavior = NSWindowCollectionBehaviorManaged;
|
||||
self.isEnterFullScreen = NO;
|
||||
|
||||
_transparentTitleBarHeight = transparentTitleBarHeight;
|
||||
if (transparentTitleBarHeight != 0.0 && !self.isFullScreen) {
|
||||
[self setUpTransparentTitleBar];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -1429,38 +1435,32 @@ static const CGFloat DefaultHorizontalTitleBarButtonOffset = 20.0;
|
||||
- (void) setTransparentTitleBarHeight: (CGFloat) transparentTitleBarHeight
|
||||
{
|
||||
if (_transparentTitleBarHeight == transparentTitleBarHeight) return;
|
||||
|
||||
if (_transparentTitleBarHeight != 0.0f) {
|
||||
_transparentTitleBarHeight = transparentTitleBarHeight;
|
||||
if (transparentTitleBarHeight == 0.0f) {
|
||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||
[self.nsWindow setTitlebarAppearsTransparent:NO];
|
||||
[self.nsWindow setTitleVisibility:NSWindowTitleVisible];
|
||||
[self.nsWindow setStyleMask:[self.nsWindow styleMask]&(~NSWindowStyleMaskFullSizeContentView)];
|
||||
|
||||
if (!self.isFullScreen) {
|
||||
if (!self.isFullScreen) {
|
||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||
[self resetTitleBar];
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
} else if (_transparentTitleBarHeightConstraint != nil || _transparentTitleBarButtonCenterXConstraints != nil) {
|
||||
[self updateTransparentTitleBarConstraints];
|
||||
}
|
||||
} else {
|
||||
_transparentTitleBarHeight = transparentTitleBarHeight;
|
||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||
[self.nsWindow setTitlebarAppearsTransparent:YES];
|
||||
[self.nsWindow setTitleVisibility:NSWindowTitleHidden];
|
||||
[self.nsWindow setStyleMask:[self.nsWindow styleMask]|NSWindowStyleMaskFullSizeContentView];
|
||||
|
||||
if (!self.isFullScreen) {
|
||||
if (!self.isFullScreen) {
|
||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||
[self setUpTransparentTitleBar];
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@end // AWTWindow
|
||||
|
||||
@implementation AWTWindowDragView {
|
||||
CGFloat _accumulatedDragDelta;
|
||||
enum WindowDragState {
|
||||
NO_DRAG, // Mouse not dragging
|
||||
SKIP_DRAG, // Mouse dragging in non-draggable area
|
||||
@@ -1481,9 +1481,9 @@ static const CGFloat DefaultHorizontalTitleBarButtonOffset = 20.0;
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL)isInDraggableArea:(NSPoint)point
|
||||
- (jint)hitTestCustomDecoration:(NSPoint)point
|
||||
{
|
||||
BOOL returnValue = YES;
|
||||
jint returnValue = java_awt_Window_CustomWindowDecoration_NO_HIT_SPOT;
|
||||
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
|
||||
jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow);
|
||||
if (platformWindow != NULL) {
|
||||
@@ -1495,8 +1495,7 @@ static const CGFloat DefaultHorizontalTitleBarButtonOffset = 20.0;
|
||||
if (awtWindow != NULL) {
|
||||
NSRect frame = [self.window frame];
|
||||
float windowHeight = frame.size.height;
|
||||
returnValue = (*env)->CallIntMethod(env, awtWindow, jm_hitTestCustomDecoration, (jint) point.x, (jint) (windowHeight - point.y)) ==
|
||||
(jint) java_awt_Window_CustomWindowDecoration_NO_HIT_SPOT ? YES : NO;
|
||||
returnValue = (*env)->CallIntMethod(env, awtWindow, jm_hitTestCustomDecoration, (jint) point.x, (jint) (windowHeight - point.y));
|
||||
CHECK_EXCEPTION();
|
||||
(*env)->DeleteLocalRef(env, awtWindow);
|
||||
}
|
||||
@@ -1508,6 +1507,7 @@ static const CGFloat DefaultHorizontalTitleBarButtonOffset = 20.0;
|
||||
- (void)mouseDown:(NSEvent *)event
|
||||
{
|
||||
_draggingWindow = NO_DRAG;
|
||||
_accumulatedDragDelta = 0.0;
|
||||
// We don't follow the regular responder chain here since the native window swallows events in some cases
|
||||
[[self.window contentView] deliverJavaMouseEvent:event];
|
||||
}
|
||||
@@ -1515,12 +1515,17 @@ static const CGFloat DefaultHorizontalTitleBarButtonOffset = 20.0;
|
||||
- (void)mouseDragged:(NSEvent *)event
|
||||
{
|
||||
if (_draggingWindow == NO_DRAG) {
|
||||
BOOL shouldStartWindowDrag = [self isInDraggableArea:event.locationInWindow];
|
||||
if (shouldStartWindowDrag) {
|
||||
[self.window performWindowDragWithEvent:event];
|
||||
_draggingWindow = DRAG;
|
||||
} else {
|
||||
_draggingWindow = SKIP_DRAG;
|
||||
jint hitSpot = [self hitTestCustomDecoration:event.locationInWindow];
|
||||
switch (hitSpot) {
|
||||
case java_awt_Window_CustomWindowDecoration_DRAGGABLE_AREA:
|
||||
// Start drag only after 4px threshold inside DRAGGABLE_AREA
|
||||
if ((_accumulatedDragDelta += fabs(event.deltaX) + fabs(event.deltaY)) <= 4.0) break;
|
||||
case java_awt_Window_CustomWindowDecoration_NO_HIT_SPOT:
|
||||
[self.window performWindowDragWithEvent:event];
|
||||
_draggingWindow = DRAG;
|
||||
break;
|
||||
default:
|
||||
_draggingWindow = SKIP_DRAG;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1530,7 +1535,8 @@ static const CGFloat DefaultHorizontalTitleBarButtonOffset = 20.0;
|
||||
if (_draggingWindow == DRAG) {
|
||||
_draggingWindow = NO_DRAG;
|
||||
} else {
|
||||
if (event.clickCount == 2 && [self isInDraggableArea:event.locationInWindow]) {
|
||||
jint hitSpot = [self hitTestCustomDecoration:event.locationInWindow];
|
||||
if (event.clickCount == 2 && hitSpot == java_awt_Window_CustomWindowDecoration_NO_HIT_SPOT) {
|
||||
[self.window performZoom:nil];
|
||||
}
|
||||
|
||||
@@ -1563,10 +1569,10 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetAllowAutom
|
||||
/*
|
||||
* Class: sun_lwawt_macosx_CPlatformWindow
|
||||
* Method: nativeCreateNSWindow
|
||||
* Signature: (JJIIII)J
|
||||
* Signature: (JJIDDDDD)J
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeCreateNSWindow
|
||||
(JNIEnv *env, jobject obj, jlong contentViewPtr, jlong ownerPtr, jlong styleBits, jdouble x, jdouble y, jdouble w, jdouble h)
|
||||
(JNIEnv *env, jobject obj, jlong contentViewPtr, jlong ownerPtr, jlong styleBits, jdouble x, jdouble y, jdouble w, jdouble h, jdouble transparentTitleBarHeight)
|
||||
{
|
||||
__block AWTWindow *window = nil;
|
||||
|
||||
@@ -1593,7 +1599,8 @@ JNI_COCOA_ENTER(env);
|
||||
ownerWindow:owner
|
||||
styleBits:styleBits
|
||||
frameRect:frameRect
|
||||
contentView:contentView];
|
||||
contentView:contentView
|
||||
transparentTitleBarHeight:(CGFloat)transparentTitleBarHeight];
|
||||
// the window is released is CPlatformWindow.nativeDispose()
|
||||
|
||||
if (window) {
|
||||
@@ -1685,8 +1692,8 @@ JNI_COCOA_EXIT(env);
|
||||
|
||||
/*
|
||||
* Class: sun_lwawt_macosx_CPlatformWindow
|
||||
* Method: nativeSetNSWindowStyleBits
|
||||
* Signature: (JII)V
|
||||
* Method: nativeSetNSWindowAppearance
|
||||
* Signature: (JLjava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowAppearance
|
||||
(JNIEnv *env, jclass clazz, jlong windowPtr, jstring appearanceName)
|
||||
|
||||
@@ -80,7 +80,9 @@ void MTLRenderQueue_CheckPreviousOp(jint op) {
|
||||
if (mtlc != NULL) {
|
||||
[mtlc.encoderManager endEncoder];
|
||||
|
||||
if (op == MTL_OP_RESET_PAINT || op == MTL_OP_SYNC || op == MTL_OP_SHAPE_CLIP_SPANS) {
|
||||
if (op == MTL_OP_RESET_PAINT || op == MTL_OP_SYNC || op == MTL_OP_SHAPE_CLIP_SPANS ||
|
||||
mtlPreviousOp == MTL_OP_MASK_OP)
|
||||
{
|
||||
MTLCommandBufferWrapper *cbwrapper = [mtlc pullCommandBufferWrapper];
|
||||
id <MTLCommandBuffer> commandbuf = [cbwrapper getCommandBuffer];
|
||||
[commandbuf addCompletedHandler:^(id <MTLCommandBuffer> commandbuf) {
|
||||
|
||||
@@ -4033,7 +4033,8 @@ public class Window extends Container implements Accessible {
|
||||
MINIMIZE_BUTTON = 2,
|
||||
MAXIMIZE_BUTTON = 3,
|
||||
CLOSE_BUTTON = 4,
|
||||
MENU_BAR = 5;
|
||||
MENU_BAR = 5,
|
||||
DRAGGABLE_AREA = 6;
|
||||
|
||||
void setCustomDecorationEnabled(Window window, boolean enabled) {
|
||||
window.hasCustomDecoration = enabled;
|
||||
|
||||
@@ -47,6 +47,7 @@ import java.util.Map;
|
||||
|
||||
import sun.awt.EmbeddedFrame;
|
||||
import sun.awt.OSInfo;
|
||||
import sun.awt.SunToolkit;
|
||||
import sun.swing.SwingAccessor;
|
||||
|
||||
import static javax.swing.ClientPropertyKey.PopupFactory_FORCE_HEAVYWEIGHT_POPUP;
|
||||
@@ -393,9 +394,13 @@ public class PopupFactory {
|
||||
}
|
||||
}
|
||||
|
||||
Toolkit toolkit = Toolkit.getDefaultToolkit();
|
||||
if (popup == null ||
|
||||
((JWindow) popup.getComponent())
|
||||
.getFocusableWindowState() != focusPopup) {
|
||||
.getFocusableWindowState() != focusPopup ||
|
||||
(toolkit instanceof SunToolkit) &&
|
||||
(((SunToolkit) toolkit).popupMenusAreSpecial()) &&
|
||||
popup.isPopupMenu() != (contents instanceof JPopupMenu)) {
|
||||
|
||||
if(popup != null) {
|
||||
// The recycled popup can't serve us well
|
||||
@@ -419,6 +424,11 @@ public class PopupFactory {
|
||||
return popup;
|
||||
}
|
||||
|
||||
private boolean isPopupMenu() {
|
||||
Component[] components = ((JWindow) getComponent()).getContentPane().getComponents();
|
||||
return components.length == 1 && components[0] instanceof JPopupMenu;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a previously disposed heavy weight <code>Popup</code>
|
||||
* associated with <code>window</code>. This will return null if
|
||||
|
||||
@@ -446,7 +446,11 @@ public class AWTThreading {
|
||||
synchronized (eventDispatchThreadStateNotifiers) {
|
||||
if (!isEventDispatchThreadFree) {
|
||||
eventDispatchThreadStateNotifiers.add(future);
|
||||
future.whenComplete((r, ex) -> eventDispatchThreadStateNotifiers.remove(future));
|
||||
future.whenComplete((r, ex) -> {
|
||||
synchronized (eventDispatchThreadStateNotifiers) {
|
||||
eventDispatchThreadStateNotifiers.remove(future);
|
||||
}
|
||||
});
|
||||
return future;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1992,6 +1992,10 @@ public abstract class SunToolkit extends Toolkit
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean popupMenusAreSpecial() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not a containing top level window for the passed
|
||||
* component is
|
||||
|
||||
@@ -415,6 +415,10 @@ abstract class XDecoratedPeer extends XWindowPeer {
|
||||
insets_corrected = true;
|
||||
reshape(dimensions, SET_SIZE, false);
|
||||
} else if (xe.get_parent() == root) {
|
||||
if (!isReparented()) {
|
||||
// X server on Windows (e.g. Cygwin/X) does perform a no-op reparenting to the root window
|
||||
return;
|
||||
}
|
||||
configure_seen = false;
|
||||
insets_corrected = false;
|
||||
|
||||
@@ -1209,7 +1213,7 @@ abstract class XDecoratedPeer extends XWindowPeer {
|
||||
|
||||
@Override
|
||||
boolean isOverrideRedirect() {
|
||||
return Window.Type.POPUP.equals(getWindowType());
|
||||
return Window.Type.POPUP.equals(getWindowType()) && !XWM.isKDE2();
|
||||
}
|
||||
|
||||
public boolean requestWindowFocus(long time, boolean timeProvided) {
|
||||
|
||||
@@ -156,6 +156,95 @@ public class XInputMethod extends X11InputMethod {
|
||||
return peer.getContentWindow();
|
||||
}
|
||||
|
||||
|
||||
static void onXKeyEventFiltering(final boolean isXKeyEventFiltered) {
|
||||
// Fix of JBR-1573, JBR-2444, JBR-4394 (a.k.a. IDEA-246833).
|
||||
// Input method is considered broken if and only if all the following statements are true:
|
||||
// * XFilterEvent have filtered more than filteredEventsThreshold last events of types KeyPress, KeyRelease;
|
||||
// * Input method hasn't been changed (e.g. recreated);
|
||||
// * The input context is not in preedit state (XNPreeditStartCallback has been called but then XNPreeditDoneCallback - hasn't)
|
||||
|
||||
// The functionality is disabled
|
||||
if (BrokenImDetectionContext.EATEN_EVENTS_THRESHOLD < 1) {
|
||||
return;
|
||||
}
|
||||
// Must be called within AWT_LOCK
|
||||
if (!XToolkit.isAWTLockHeldByCurrentThread()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isXKeyEventFiltered) {
|
||||
final long nativeDataPtr = BrokenImDetectionContext.obtainCurrentXimNativeDataPtr();
|
||||
if (nativeDataPtr == 0) {
|
||||
++BrokenImDetectionContext.eatenKeyEventsCount;
|
||||
} else {
|
||||
final int isDuringPreediting = BrokenImDetectionContext.isDuringPreediting(nativeDataPtr);
|
||||
if (isDuringPreediting > 0) {
|
||||
BrokenImDetectionContext.eatenKeyEventsCount = 0;
|
||||
} else if (isDuringPreediting == 0) {
|
||||
++BrokenImDetectionContext.eatenKeyEventsCount;
|
||||
} else if (BrokenImDetectionContext.isCurrentXicPassive(nativeDataPtr)) {
|
||||
// Unfortunately for passive XIC (XIMPreeditNothing | XIMStatusNothing) we have no way to get know
|
||||
// whether the XIC is in preediting state or not, so we won't handle this case.
|
||||
BrokenImDetectionContext.eatenKeyEventsCount = 0;
|
||||
} else {
|
||||
++BrokenImDetectionContext.eatenKeyEventsCount;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
BrokenImDetectionContext.eatenKeyEventsCount = 0;
|
||||
}
|
||||
|
||||
if (BrokenImDetectionContext.eatenKeyEventsCount > BrokenImDetectionContext.EATEN_EVENTS_THRESHOLD) {
|
||||
BrokenImDetectionContext.eatenKeyEventsCount = 0;
|
||||
recreateAllXIC();
|
||||
}
|
||||
}
|
||||
|
||||
private static class BrokenImDetectionContext {
|
||||
static final int EATEN_EVENTS_THRESHOLD;
|
||||
|
||||
static int eatenKeyEventsCount = 0;
|
||||
|
||||
/**
|
||||
* @return pointer to X11InputMethodData
|
||||
*/
|
||||
static native long obtainCurrentXimNativeDataPtr();
|
||||
|
||||
/**
|
||||
* <0 - unknown
|
||||
* >0 - true
|
||||
* 0 - false
|
||||
*/
|
||||
static native int isDuringPreediting(long ximNativeDataPtr);
|
||||
|
||||
static native boolean isCurrentXicPassive(long ximNativeDataPtr);
|
||||
|
||||
|
||||
static {
|
||||
int eatenEventsThresholdInitializer = 7;
|
||||
final String eventsThresholdMode = System.getProperty("recreate.x11.input.method", "true");
|
||||
|
||||
if ("false".equals(eventsThresholdMode)) {
|
||||
eatenEventsThresholdInitializer = 0;
|
||||
} else if (!"true".equals(eventsThresholdMode)) {
|
||||
try {
|
||||
eatenEventsThresholdInitializer = Integer.parseInt(eventsThresholdMode);
|
||||
} catch (NumberFormatException err) {
|
||||
log.warning(
|
||||
"Invalid value of \"recreate.x11.input.method\" system property \"" +
|
||||
eventsThresholdMode +
|
||||
"\". Only \"true\", \"false\" and integer values are supported",
|
||||
err
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
EATEN_EVENTS_THRESHOLD = eatenEventsThresholdInitializer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Native methods
|
||||
*/
|
||||
|
||||
@@ -1024,21 +1024,28 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (keyEventLog.isLoggable(PlatformLogger.Level.FINE) && (
|
||||
ev.get_type() == XConstants.KeyPress
|
||||
|| ev.get_type() == XConstants.KeyRelease)) {
|
||||
|
||||
final boolean isKeyEvent = ( (ev.get_type() == XConstants.KeyPress) ||
|
||||
(ev.get_type() == XConstants.KeyRelease) );
|
||||
|
||||
if (keyEventLog.isLoggable(PlatformLogger.Level.FINE) && isKeyEvent) {
|
||||
keyEventLog.fine("before XFilterEvent:" + ev);
|
||||
}
|
||||
if (XlibWrapper.XFilterEvent(ev.getPData(), w)) {
|
||||
if (isKeyEvent) {
|
||||
XInputMethod.onXKeyEventFiltering(true);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (keyEventLog.isLoggable(PlatformLogger.Level.FINE) && (
|
||||
ev.get_type() == XConstants.KeyPress
|
||||
|| ev.get_type() == XConstants.KeyRelease)) {
|
||||
if (keyEventLog.isLoggable(PlatformLogger.Level.FINE) && isKeyEvent) {
|
||||
keyEventLog.fine(
|
||||
"after XFilterEvent:" + ev); // IS THIS CORRECT?
|
||||
}
|
||||
|
||||
if (isKeyEvent) {
|
||||
XInputMethod.onXKeyEventFiltering(false);
|
||||
}
|
||||
|
||||
dispatchEvent(ev);
|
||||
// free event data if XGetEventData was called
|
||||
XlibWrapper.XFreeEventData(getDisplay(), ev.pData);
|
||||
@@ -2922,6 +2929,11 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
|
||||
return ((X11GraphicsConfig)gc).isTranslucencyCapable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean popupMenusAreSpecial() {
|
||||
return XWM.isKDE2();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of "sun.awt.disablegrab" property. Default
|
||||
* value is {@code false}.
|
||||
|
||||
@@ -28,19 +28,12 @@ package sun.awt.X11;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ComponentEvent;
|
||||
import java.awt.event.FocusEvent;
|
||||
import java.awt.event.InvocationEvent;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.awt.peer.ComponentPeer;
|
||||
import java.awt.peer.WindowPeer;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.locks.Condition;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.function.BooleanSupplier;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import sun.awt.AWTAccessor;
|
||||
import sun.awt.AWTAccessor.ComponentAccessor;
|
||||
@@ -54,6 +47,9 @@ import sun.util.logging.PlatformLogger;
|
||||
|
||||
import sun.security.action.GetPropertyAction;
|
||||
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.JWindow;
|
||||
|
||||
class XWindowPeer extends XPanelPeer implements WindowPeer,
|
||||
DisplayChangedListener {
|
||||
|
||||
@@ -1238,7 +1234,11 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
|
||||
|
||||
@Override
|
||||
void setUserTimeBeforeShowing() {
|
||||
if (winAttr.initialFocus || shouldSuppressWmTakeFocus()) {
|
||||
if (XWM.getWMID() == XWM.KDE2_WM && isSimpleWindow() && ((Window)target).getType() == Window.Type.POPUP) {
|
||||
// Workaround, to suppress blinking of taskbar icon, when hover popup is displayed for a background window
|
||||
setUserTime(XToolkit.getCurrentServerTime(), false);
|
||||
}
|
||||
else if (winAttr.initialFocus || shouldSuppressWmTakeFocus()) {
|
||||
super.setUserTimeBeforeShowing();
|
||||
}
|
||||
else {
|
||||
@@ -1329,7 +1329,15 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
|
||||
|
||||
boolean isOverrideRedirect() {
|
||||
return XWM.getWMID() == XWM.OPENLOOK_WM ||
|
||||
Window.Type.POPUP.equals(getWindowType());
|
||||
Window.Type.POPUP.equals(getWindowType()) && (!XWM.isKDE2() || isPopupMenuWindow());
|
||||
}
|
||||
|
||||
private boolean isPopupMenuWindow() {
|
||||
if (!(target instanceof JWindow)) return false;
|
||||
Container contentPane = ((JWindow) target).getContentPane();
|
||||
if (contentPane == null) return false;
|
||||
Component[] components = contentPane.getComponents();
|
||||
return components.length == 1 && components[0] instanceof JPopupMenu;
|
||||
}
|
||||
|
||||
final boolean isOLWMDecorBug() {
|
||||
|
||||
@@ -364,8 +364,8 @@ public abstract class X11InputMethod extends X11InputMethodBase {
|
||||
}
|
||||
}
|
||||
|
||||
static void recreateAllXIC() {
|
||||
// NOTE: called from native within AWT_LOCK
|
||||
protected static void recreateAllXIC() {
|
||||
// NOTE: called within AWT_LOCK
|
||||
Map<X11InputMethod, Integer> im2ctxid = new HashMap<>(activeInputMethods.size());
|
||||
for (X11InputMethod im : activeInputMethods) {
|
||||
im2ctxid.put(im, im.releaseXIC());
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
|
||||
#include <sun_awt_X11InputMethodBase.h>
|
||||
#include <sun_awt_X11_XInputMethod.h>
|
||||
#include <sun_awt_X11_XInputMethod_BrokenImDetectionContext.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -129,6 +130,10 @@ typedef struct _X11InputMethodData {
|
||||
#endif
|
||||
char *lookup_buf; /* buffer used for XmbLookupString */
|
||||
int lookup_buf_len; /* lookup buffer size in bytes */
|
||||
|
||||
struct {
|
||||
Boolean isBetweenPreeditStartAndPreeditDone;
|
||||
} brokenImDetectionContext;
|
||||
} X11InputMethodData;
|
||||
|
||||
/*
|
||||
@@ -404,6 +409,8 @@ freeX11InputMethodData(JNIEnv *env, X11InputMethodData *pX11IMData)
|
||||
free((void *)pX11IMData->lookup_buf);
|
||||
}
|
||||
|
||||
pX11IMData->brokenImDetectionContext.isBetweenPreeditStartAndPreeditDone = False;
|
||||
|
||||
free((void *)pX11IMData);
|
||||
}
|
||||
|
||||
@@ -1041,6 +1048,8 @@ createXIC(JNIEnv * env, X11InputMethodData *pX11IMData, Window w)
|
||||
XNResetState, XIMInitialState,
|
||||
NULL);
|
||||
|
||||
pX11IMData->brokenImDetectionContext.isBetweenPreeditStartAndPreeditDone = False;
|
||||
|
||||
/* Add the global reference object to X11InputMethod to the list. */
|
||||
addToX11InputMethodGRefList(pX11IMData->x11inputmethod);
|
||||
|
||||
@@ -1061,16 +1070,53 @@ createXIC(JNIEnv * env, X11InputMethodData *pX11IMData, Window w)
|
||||
static int
|
||||
PreeditStartCallback(XIC ic, XPointer client_data, XPointer call_data)
|
||||
{
|
||||
/*ARGSUSED*/
|
||||
/* printf("Native: PreeditStartCallback\n"); */
|
||||
/* printf("Native: PreeditStartCallback(%p, %p, %p)\n", ic, client_data, call_data); */
|
||||
|
||||
JNIEnv * const env = GetJNIEnv();
|
||||
|
||||
AWT_LOCK();
|
||||
|
||||
jobject javaInputMethodGRef = (jobject)client_data;
|
||||
if (!isX11InputMethodGRefInList(javaInputMethodGRef)) {
|
||||
goto finally;
|
||||
}
|
||||
|
||||
X11InputMethodData * const pX11IMData = getX11InputMethodData(env, javaInputMethodGRef);
|
||||
if (pX11IMData == NULL) {
|
||||
goto finally;
|
||||
}
|
||||
|
||||
pX11IMData->brokenImDetectionContext.isBetweenPreeditStartAndPreeditDone = True;
|
||||
|
||||
finally:
|
||||
AWT_UNLOCK();
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void
|
||||
PreeditDoneCallback(XIC ic, XPointer client_data, XPointer call_data)
|
||||
{
|
||||
/*ARGSUSED*/
|
||||
/* printf("Native: PreeditDoneCallback\n"); */
|
||||
/* printf("Native: PreeditDoneCallback(%p, %p, %p)\n", ic, client_data, call_data); */
|
||||
|
||||
JNIEnv * const env = GetJNIEnv();
|
||||
|
||||
AWT_LOCK();
|
||||
|
||||
jobject javaInputMethodGRef = (jobject)client_data;
|
||||
if (!isX11InputMethodGRefInList(javaInputMethodGRef)) {
|
||||
goto finally;
|
||||
}
|
||||
|
||||
X11InputMethodData * const pX11IMData = getX11InputMethodData(env, javaInputMethodGRef);
|
||||
if (pX11IMData == NULL) {
|
||||
goto finally;
|
||||
}
|
||||
|
||||
pX11IMData->brokenImDetectionContext.isBetweenPreeditStartAndPreeditDone = False;
|
||||
|
||||
finally:
|
||||
AWT_UNLOCK();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1083,6 +1129,8 @@ static void
|
||||
PreeditDrawCallback(XIC ic, XPointer client_data,
|
||||
XIMPreeditDrawCallbackStruct *pre_draw)
|
||||
{
|
||||
/* printf("Native: PreeditDrawCallback(%p, %p, %p)\n", ic, client_data, pre_draw); */
|
||||
|
||||
JNIEnv *env = GetJNIEnv();
|
||||
X11InputMethodData *pX11IMData = NULL;
|
||||
jmethodID x11imMethodID;
|
||||
@@ -1175,7 +1223,7 @@ PreeditCaretCallback(XIC ic, XPointer client_data,
|
||||
XIMPreeditCaretCallbackStruct *pre_caret)
|
||||
{
|
||||
/*ARGSUSED*/
|
||||
/* printf("Native: PreeditCaretCallback\n"); */
|
||||
/* printf("Native: PreeditCaretCallback(%p, %p, %p)\n", ic, client_data, pre_caret); */
|
||||
}
|
||||
|
||||
#if defined(__linux__)
|
||||
@@ -1183,14 +1231,14 @@ static void
|
||||
StatusStartCallback(XIC ic, XPointer client_data, XPointer call_data)
|
||||
{
|
||||
/*ARGSUSED*/
|
||||
/*printf("StatusStartCallback:\n"); */
|
||||
/*printf("Native: StatusStartCallback(%p, %p, %p)\n", ic, client_data, call_data); */
|
||||
}
|
||||
|
||||
static void
|
||||
StatusDoneCallback(XIC ic, XPointer client_data, XPointer call_data)
|
||||
{
|
||||
/*ARGSUSED*/
|
||||
/*printf("StatusDoneCallback:\n"); */
|
||||
/*printf("Native: StatusDoneCallback(%p, %p, %p)\n", ic, client_data, call_data); */
|
||||
JNIEnv *env = GetJNIEnv();
|
||||
X11InputMethodData *pX11IMData = NULL;
|
||||
StatusWindow *statusWindow;
|
||||
@@ -1221,7 +1269,7 @@ StatusDrawCallback(XIC ic, XPointer client_data,
|
||||
XIMStatusDrawCallbackStruct *status_draw)
|
||||
{
|
||||
/*ARGSUSED*/
|
||||
/*printf("StatusDrawCallback:\n"); */
|
||||
/*printf("Native: StatusDrawCallback(%p, %p, %p)\n", ic, client_data, status_draw); */
|
||||
JNIEnv *env = GetJNIEnv();
|
||||
X11InputMethodData *pX11IMData = NULL;
|
||||
StatusWindow *statusWindow;
|
||||
@@ -1274,6 +1322,8 @@ StatusDrawCallback(XIC ic, XPointer client_data,
|
||||
#endif /* __linux__ */
|
||||
|
||||
static void CommitStringCallback(XIC ic, XPointer client_data, XPointer call_data) {
|
||||
/* printf("Native: CommitStringCallback(%p, %p, %p)\n", ic, client_data, call_data); */
|
||||
|
||||
JNIEnv *env = GetJNIEnv();
|
||||
XIMText * text = (XIMText *)call_data;
|
||||
X11InputMethodData *pX11IMData = NULL;
|
||||
@@ -1514,6 +1564,110 @@ Java_sun_awt_X11_XInputMethod_setXICFocusNative(JNIEnv *env,
|
||||
AWT_UNLOCK();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: sun_awt_X11_XInputMethod_BrokenImDetectionContext
|
||||
* Method: obtainCurrentXimNativeDataPtr
|
||||
* Signature: ()J
|
||||
*
|
||||
* NOTE: MUST BE CALLED WITHIN AWT_LOCK
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XInputMethod_00024BrokenImDetectionContext_obtainCurrentXimNativeDataPtr
|
||||
(JNIEnv *env, jclass cls)
|
||||
{
|
||||
jlong result = 0;
|
||||
|
||||
if (isX11InputMethodGRefInList(currentX11InputMethodInstance)) {
|
||||
X11InputMethodData * const pX11IMData = getX11InputMethodData(env, currentX11InputMethodInstance);
|
||||
result = ptr_to_jlong(pX11IMData);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: sun_awt_X11_XInputMethod_BrokenImDetectionContext
|
||||
* Method: isCurrentXicPassive
|
||||
* Signature: (J)Z
|
||||
*
|
||||
* NOTE: MUST BE CALLED WITHIN AWT_LOCK
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XInputMethod_00024BrokenImDetectionContext_isCurrentXicPassive
|
||||
(JNIEnv *env, jclass cls, jlong ximNativeDataPtr)
|
||||
{
|
||||
X11InputMethodData * const pX11ImData = (X11InputMethodData *)jlong_to_ptr(ximNativeDataPtr);
|
||||
if (pX11ImData == NULL) {
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
const jboolean result = (pX11ImData->current_ic == NULL) ? JNI_FALSE
|
||||
: (pX11ImData->current_ic == pX11ImData->ic_passive) ? JNI_TRUE
|
||||
: JNI_FALSE;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static XIMPreeditState getPreeditStateOf(XIC xic) {
|
||||
#if defined(__linux__) && defined(_LP64) && !defined(_LITTLE_ENDIAN)
|
||||
// XIMPreeditState value which is used for XGetICValues must be 32bit on BigEndian XOrg's xlib
|
||||
unsigned int state = XIMPreeditUnKnown;
|
||||
#else
|
||||
XIMPreeditState state = XIMPreeditUnKnown;
|
||||
#endif
|
||||
|
||||
XVaNestedList preeditStateAttr = XVaCreateNestedList(0, XNPreeditState, &state, NULL);
|
||||
if (preeditStateAttr == NULL) {
|
||||
return XIMPreeditUnKnown;
|
||||
}
|
||||
const char * const unsupportedAttrs = XGetICValues(xic, XNPreeditAttributes, preeditStateAttr, NULL);
|
||||
XFree((void *)preeditStateAttr);
|
||||
|
||||
if (unsupportedAttrs != NULL) {
|
||||
return XIMPreeditUnKnown;
|
||||
}
|
||||
|
||||
return (state == XIMPreeditEnable) ? XIMPreeditEnable
|
||||
: (state == XIMPreeditDisable) ? XIMPreeditDisable
|
||||
: XIMPreeditUnKnown;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: sun_awt_X11_XInputMethod_BrokenImDetectionContext
|
||||
* Method: isDuringPreediting
|
||||
* Signature: ()I
|
||||
*
|
||||
* Returns the following values:
|
||||
* * >0 in case the IM is in preediting state;
|
||||
* * 0 in case the IM is not in preediting state;
|
||||
* * <0 in case it's unknown whether the IM is in preediting state or not.
|
||||
*
|
||||
* NOTE: MUST BE CALLED WITHIN AWT_LOCK
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_sun_awt_X11_XInputMethod_00024BrokenImDetectionContext_isDuringPreediting
|
||||
(JNIEnv *env, jclass cls, jlong ximNativeDataPtr)
|
||||
{
|
||||
X11InputMethodData * const pX11ImData = (X11InputMethodData *)jlong_to_ptr(ximNativeDataPtr);
|
||||
if (pX11ImData == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
jint result = -1;
|
||||
|
||||
if (pX11ImData->brokenImDetectionContext.isBetweenPreeditStartAndPreeditDone) {
|
||||
result = 1;
|
||||
} else if (pX11ImData->current_ic != NULL) {
|
||||
const XIMPreeditState preeditState = getPreeditStateOf(pX11ImData->current_ic);
|
||||
if (preeditState == XIMPreeditEnable) {
|
||||
result = 1;
|
||||
} else if (preeditState == XIMPreeditDisable) {
|
||||
result = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: sun_awt_X11InputMethodBase
|
||||
* Method: initIDs
|
||||
|
||||
@@ -653,61 +653,6 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XWindowEvent
|
||||
XWindowEvent( (Display *) jlong_to_ptr(display), (Window)window, event_mask, (XEvent *) jlong_to_ptr(event_return));
|
||||
}
|
||||
|
||||
static int filteredEventsCount = 0;
|
||||
static int filteredEventsThreshold = -1;
|
||||
static const int DEFAULT_THRESHOLD = 5;
|
||||
#define KeyPressEventType 2
|
||||
#define KeyReleaseEventType 3
|
||||
|
||||
static void checkBrokenInputMethod(XEvent * event, jboolean isEventFiltered) {
|
||||
// Fix for JBR-2444
|
||||
// By default filteredEventsThreshold == 5, you can turn it of with
|
||||
// recreate.x11.input.method=false
|
||||
if (filteredEventsThreshold < 0) {
|
||||
filteredEventsThreshold = 0;
|
||||
|
||||
// read from VM-property
|
||||
JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
|
||||
jclass systemCls = (*env)->FindClass(env, "java/lang/System");
|
||||
CHECK_NULL(systemCls);
|
||||
jmethodID mid = (*env)->GetStaticMethodID(env, systemCls, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;");
|
||||
CHECK_NULL(mid);
|
||||
jstring name = (*env)->NewStringUTF(env, "recreate.x11.input.method");
|
||||
CHECK_NULL(name);
|
||||
jstring jvalue = (*env)->CallStaticObjectMethod(env, systemCls, mid, name);
|
||||
if (jvalue != NULL) {
|
||||
const char * utf8string = (*env)->GetStringUTFChars(env, jvalue, NULL);
|
||||
if (utf8string != NULL) {
|
||||
const int parsedVal = atoi(utf8string);
|
||||
if (parsedVal > 0)
|
||||
filteredEventsThreshold = parsedVal;
|
||||
else if (strncmp(utf8string, "false", 5) == 0)
|
||||
filteredEventsThreshold = 0;
|
||||
}
|
||||
(*env)->ReleaseStringUTFChars(env, jvalue, utf8string);
|
||||
} else {
|
||||
filteredEventsThreshold = DEFAULT_THRESHOLD;
|
||||
}
|
||||
(*env)->DeleteLocalRef(env, name);
|
||||
}
|
||||
if (filteredEventsThreshold <= 0)
|
||||
return;
|
||||
|
||||
if (event->type == KeyPressEventType || event->type == KeyReleaseEventType) {
|
||||
if (isEventFiltered) {
|
||||
filteredEventsCount++;
|
||||
} else {
|
||||
filteredEventsCount = 0;
|
||||
}
|
||||
|
||||
if (filteredEventsCount > filteredEventsThreshold) {
|
||||
JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
|
||||
JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11InputMethod", "recreateAllXIC", "()V");
|
||||
filteredEventsCount = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: sun_awt_X11_XlibWrapper
|
||||
* Method: XFilterEvent
|
||||
@@ -722,8 +667,10 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XFilterEvent
|
||||
return (jboolean)True;
|
||||
}
|
||||
#endif
|
||||
jboolean isEventFiltered = (jboolean) XFilterEvent((XEvent *) jlong_to_ptr(ptr), (Window) window);
|
||||
checkBrokenInputMethod((XEvent *)jlong_to_ptr(ptr), isEventFiltered);
|
||||
XEvent* const xEvent = (XEvent *)jlong_to_ptr(ptr);
|
||||
|
||||
const jboolean isEventFiltered = (jboolean) XFilterEvent(xEvent, (Window) window);
|
||||
|
||||
return isEventFiltered;
|
||||
}
|
||||
|
||||
|
||||
@@ -515,7 +515,15 @@ MsgRouting AwtFrame::WmMouseMove(UINT flags, int x, int y) {
|
||||
* If this Frame is non-focusable then we should implement move and size operation for it by
|
||||
* ourselfves because we don't dispatch appropriate mouse messages to default window procedure.
|
||||
*/
|
||||
if (!IsFocusableWindow() && isInManualMoveOrSize) {
|
||||
if (isInManualMoveOrSize) {
|
||||
if (grabbedHitTest == HTCAPTION) {
|
||||
WINDOWPLACEMENT placement;
|
||||
::GetWindowPlacement(GetHWnd(), &placement);
|
||||
if (placement.showCmd == SW_SHOWMAXIMIZED) {
|
||||
placement.showCmd = SW_SHOWNORMAL;
|
||||
::SetWindowPlacement(GetHWnd(), &placement);
|
||||
}
|
||||
}
|
||||
DWORD curPos = ::GetMessagePos();
|
||||
x = GET_X_LPARAM(curPos);
|
||||
y = GET_Y_LPARAM(curPos);
|
||||
@@ -627,12 +635,29 @@ MsgRouting AwtFrame::WmNcMouseDown(WPARAM hitTest, int x, int y, int button) {
|
||||
// Do not handle events from caption itself to preserve native drag behavior
|
||||
if (HasCustomDecoration()) {
|
||||
switch (hitTest) {
|
||||
case HTCAPTION:
|
||||
case HTMINBUTTON:
|
||||
case HTMAXBUTTON:
|
||||
case HTCLOSE:
|
||||
case HTMENU:
|
||||
RECT rcWindow;
|
||||
GetWindowRect(GetHWnd(), &rcWindow);
|
||||
if (hitTest == HTCAPTION) {
|
||||
JNIEnv *env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2);
|
||||
jint customSpot = JNU_CallMethodByName(env, NULL, GetTarget(env),
|
||||
"hitTestCustomDecoration", "(II)I",
|
||||
ScaleDownX(x - rcWindow.left),
|
||||
ScaleDownY(y - rcWindow.top)).i;
|
||||
if (customSpot == java_awt_Window_CustomWindowDecoration_DRAGGABLE_AREA) {
|
||||
if (button & LEFT_BUTTON) {
|
||||
savedMousePos.x = x;
|
||||
savedMousePos.y = y;
|
||||
::SetCapture(GetHWnd());
|
||||
isInManualMoveOrSize = TRUE;
|
||||
grabbedHitTest = hitTest;
|
||||
}
|
||||
} else break;
|
||||
}
|
||||
WmMouseDown(GetButtonMK(button),
|
||||
x - rcWindow.left,
|
||||
y - rcWindow.top,
|
||||
@@ -1783,6 +1808,7 @@ LRESULT HitTestNCA(AwtFrame* frame, int x, int y) {
|
||||
frame->ScaleDownY(y - rcWindow.top)).i;
|
||||
switch (customSpot) {
|
||||
case java_awt_Window_CustomWindowDecoration_NO_HIT_SPOT:
|
||||
case java_awt_Window_CustomWindowDecoration_DRAGGABLE_AREA:
|
||||
break; // Nothing
|
||||
case java_awt_Window_CustomWindowDecoration_MINIMIZE_BUTTON:
|
||||
return HTMINBUTTON;
|
||||
|
||||
@@ -24,19 +24,59 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Custom window decoration allows merging of window content with native title bar,
|
||||
* which is usually done by treating title bar as part of client area, but with some
|
||||
* special behavior like dragging or maximizing on double click.
|
||||
* @implNote Behavior is platform-dependent, only macOS and Windows are supported.
|
||||
*/
|
||||
public interface CustomWindowDecoration {
|
||||
|
||||
/*CONST java.awt.Window.*_HIT_SPOT*/
|
||||
/*CONST java.awt.Window.*_BUTTON*/
|
||||
/*CONST java.awt.Window.MENU_BAR*/
|
||||
/*CONST java.awt.Window.DRAGGABLE_AREA*/
|
||||
|
||||
/**
|
||||
* Turn custom decoration on or off, {@link #setCustomDecorationTitleBarHeight(Window, int)}
|
||||
* must be called to configure title bar height.
|
||||
*/
|
||||
void setCustomDecorationEnabled(Window window, boolean enabled);
|
||||
/**
|
||||
* @see #setCustomDecorationEnabled(Window, boolean)
|
||||
*/
|
||||
boolean isCustomDecorationEnabled(Window window);
|
||||
|
||||
/**
|
||||
* Set list of hit test spots for a custom decoration.
|
||||
* Hit test spot is a special area inside custom-decorated title bar.
|
||||
* Each hit spot type has its own (probably platform-specific) behavior:
|
||||
* <ul>
|
||||
* <li>{@link #NO_HIT_SPOT} - default title bar area, can be dragged to move a window, maximizes on double-click</li>
|
||||
* <li>{@link #OTHER_HIT_SPOT} - generic hit spot, window cannot be moved with drag or maximized on double-click</li>
|
||||
* <li>{@link #MINIMIZE_BUTTON} - like {@link #OTHER_HIT_SPOT} but displays tooltip on Windows when hovered</li>
|
||||
* <li>{@link #MAXIMIZE_BUTTON} - like {@link #OTHER_HIT_SPOT} but displays tooltip / snap layout menu on Windows when hovered</li>
|
||||
* <li>{@link #CLOSE_BUTTON} - like {@link #OTHER_HIT_SPOT} but displays tooltip on Windows when hovered</li>
|
||||
* <li>{@link #MENU_BAR} - currently no different from {@link #OTHER_HIT_SPOT}</li>
|
||||
* <li>{@link #DRAGGABLE_AREA} - special type, moves window when dragged, but doesn't maximize on double-click</li>
|
||||
* </ul>
|
||||
* @param spots pairs of hit spot shapes with corresponding types.
|
||||
* @implNote Hit spots are tested in sequence, so in case of overlapping areas, first found wins.
|
||||
*/
|
||||
void setCustomDecorationHitTestSpots(Window window, List<Map.Entry<Shape, Integer>> spots);
|
||||
/**
|
||||
* @see #setCustomDecorationHitTestSpots(Window, List)
|
||||
*/
|
||||
List<Map.Entry<Shape, Integer>> getCustomDecorationHitTestSpots(Window window);
|
||||
|
||||
/**
|
||||
* Set height of custom window decoration, won't take effect until custom decoration
|
||||
* is enabled via {@link #setCustomDecorationEnabled(Window, boolean)}.
|
||||
*/
|
||||
void setCustomDecorationTitleBarHeight(Window window, int height);
|
||||
/**
|
||||
* @see #setCustomDecorationTitleBarHeight(Window, int)
|
||||
*/
|
||||
int getCustomDecorationTitleBarHeight(Window window);
|
||||
|
||||
|
||||
|
||||
@@ -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.5
|
||||
VERSION = 0.0.6
|
||||
|
||||
# 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 = 2F4DD7564F018A0AB7CD8DFF010E3B4
|
||||
HASH = 2E2A7E994CCF6D942FB9EB347C8EA4
|
||||
|
||||
@@ -678,6 +678,7 @@ javax/security/auth/kerberos/KerberosTixDateTest.java 8039280 generic-
|
||||
sun/security/provider/PolicyFile/GrantAllPermToExtWhenNoPolicy.java 8039280 generic-all
|
||||
sun/security/provider/PolicyParser/ExtDirsChange.java 8039280 generic-all
|
||||
sun/security/provider/PolicyParser/PrincipalExpansionError.java 8039280 generic-all
|
||||
sun/security/ssl/SSLSessionImpl/NoInvalidateSocketException.java 8277970 linux-all,macosx-x64
|
||||
|
||||
############################################################################
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ jbrsdk_jcef-${jbsdk_version}-osx-x64-b${build_number}.pkg
|
||||
jbrsdk_jcef-${jbsdk_version}-osx-x64-b${build_number}.tar.gz
|
||||
jbrsdk_jcef-${jbsdk_version}-windows-x64-b${build_number}.tar.gz
|
||||
|
||||
jbrsdk_jcef-${jbsdk_version}-linux-aarcb${build_number}_diz.tar.gz
|
||||
jbrsdk_jcef-${jbsdk_version}-linux-aarch64-b${build_number}_diz.tar.gz
|
||||
jbrsdk_jcef-${jbsdk_version}-linux-x64-b${build_number}_diz.tar.gz
|
||||
jbrsdk_jcef-${jbsdk_version}-osx-aarch64-b${build_number}_diz.tar.gz
|
||||
jbrsdk_jcef-${jbsdk_version}-osx-x64-b${build_number}_diz.tar.gz
|
||||
|
||||
@@ -21,6 +21,8 @@ import java.awt.Desktop;
|
||||
import java.awt.Robot;
|
||||
import java.awt.event.InputEvent;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* @test
|
||||
@@ -33,7 +35,10 @@ import java.awt.event.KeyEvent;
|
||||
*/
|
||||
|
||||
public class AboutHandlerTest {
|
||||
private static final int WAIT_TIME = 1000;
|
||||
|
||||
private static CountDownLatch doneSignal = new CountDownLatch(1);
|
||||
|
||||
private static final int WAIT_TIME = 3000;
|
||||
|
||||
private static Robot robot;
|
||||
|
||||
@@ -45,9 +50,11 @@ public class AboutHandlerTest {
|
||||
robot = new Robot();
|
||||
robot.setAutoDelay(50);
|
||||
|
||||
long starttime = System.currentTimeMillis();
|
||||
Desktop.getDesktop().setAboutHandler(e -> {
|
||||
System.out.println("AboutHandler hits");
|
||||
testPassed = true;
|
||||
doneSignal.countDown();
|
||||
});
|
||||
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
@@ -55,8 +62,9 @@ public class AboutHandlerTest {
|
||||
});
|
||||
|
||||
// waiting for AboutHandler
|
||||
sleep(WAIT_TIME);
|
||||
|
||||
doneSignal.await(WAIT_TIME, TimeUnit.SECONDS);
|
||||
long endtime = System.currentTimeMillis();
|
||||
System.out.println("Duration (milisec): " + (endtime - starttime));
|
||||
myApp.dispose();
|
||||
|
||||
if (!testPassed)
|
||||
@@ -85,8 +93,4 @@ public class AboutHandlerTest {
|
||||
robot.keyPress(KeyEvent.VK_ENTER);
|
||||
robot.keyRelease(KeyEvent.VK_ENTER);
|
||||
}
|
||||
|
||||
private static void sleep(int millis) throws InterruptedException {
|
||||
Thread.sleep(millis);
|
||||
}
|
||||
}
|
||||
|
||||
93
test/jdk/jb/java/awt/Focus/FileDialogClosing.java
Normal file
93
test/jdk/jb/java/awt/Focus/FileDialogClosing.java
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright 2022 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.
|
||||
*/
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.InputEvent;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @summary Regression test for JBR-4546 Focus is not returned back to IDE after closing "Open" dialog
|
||||
* @key headful
|
||||
*/
|
||||
|
||||
public class FileDialogClosing {
|
||||
private static final AtomicInteger pressedCount = new AtomicInteger();
|
||||
|
||||
private static Robot robot;
|
||||
private static Frame frame;
|
||||
private static Button button;
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
robot = new Robot();
|
||||
try {
|
||||
SwingUtilities.invokeAndWait(FileDialogClosing::initUI);
|
||||
robot.delay(1000);
|
||||
clickOn(button);
|
||||
robot.delay(1000);
|
||||
pressAndRelease(KeyEvent.VK_ESCAPE);
|
||||
robot.delay(1000);
|
||||
pressAndRelease(KeyEvent.VK_SPACE);
|
||||
robot.delay(1000);
|
||||
if (pressedCount.get() != 2) {
|
||||
throw new RuntimeException("Unexpected pressed count: " + pressedCount);
|
||||
}
|
||||
} finally {
|
||||
SwingUtilities.invokeAndWait(FileDialogClosing::disposeUI);
|
||||
}
|
||||
}
|
||||
|
||||
private static void initUI() {
|
||||
frame = new Frame("FileDialogClosing");
|
||||
button = new Button("Open dialog");
|
||||
button.addActionListener(e -> {
|
||||
pressedCount.incrementAndGet();
|
||||
new FileDialog(frame).setVisible(true);
|
||||
});
|
||||
frame.add(button);
|
||||
frame.setBounds(200, 200, 200, 200);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
private static void disposeUI() {
|
||||
if (frame != null) frame.dispose();
|
||||
}
|
||||
|
||||
private static void clickAt(int x, int y) {
|
||||
robot.mouseMove(x, y);
|
||||
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
|
||||
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
|
||||
}
|
||||
|
||||
private static void clickOn(Component component) {
|
||||
Point location = component.getLocationOnScreen();
|
||||
clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2);
|
||||
}
|
||||
|
||||
private static void pressAndRelease(int keyCode) {
|
||||
robot.keyPress(keyCode);
|
||||
robot.keyRelease(keyCode);
|
||||
}
|
||||
}
|
||||
@@ -124,6 +124,7 @@ java/awt/Frame/MaximizedUndecorated/MaximizedUndecorated.java 8022302 generic-al
|
||||
java/awt/FileDialog/FileDialogIconTest/FileDialogIconTest.java 8160558 windows-all
|
||||
java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion.java 8060176 windows-all,macosx-all
|
||||
java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_1.java 8060176 windows-all,macosx-all
|
||||
java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_4.java 8204200 windows-all,linux-all
|
||||
java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java 8159694 linux-all
|
||||
java/awt/dnd/MissingEventsOnModalDialog/MissingEventsOnModalDialogTest.java 8164464 linux-all,macosx-all
|
||||
java/awt/dnd/URIListBetweenJVMsTest/URIListBetweenJVMsTest.java 8171510,JBR-881 macosx-all,linux-all
|
||||
@@ -245,9 +246,9 @@ sun/awt/datatransfer/SuplementaryCharactersTransferTest.java 8011371 generic-all
|
||||
sun/awt/shell/ShellFolderMemoryLeak.java 8197794 windows-all
|
||||
sun/java2d/DirectX/OnScreenRenderingResizeTest/OnScreenRenderingResizeTest.java 8022403 generic-all
|
||||
sun/java2d/DirectX/OverriddenInsetsTest/OverriddenInsetsTest.java 8196102 generic-all
|
||||
sun/java2d/DirectX/RenderingToCachedGraphicsTest/RenderingToCachedGraphicsTest.java 8196180 windows-all,macosx-all
|
||||
sun/java2d/DirectX/RenderingToCachedGraphicsTest/RenderingToCachedGraphicsTest.java 8196180,8252812 windows-all,macosx-all,linux-all
|
||||
java/awt/Graphics2D/CopyAreaOOB.java 7001973 windows-all,macosx-all,linux-all
|
||||
java/awt/Graphics2D/DrawString/DrawRotatedStringUsingRotatedFont.java 8266283 linux-aarch64
|
||||
java/awt/Graphics2D/DrawString/DrawRotatedStringUsingRotatedFont.java 8266283,JBR-3770 linux-aarch64,macosx-all
|
||||
sun/java2d/SunGraphics2D/EmptyClipRenderingTest.java 8144029 macosx-all,linux-all,windows-all
|
||||
sun/java2d/SunGraphics2D/DrawImageBilinear.java 8191406 generic-all
|
||||
sun/java2d/SunGraphics2D/PolyVertTest.java 6986565 generic-all
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -54,15 +54,14 @@ public class Distrust {
|
||||
// Each of the roots have a test certificate chain stored in a file
|
||||
// named "<root>-chain.pem".
|
||||
private static String[] rootsToTest = new String[] {
|
||||
"geotrustglobalca", "geotrustprimarycag2", "geotrustprimarycag3",
|
||||
"geotrustprimarycag2", "geotrustprimarycag3",
|
||||
"geotrustuniversalca", "thawteprimaryrootca", "thawteprimaryrootcag2",
|
||||
"thawteprimaryrootcag3", "verisignclass3g3ca", "verisignclass3g4ca",
|
||||
"verisignclass3g5ca", "verisignuniversalrootca" };
|
||||
|
||||
// Each of the subCAs with a delayed distrust date have a test certificate
|
||||
// chain stored in a file named "<subCA>-chain.pem".
|
||||
private static String[] subCAsToTest = new String[] {
|
||||
"appleistca2g1", "appleistca8g1" };
|
||||
private static String[] subCAsToTest = new String[]{"appleistca8g1"};
|
||||
|
||||
// A date that is after the restrictions take affect
|
||||
private static final Date APRIL_17_2019 =
|
||||
@@ -180,6 +179,11 @@ public class Distrust {
|
||||
throw new Exception("chain should be invalid");
|
||||
}
|
||||
} catch (CertificateException ce) {
|
||||
// expired TLS certificates should not be treated as failure
|
||||
if (expired(ce)) {
|
||||
System.err.println("Test is N/A, chain is expired");
|
||||
return;
|
||||
}
|
||||
if (valid) {
|
||||
throw new Exception("Unexpected exception, chain " +
|
||||
"should be valid", ce);
|
||||
@@ -187,6 +191,7 @@ public class Distrust {
|
||||
if (ce instanceof ValidatorException) {
|
||||
ValidatorException ve = (ValidatorException)ce;
|
||||
if (ve.getErrorType() != ValidatorException.T_UNTRUSTED_CERT) {
|
||||
ce.printStackTrace(System.err);
|
||||
throw new Exception("Unexpected exception: " + ce);
|
||||
}
|
||||
} else {
|
||||
@@ -195,6 +200,21 @@ public class Distrust {
|
||||
}
|
||||
}
|
||||
|
||||
// check if a cause of exception is an expired cert
|
||||
private static boolean expired(CertificateException ce) {
|
||||
if (ce instanceof CertificateExpiredException) {
|
||||
return true;
|
||||
}
|
||||
Throwable t = ce.getCause();
|
||||
while (t != null) {
|
||||
if (t instanceof CertificateExpiredException) {
|
||||
return true;
|
||||
}
|
||||
t = t.getCause();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static X509Certificate[] loadCertificateChain(String name)
|
||||
throws Exception {
|
||||
try (InputStream in = new FileInputStream(TEST_SRC + File.separator +
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIGGzCCBQOgAwIBAgIITJltLCqcD0gwDQYJKoZIhvcNAQELBQAwYjEcMBoGA1UE
|
||||
AxMTQXBwbGUgSVNUIENBIDIgLSBHMTEgMB4GA1UECxMXQ2VydGlmaWNhdGlvbiBB
|
||||
dXRob3JpdHkxEzARBgNVBAoTCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMB4XDTE5
|
||||
MDEwODIxMTcxNFoXDTIwMDgwODIxMjcwMFowgaoxSjBIBgNVBAMMQWFjdGl2ZS5n
|
||||
ZW90cnVzdC1nbG9iYWwtY2EudGVzdC1wYWdlcy5jZXJ0aWZpY2F0ZW1hbmFnZXIu
|
||||
YXBwbGUuY29tMSUwIwYDVQQLDBxtYW5hZ2VtZW50OmlkbXMuZ3JvdXAuODY0ODU5
|
||||
MRMwEQYDVQQKDApBcHBsZSBJbmMuMRMwEQYDVQQIDApDYWxpZm9ybmlhMQswCQYD
|
||||
VQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMCjFUrVHTEX
|
||||
0aVU6x9LiGa6oVr9blaCsMFrLicPQguc43Vs/pN+g4jzRXsTSMe9XefezBQb6tzZ
|
||||
SMRXVB4kWMr4K1BVgQDkXeyoh4KrXRkdEF9ZIJPNxwTmmYUOc5M6NOYwkLelYz+t
|
||||
7n1iNIGylbjwU4qwauElk2alFVqYTEPDLzwvqVDb9jMAJ8MPSDjfUlXW0XD9oXZM
|
||||
hC+8LU9JBgJ3YBdzRHa4WnrudUbWjspqaNfAYpVIX0cfCJKnMsKqaSKjS4pIRtWm
|
||||
L6NlCTCoIMyOh+wmbWPPX24H2D3+ump5FA35fRYbVznmosl5n1AK34S9tD4XZ7lO
|
||||
WZKfaFi1liMCAwEAAaOCAoowggKGMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAU
|
||||
2HqURHyQcJAWnt0XnAFEA4bWKikwfgYIKwYBBQUHAQEEcjBwMDQGCCsGAQUFBzAC
|
||||
hihodHRwOi8vY2VydHMuYXBwbGUuY29tL2FwcGxlaXN0Y2EyZzEuZGVyMDgGCCsG
|
||||
AQUFBzABhixodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDAzLWFwcGxlaXN0Y2Ey
|
||||
ZzEwMTBMBgNVHREERTBDgkFhY3RpdmUuZ2VvdHJ1c3QtZ2xvYmFsLWNhLnRlc3Qt
|
||||
cGFnZXMuY2VydGlmaWNhdGVtYW5hZ2VyLmFwcGxlLmNvbTCB/wYDVR0gBIH3MIH0
|
||||
MIHxBgoqhkiG92NkBQsEMIHiMIGkBggrBgEFBQcCAjCBlwyBlFJlbGlhbmNlIG9u
|
||||
IHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5j
|
||||
ZSBvZiBhbnkgYXBwbGljYWJsZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2Ug
|
||||
YW5kL29yIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wOQYIKwYB
|
||||
BQUHAgEWLWh0dHA6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5
|
||||
L3JwYTAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwNwYDVR0fBDAwLjAs
|
||||
oCqgKIYmaHR0cDovL2NybC5hcHBsZS5jb20vYXBwbGVpc3RjYTJnMS5jcmwwHQYD
|
||||
VR0OBBYEFP0qkmFJhArI0MsfW0V+/wY9x4GSMA4GA1UdDwEB/wQEAwIFoDANBgkq
|
||||
hkiG9w0BAQsFAAOCAQEATjT8M0bIq+mFc8k5cd4KDjCMBjYl/l3/8zKlWYGP+nl1
|
||||
KRogXcGRa3LcfpdJcqgMrx8e9Xohduvl8MBzwv671rYkppzZdsmZdLVorAdbL5GL
|
||||
suhTjAS5yL3NBWNMRpeOgFsVr7YtPDEvo3CFsnzjg7THe0S6Y35oYukJtUzGUvSY
|
||||
kC3ApBTdjj0vAeow+dbt+AHKnQiEnon4ToSFmtnkru08Uxe7uyHCQ2sLUg0EPYc9
|
||||
t9I8lviaHfK/mQoCzlme2O/H5Rher8dXCv8hVT1NKbsi28EpgpqcTLS+hn/Edc/q
|
||||
4dPDoO1Ozs+ixRzFeMpA+JrnAyARb6qbSrAPBgtIbQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEQDCCAyigAwIBAgIDAjp0MA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT
|
||||
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
|
||||
YWwgQ0EwHhcNMTQwNjE2MTU0MjAyWhcNMjIwNTIwMTU0MjAyWjBiMRwwGgYDVQQD
|
||||
ExNBcHBsZSBJU1QgQ0EgMiAtIEcxMSAwHgYDVQQLExdDZXJ0aWZpY2F0aW9uIEF1
|
||||
dGhvcml0eTETMBEGA1UEChMKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0G
|
||||
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQk6EdR0MgFrILa+vD1bTox5jN896/
|
||||
6E3p4zaAB/xFG2p8RYauVtOkCX9hDWtdflJrfbTIOcT0Zzr3g84Zb4YvfkV+Rxxn
|
||||
UsqVBV3iNlGFwNRngDVvFd0+/R3S/Y80UNjsdiq+49Pa5P3I6ygClhGXF2Ec6cRZ
|
||||
O0LcMtEJHdqm0UOG/16yvIzPZtsBiwKulEjzOI/96jKoCOyGl1GUJD5JSZZT6Hmh
|
||||
QIHpBbuTlVH84/18EUv3ngizFUkVB/nRN6CbSzL2tcTcatH8Cu324MUpoKiLcf4N
|
||||
krz+VHAYCm3H7Qz7yS0Gw4yF/MuGXNY2jhKLCX/7GRo41fCUMHoPpozzAgMBAAGj
|
||||
ggEdMIIBGTAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1luMrMTjAdBgNVHQ4E
|
||||
FgQU2HqURHyQcJAWnt0XnAFEA4bWKikwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV
|
||||
HQ8BAf8EBAMCAQYwNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2cuc3ltY2IuY29t
|
||||
L2NybHMvZ3RnbG9iYWwuY3JsMC4GCCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYS
|
||||
aHR0cDovL2cuc3ltY2QuY29tMEwGA1UdIARFMEMwQQYKYIZIAYb4RQEHNjAzMDEG
|
||||
CCsGAQUFBwIBFiVodHRwOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvY3Bz
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQAWR3NvhaJi4ecqdruJlUIml7xKrKxwUzo/MYM9
|
||||
PByrmuKxXRx2GqA8DHJXvtOeUODImdZY1wLqzg0pVHzN9cLGkClVo28UqAtCDTqY
|
||||
bQZ4nvBqox0CCqIopI3CgUY+bWfa3j/+hQ5CKhLetbf7uBunlux3n+zUU5V6/wf0
|
||||
8goUwFFSsdaOUAsamVy8C8m97e34XsFW201+I6QRoSzUGwWa5BtS9nw4mQVLunKN
|
||||
QolgBGYq9P1o12v3mUEo1mwkq+YlUy7Igpnioo8jvjCDsSeL+mh/AUnoxphrEC6Y
|
||||
XorXykuxx8lYmtA225aV7LaB5PLNbxt5h0wQPInkTfpU3Kqm
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
|
||||
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
|
||||
YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
|
||||
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
|
||||
R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
|
||||
9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
|
||||
fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
|
||||
iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
|
||||
1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
|
||||
bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
|
||||
MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
|
||||
ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
|
||||
uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
|
||||
Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
|
||||
tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
|
||||
PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
|
||||
hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
|
||||
5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,66 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIHBjCCBe6gAwIBAgIQanINWwJAuap0V7lFjnfUwTANBgkqhkiG9w0BAQsFADBE
|
||||
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU
|
||||
R2VvVHJ1c3QgU1NMIENBIC0gRzMwHhcNMTcwNTAzMDAwMDAwWhcNMjAwNTAyMjM1
|
||||
OTU5WjCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNV
|
||||
BAcMDU1vdW50YWluIFZpZXcxFzAVBgNVBAoMDkdlb1RydXN0LCBJbmMuMRgwFgYD
|
||||
VQQLDA9Sb290IDEwIC0gVkFMSUQxIjAgBgNVBAMMGXZhbGlkLXJvb3QxMC5nZW90
|
||||
cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTegUYhAh0
|
||||
P7aF6jzk8dit4Vzddo3hM+J7Eak/+N1sqVUS2HpNd7VO50FrbEWKIRusv7QNtlpY
|
||||
1Cgrla8M4RAhCB0wkkHXZ1Evz6E1AEFQqNSjyuRQxeEXl+xCL+MF+yAMhDRnHh+E
|
||||
eSJ3ie0T66saOyaLM9fPpr3xomAQ/IRlP1atJ/Z8XbPo25HuxwzxiWFW+RjwVIfI
|
||||
gxHz4Okwc1uImDUIDlEu9Uaqqb4jHhxU1EkKMmgEncpqwCROcZMujUkogfB49Z7+
|
||||
K17r6ARIrUuxqfNPrPwe+O88WgIeDSWffPM67UlvtomZOwuTNdv9OoCX1wUCLS7m
|
||||
/gZ3rqqqeJvfAgMBAAGjggOkMIIDoDAkBgNVHREEHTAbghl2YWxpZC1yb290MTAu
|
||||
Z2VvdHJ1c3QuY29tMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMCsGA1UdHwQk
|
||||
MCIwIKAeoByGGmh0dHA6Ly9nbi5zeW1jYi5jb20vZ24uY3JsMIGdBgNVHSAEgZUw
|
||||
gZIwgY8GBmeBDAECAjCBhDA/BggrBgEFBQcCARYzaHR0cHM6Ly93d3cuZ2VvdHJ1
|
||||
c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5L2xlZ2FsMEEGCCsGAQUFBwICMDUM
|
||||
M2h0dHBzOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9s
|
||||
ZWdhbDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHwYDVR0jBBgwFoAU
|
||||
0m/3lvSFP3I8MH0j2oV4m6N8WnwwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzAB
|
||||
hhNodHRwOi8vZ24uc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vZ24uc3lt
|
||||
Y2IuY29tL2duLmNydDCCAfUGCisGAQQB1nkCBAIEggHlBIIB4QHfAHUA3esdK3oN
|
||||
T6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvswAAAFbz9h5vQAABAMARjBEAiAx/C0U
|
||||
5NdHxK4v2oHnstYksb1Vny8PcQkSvgpx9PsZEwIgNTOU70Zc5szG23xdbvtoH5lN
|
||||
SAoVswiF5gFQS5MGu1sAdgCkuQmQtBhYFIe7E6LMZ3AKPDWYBPkb37jjd80OyA3c
|
||||
EAAAAVvP2HnZAAAEAwBHMEUCIFGjB8r2H0VDwTUE/aY/Mv+M97sqAvEP1doOcHpg
|
||||
0qyfAiEArw/S2F7OEcmKGUY1WRBuApfAx5d7hzrTSV/jZv95qJwAdgDuS723dc5g
|
||||
uuFCaR+r4Z5mow9+X7By2IMAxHuJeqj9ywAAAVvP2HoDAAAEAwBHMEUCIQCH6MFZ
|
||||
tZF3Cqukt3/69fkU0Y5ePXXx8+xkOXRsIG3EGgIgSmCBWrnmPiiGA3x5QP8I8m4r
|
||||
Uee0y7s4NQNwjMgHrjwAdgC8eOHfxfY8aEZJM02hD6FfCXlpIAnAgbTz9pF/Ptm4
|
||||
pQAAAVvP2HqcAAAEAwBHMEUCIA8e2kAVYYuQCtn4PqK98BuHnLm9rC40DboFLCle
|
||||
SmQsAiEApbCJR05hr9VkNWmjaaUUGGZdVyUu9XX504LHVWyXZDUwDQYJKoZIhvcN
|
||||
AQELBQADggEBAEtfBfZ2y5uTohvW3h00Kcuop6Nq7Y59GU3MeizPKtx48DB8qHyd
|
||||
y5bLFwXzsGA1WkwpKzPbROsTGcAAXJHh03bj24AemUr/J/eQcjkfSoNBdHDpiSsk
|
||||
VZkQK2fGJDiYJ/r9mxKZcgd2pyN3l2OtVtNMv2dnFGF35UkkeqO3jqImwbypAmRX
|
||||
HdQV9dvW2YDRjzkebNNey6UwY9+YTSzr4da2hcaMHrj588Eqa4DDgNcY9QnE2RzN
|
||||
giArA+4RlM4AZ3jC2A756I67hrlvH+lhumHLp06hGfMiQJF1aaauFVSa36HKc3C/
|
||||
ty+sLdJbemEJLAr8uNXggFD+U8TKw1S4LSw=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIETzCCAzegAwIBAgIDAjpvMA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT
|
||||
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
|
||||
YWwgQ0EwHhcNMTMxMTA1MjEzNjUwWhcNMjIwNTIwMjEzNjUwWjBEMQswCQYDVQQG
|
||||
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
|
||||
U1NMIENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDjvn4K
|
||||
hqPPa209K6GXrUkkTdd3uTR5CKWeop7eRxKSPX7qGYax6E89X/fQp3eaWx8KA7UZ
|
||||
U9ulIZRpY51qTJEMEEe+EfpshiW3qwRoQjgJZfAU2hme+msLq2LvjafvY3AjqK+B
|
||||
89FuiGdT7BKkKXWKp/JXPaKDmJfyCn3U50NuMHhiIllZuHEnRaoPZsZVP/oyFysx
|
||||
j0ag+mkUfJ2fWuLrM04QprPtd2PYw5703d95mnrU7t7dmszDt6ldzBE6B7tvl6QB
|
||||
I0eVH6N3+liSxsfQvc+TGEK3fveeZerVO8rtrMVwof7UEJrwEgRErBpbeFBFV0xv
|
||||
vYDLgVwts7x2oR5lAgMBAAGjggFKMIIBRjAfBgNVHSMEGDAWgBTAephojYn7qwVk
|
||||
DBF9qn1luMrMTjAdBgNVHQ4EFgQU0m/3lvSFP3I8MH0j2oV4m6N8WnwwEgYDVR0T
|
||||
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwNgYDVR0fBC8wLTAroCmgJ4Yl
|
||||
aHR0cDovL2cxLnN5bWNiLmNvbS9jcmxzL2d0Z2xvYmFsLmNybDAvBggrBgEFBQcB
|
||||
AQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9nMi5zeW1jYi5jb20wTAYDVR0gBEUw
|
||||
QzBBBgpghkgBhvhFAQc2MDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuZ2VvdHJ1
|
||||
c3QuY29tL3Jlc291cmNlcy9jcHMwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMTEVN5
|
||||
bWFudGVjUEtJLTEtNTM5MA0GCSqGSIb3DQEBCwUAA4IBAQCg1Pcs+3QLf2TxzUNq
|
||||
n2JTHAJ8mJCi7k9o1CAacxI+d7NQ63K87oi+fxfqd4+DYZVPhKHLMk9sIb7SaZZ9
|
||||
Y73cK6gf0BOEcP72NZWJ+aZ3sEbIu7cT9clgadZM/tKO79NgwYCA4ef7i28heUrg
|
||||
3Kkbwbf7w0lZXLV3B0TUl/xJAIlvBk4BcBmsLxHA4uYPL4ZLjXvDuacu9PGsFj45
|
||||
SVGeF0tPEDpbpaiSb/361gsDTUdWVxnzy2v189bPsPX1oxHSIFMTNDcFLENaY9+N
|
||||
QNaFHlHpURceA1bJ8TCt55sRornQMYGbaLHZ6PPmlH7HrhMvh+3QJbBo+d4IWvMp
|
||||
zNSS
|
||||
-----END CERTIFICATE-----
|
||||
Reference in New Issue
Block a user