Compare commits

...

2 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
13 changed files with 70 additions and 718 deletions

View File

@@ -174,7 +174,6 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \
DISABLED_WARNINGS_clang_debug_trace.c := format-nonliteral, \
DISABLED_WARNINGS_clang_Trace.c := format-nonliteral, \
DISABLED_WARNINGS_clang_TransformHelper.c := sign-compare, \
DISABLED_WARNINGS_clang_system_properties.c := format-nonliteral, \
DISABLED_WARNINGS_microsoft := 4244 4996, \
DISABLED_WARNINGS_microsoft_awt_Toolkit.cpp := 4267, \
LDFLAGS := $(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN), \
@@ -1114,7 +1113,6 @@ ifeq ($(call isTargetOs, macosx), true)
DISABLED_WARNINGS_clang_OGLPaints.c := format-nonliteral, \
DISABLED_WARNINGS_clang_PrinterView.m := enum-conversion, \
DISABLED_WARNINGS_clang_SystemHotkey.m := format-nonliteral, \
DISABLED_WARNINGS_clang_system_properties.c := format-nonliteral, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN) \
-L$(INSTALL_LIBRARIES_HERE), \

View File

@@ -25,7 +25,6 @@
package sun.awt;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import static java.awt.RenderingHints.KEY_TEXT_ANTIALIASING;
import static java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT;
@@ -52,13 +51,11 @@ import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Arrays;
import jdk.internal.misc.InnocuousThread;
import sun.awt.X11.XBaseWindow;
import sun.security.action.GetIntegerAction;
import com.sun.java.swing.plaf.gtk.GTKConstants.TextDirection;
import sun.java2d.opengl.OGLRenderQueue;
import sun.security.action.GetPropertyAction;
import sun.util.logging.PlatformLogger;
public abstract class UNIXToolkit extends SunToolkit
{
@@ -111,18 +108,6 @@ public abstract class UNIXToolkit extends SunToolkit
private Boolean nativeGTKAvailable;
private Boolean nativeGTKLoaded;
private BufferedImage tmpImage = null;
private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.UNIXToolkit");
private static void printError(String str) {
log.fine(str);
}
private static native void toolkitInit();
protected UNIXToolkit() {
toolkitInit();
initSystemPropertyWatcher();
}
public static int getDatatransferTimeout() {
@SuppressWarnings("removal")
@@ -493,8 +478,6 @@ public abstract class UNIXToolkit extends SunToolkit
return result;
}
private static native int isSystemDarkColorScheme();
@Override
public boolean isRunningOnXWayland() {
return isOnXWayland();
@@ -513,35 +496,6 @@ public abstract class UNIXToolkit extends SunToolkit
// application icons).
private static final WindowFocusListener waylandWindowFocusListener;
private static final String OS_THEME_IS_DARK = "awt.os.theme.isDark";
private static Thread systemPropertyWatcher = null;
private void initSystemPropertyWatcher() {
int initialSystemDarkColorScheme = isSystemDarkColorScheme();
if (initialSystemDarkColorScheme >= 0) {
setDesktopProperty(OS_THEME_IS_DARK, initialSystemDarkColorScheme != 0);
systemPropertyWatcher = InnocuousThread.newThread("SystemPropertyWatcher",
() -> {
while (true) {
try {
int isSystemDarkColorScheme = isSystemDarkColorScheme();
if (isSystemDarkColorScheme >= 0) {
setDesktopProperty(OS_THEME_IS_DARK, isSystemDarkColorScheme != 0);
}
Thread.sleep(1000);
} catch (Exception ignored) {
}
}
});
systemPropertyWatcher.setDaemon(true);
systemPropertyWatcher.start();
}
}
static {
if (isOnXWayland()) {
waylandWindowFocusListener = new WindowAdapter() {

View File

@@ -1,108 +0,0 @@
/*
* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2023, JetBrains s.r.o.. All rights reserved.
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. 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.
*/
#include "dbus_interface.h"
#include <dlfcn.h>
#include <stddef.h>
#include <stdlib.h>
#include <stdbool.h>
#include "jvm_md.h"
#define DBUS_LIB JNI_LIB_NAME("dbus-1")
#define DBUS_LIB_VERSIONED VERSIONED_JNI_LIB_NAME("dbus-1", "3")
static bool isCurrentVersionSupported(DBusApi* dBusApi) {
int major = 0, minor = 0, micro = 0;
dBusApi->dbus_get_version(&major, &minor, &micro);
return major == 1;
}
static bool DBusApi_init(DBusApi* dBusApi, void *libhandle) {
dBusApi->dbus_get_version = dlsym(libhandle, "dbus_get_version");
if (dBusApi->dbus_get_version == NULL || !isCurrentVersionSupported(dBusApi)) {
return false;
}
dBusApi->dbus_error_init = dlsym(libhandle, "dbus_error_init");
dBusApi->dbus_bus_get = dlsym(libhandle, "dbus_bus_get");
dBusApi->dbus_error_is_set = dlsym(libhandle, "dbus_error_is_set");
dBusApi->dbus_bus_request_name = dlsym(libhandle, "dbus_bus_request_name");
dBusApi->dbus_bus_add_match = dlsym(libhandle, "dbus_bus_add_match");
dBusApi->dbus_connection_add_filter = dlsym(libhandle, "dbus_connection_add_filter");
dBusApi->dbus_connection_flush = dlsym(libhandle, "dbus_connection_flush");
dBusApi->dbus_connection_read_write = dlsym(libhandle, "dbus_connection_read_write");
dBusApi->dbus_connection_dispatch = dlsym(libhandle, "dbus_connection_dispatch");
dBusApi->dbus_message_is_signal = dlsym(libhandle, "dbus_message_is_signal");
dBusApi->dbus_message_new_method_call = dlsym(libhandle, "dbus_message_new_method_call");
dBusApi->dbus_message_set_destination = dlsym(libhandle, "dbus_message_set_destination");
dBusApi->dbus_message_iter_init_append = dlsym(libhandle, "dbus_message_iter_init_append");
dBusApi->dbus_message_iter_append_basic = dlsym(libhandle, "dbus_message_iter_append_basic");
dBusApi->dbus_connection_send_with_reply_and_block = dlsym(libhandle, "dbus_connection_send_with_reply_and_block");
dBusApi->dbus_message_iter_init = dlsym(libhandle, "dbus_message_iter_init");
dBusApi->dbus_message_iter_get_arg_type = dlsym(libhandle, "dbus_message_iter_get_arg_type");
dBusApi->dbus_message_iter_get_basic = dlsym(libhandle, "dbus_message_iter_get_basic");
dBusApi->dbus_message_iter_recurse = dlsym(libhandle, "dbus_message_iter_recurse");
dBusApi->dbus_message_iter_next = dlsym(libhandle, "dbus_message_iter_next");
dBusApi->dbus_message_unref = dlsym(libhandle, "dbus_message_unref");
dBusApi->dbus_message_set_auto_start = dlsym(libhandle, "dbus_message_set_auto_start");
return dBusApi->dbus_error_init != NULL && dBusApi->dbus_bus_get != NULL && dBusApi->dbus_error_is_set != NULL &&
dBusApi->dbus_bus_request_name != NULL && dBusApi->dbus_bus_add_match != NULL &&
dBusApi->dbus_connection_add_filter != NULL && dBusApi->dbus_connection_flush != NULL &&
dBusApi->dbus_connection_read_write != NULL && dBusApi->dbus_connection_dispatch != NULL &&
dBusApi->dbus_message_is_signal != NULL && dBusApi->dbus_message_new_method_call != NULL &&
dBusApi->dbus_message_set_destination != NULL && dBusApi->dbus_message_iter_init_append != NULL &&
dBusApi->dbus_message_iter_append_basic != NULL && dBusApi->dbus_connection_send_with_reply_and_block != NULL &&
dBusApi->dbus_message_iter_init != NULL && dBusApi->dbus_message_iter_get_arg_type != NULL &&
dBusApi->dbus_message_iter_get_basic != NULL && dBusApi->dbus_message_iter_recurse != NULL &&
dBusApi->dbus_message_iter_next != NULL && dBusApi->dbus_message_unref != NULL &&
dBusApi->dbus_message_set_auto_start != NULL;
}
DBusApi* DBusApi_setupDBus(void *libhandle) {
DBusApi *dBusApi = (DBusApi*)malloc(sizeof(DBusApi));
if (dBusApi == NULL || !DBusApi_init(dBusApi, libhandle)) {
free(dBusApi);
dBusApi = NULL;
}
return dBusApi;
}
DBusApi* DBusApi_setupDBusDefault() {
void *dbus_libhandle = dlopen(DBUS_LIB, RTLD_LAZY | RTLD_LOCAL);
if (dbus_libhandle == NULL) {
dbus_libhandle = dlopen(DBUS_LIB_VERSIONED, RTLD_LAZY | RTLD_LOCAL);
if (dbus_libhandle == NULL) {
return NULL;
}
}
return DBusApi_setupDBus(dbus_libhandle);
}

View File

@@ -1,179 +0,0 @@
/*
* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2023, JetBrains s.r.o.. All rights reserved.
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. 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.
*/
#ifndef JETBRAINSRUNTIME_DBUS_INTERFACE_H
#define JETBRAINSRUNTIME_DBUS_INTERFACE_H
#define DBUS_NAME_FLAG_ALLOW_REPLACEMENT 0x1
#define DBUS_NAME_FLAG_REPLACE_EXISTING 0x2
#define DBUS_NAME_FLAG_DO_NOT_QUEUE 0x4
#define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1
#define DBUS_REQUEST_NAME_REPLY_IN_QUEUE 2
#define DBUS_REQUEST_NAME_REPLY_EXISTS 3
#define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4
typedef enum
{
DBUS_BUS_SESSION, /**< The login session bus */
DBUS_BUS_SYSTEM, /**< The systemwide bus */
DBUS_BUS_STARTER /**< The bus that started us, if any */
} DBusBusType;
typedef enum
{
DBUS_HANDLER_RESULT_HANDLED, /**< Message has had its effect - no need to run more handlers. */
DBUS_HANDLER_RESULT_NOT_YET_HANDLED, /**< Message has not had any effect - see if other handlers want it. */
DBUS_HANDLER_RESULT_NEED_MEMORY /**< Need more memory in order to return #DBUS_HANDLER_RESULT_HANDLED or #DBUS_HANDLER_RESULT_NOT_YET_HANDLED. Please try again later with more memory. */
} DBusHandlerResult;
typedef enum
{
DBUS_DISPATCH_DATA_REMAINS, /**< There is more data to potentially convert to messages. */
DBUS_DISPATCH_COMPLETE, /**< All currently available data has been processed. */
DBUS_DISPATCH_NEED_MEMORY /**< More memory is needed to continue. */
} DBusDispatchStatus;
typedef struct DBusConnection DBusConnection;
typedef struct DBusMessage DBusMessage;
typedef DBusHandlerResult (*DBusHandleMessageFunction) (DBusConnection *connection,
DBusMessage *message,
void *user_data);
typedef void (*DBusFreeFunction) (void *memory);
typedef struct DBusError DBusError;
struct DBusError
{
const char *name;
const char *message;
unsigned int dummy1 : 1;
unsigned int dummy2 : 1;
unsigned int dummy3 : 1;
unsigned int dummy4 : 1;
unsigned int dummy5 : 1;
void *padding1;
};
typedef unsigned int dbus_uint32_t;
typedef dbus_uint32_t dbus_bool_t;
typedef struct DBusMessageIter DBusMessageIter;
struct DBusMessageIter
{
void *dummy1;
void *dummy2;
dbus_uint32_t dummy3;
int dummy4;
int dummy5;
int dummy6;
int dummy7;
int dummy8;
int dummy9;
int dummy10;
int dummy11;
int pad1;
int pad2;
void *pad3;
};
#define DBUS_TYPE_INT16 ((int) 'n')
#define DBUS_TYPE_UINT16 ((int) 'q')
#define DBUS_TYPE_INT32 ((int) 'i')
#define DBUS_TYPE_UINT32 ((int) 'u')
#define DBUS_TYPE_INT64 ((int) 'x')
#define DBUS_TYPE_UINT64 ((int) 't')
#define DBUS_TYPE_DOUBLE ((int) 'd')
#define DBUS_TYPE_BYTE ((int) 'y')
#define DBUS_TYPE_BOOLEAN ((int) 'b')
#define DBUS_TYPE_STRING ((int) 's')
#define DBUS_TYPE_VARIANT ((int) 'v')
#define DBUS_TYPE_INVALID ((int) '\0')
typedef struct DBusApi {
void (*dbus_get_version)(int *major_version_p, int *minor_version_p, int *micro_version_p);
void (*dbus_error_init)(DBusError *error);
DBusConnection *(*dbus_bus_get)(DBusBusType type, DBusError *error);
dbus_bool_t (*dbus_error_is_set)(const DBusError *error);
void (*dbus_error_free)(DBusError *error);
int (*dbus_bus_request_name)(DBusConnection *connection, const char *name, unsigned int flags, DBusError *error);
void (*dbus_bus_add_match)(DBusConnection *connection, const char *rule, DBusError *error);
dbus_bool_t (*dbus_connection_add_filter)(DBusConnection *connection, DBusHandleMessageFunction function,
void *user_data, DBusFreeFunction free_data_function);
void (*dbus_connection_flush)(DBusConnection *connection);
dbus_bool_t (*dbus_connection_read_write)(DBusConnection *connection, int timeout_milliseconds);
DBusDispatchStatus (*dbus_connection_dispatch)(DBusConnection *connection);
dbus_bool_t (*dbus_message_is_signal)(DBusMessage *message, const char *iface, const char *signal_name);
DBusMessage* (*dbus_message_new_method_call)(const char *bus_name, const char *path,
const char *iface, const char *method);
dbus_bool_t (*dbus_message_set_destination)(DBusMessage *message, const char *destination);
void (*dbus_message_iter_init_append)(DBusMessage *message, DBusMessageIter *iter);
dbus_bool_t (*dbus_message_iter_append_basic)(DBusMessageIter *iter, int type, const void *value);
DBusMessage *(*dbus_connection_send_with_reply_and_block)(DBusConnection *connection, DBusMessage *message,
int timeout_milliseconds, DBusError *error);
dbus_bool_t (*dbus_message_iter_init)(DBusMessage *message, DBusMessageIter *iter);
int (*dbus_message_iter_get_arg_type)(DBusMessageIter *iter);
void (*dbus_message_iter_get_basic)(DBusMessageIter *iter, void *value);
void (*dbus_message_iter_recurse)(DBusMessageIter *iter, DBusMessageIter *sub);
dbus_bool_t (*dbus_message_iter_next)(DBusMessageIter *iter);
void (*dbus_message_unref)(DBusMessage *message);
void (*dbus_message_set_auto_start)(DBusMessage *message, dbus_bool_t auto_start);
} DBusApi;
DBusApi* DBusApi_setupDBus(void *libhandle);
DBusApi* DBusApi_setupDBusDefault();
#endif //JETBRAINSRUNTIME_DBUS_INTERFACE_H

View File

@@ -1,238 +0,0 @@
/*
* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2023, JetBrains s.r.o.. All rights reserved.
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. 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.
*/
#include "system_properties.h"
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define UNKNOWN_RESULT -1
#define SETTING_INTERFACE "org.freedesktop.portal.Settings"
#define SETTING_INTERFACE_METHOD "Read"
#define DESKTOP_DESTINATION "org.freedesktop.portal.Desktop"
#define DESKTOP_PATH "/org/freedesktop/portal/desktop"
#define REPLY_TIMEOUT 150
static DBusConnection *connection = NULL;
static JNIEnv *env = NULL;
static DBusApi *dBus = NULL;
static bool initialized = false;
static bool logEnabled = true;
extern JavaVM *jvm;
static void printError(const char* fmt, ...) {
if (!logEnabled) {
return;
}
env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
char* buf = (char*)malloc(1024);
if (env && buf) {
va_list vargs;
va_start(vargs, fmt);
vsnprintf(buf, 1024, fmt, vargs);
jstring text = JNU_NewStringPlatform(env, buf);
free(buf);
va_end(vargs);
jboolean ignoreException;
JNU_CallStaticMethodByName(env, &ignoreException, "sun/awt/UNIXToolkit", "printError",
"(Ljava/lang/String;)V", text);
}
}
static bool dbusCheckError(DBusError *err, const char *msg) {
bool is_error_set = dBus->dbus_error_is_set(err);
if (is_error_set) {
printError("DBus error: %s. %s\n", msg, err->message);
dBus->dbus_error_free(err);
}
return is_error_set;
}
bool SystemProperties_setup(DBusApi *dBus_, JNIEnv *env_) {
env = env_;
dBus = dBus_;
DBusError err;
int ret;
dBus->dbus_error_init(&err);
if ((connection = dBus->dbus_bus_get(DBUS_BUS_SESSION, &err)) == NULL) {
printError("DBus error: connection is Null\n");
return false;
}
if (dbusCheckError(&err, "connection error")) {
return false;
}
ret = dBus->dbus_bus_request_name(connection, "dbus.JBR.server", DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER && ret != DBUS_REQUEST_NAME_REPLY_IN_QUEUE) {
printError("DBus error: Failed to acquire service name \n");
return false;
}
if (dbusCheckError(&err, "error request 'dbus.JBR.server' name on the bus")) {
return false;
}
dBus->dbus_connection_flush(connection);
initialized = true;
return true;
}
// current implementation of object decomposition supports only
// primitive types (including a recursive type wrapper)
static bool getBasicIter(void *val, DBusMessageIter *iter, int demand_type) {
int type = dBus->dbus_message_iter_get_arg_type(iter);
switch (type)
{
case DBUS_TYPE_INT16:
case DBUS_TYPE_UINT16:
case DBUS_TYPE_INT32:
case DBUS_TYPE_UINT32:
case DBUS_TYPE_INT64:
case DBUS_TYPE_UINT64:
case DBUS_TYPE_DOUBLE:
case DBUS_TYPE_BYTE:
case DBUS_TYPE_BOOLEAN:
case DBUS_TYPE_STRING:
{
if (type != demand_type) {
return false;
}
dBus->dbus_message_iter_get_basic(iter, val);
return true;
}
case DBUS_TYPE_VARIANT:
{
DBusMessageIter sub_iter;
dBus->dbus_message_iter_recurse(iter, &sub_iter);
bool res = getBasicIter(val, &sub_iter, demand_type);
// current implementation doesn't support types with multiple fields
if (dBus->dbus_message_iter_next(iter)) {
return false;
}
return res;
}
case DBUS_TYPE_INVALID:
default:
return false;
}
}
static bool sendDBusMessageWithReply(const char *messages[], int message_count, void *val, int demand_type) {
DBusError error;
DBusMessage *message = NULL;
DBusMessage *reply = NULL;
DBusMessageIter iter;
bool res = false;
if (!initialized) {
return false;
}
dBus->dbus_error_init(&error);
message = dBus->dbus_message_new_method_call(NULL, DESKTOP_PATH, SETTING_INTERFACE, SETTING_INTERFACE_METHOD);
if (message == NULL) {
printError("DBus error: cannot allocate message\n");
goto cleanup;
}
dBus->dbus_message_set_auto_start(message, true);
if (!dBus->dbus_message_set_destination(message, DESKTOP_DESTINATION)) {
printError("DBus error: cannot set destination\n");
goto cleanup;
}
dBus->dbus_message_iter_init_append(message, &iter);
for (int i = 0; i < message_count; i++) {
if (!dBus->dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &messages[i])) {
printError("DBus error: cannot append to message\n");
goto cleanup;
}
}
if ((reply = dBus->dbus_connection_send_with_reply_and_block(connection, message, REPLY_TIMEOUT, &error)) == NULL) {
printError("DBus error: cannot get reply or sent message. %s\n", dBus->dbus_error_is_set(&error) ? error.message : "");
goto cleanup;
}
if (!dBus->dbus_message_iter_init (reply, &iter)) {
printError("DBus error: cannot process message\n");
goto cleanup;
}
res = getBasicIter(val, &iter, demand_type);
cleanup:
if (reply) {
dBus->dbus_message_unref(reply);
}
if (message) {
dBus->dbus_message_unref(message);
}
return res;
}
JNIEXPORT jint JNICALL Java_sun_awt_UNIXToolkit_isSystemDarkColorScheme() {
static int use_freedesktop_appearance = -1;
const char *freedesktop_appearance_messages[] = {"org.freedesktop.appearance", "color-scheme"};
const char *gnome_desktop_messages[] = {"org.gnome.desktop.interface", "gtk-theme"};
if (use_freedesktop_appearance == -1) {
unsigned int res = 0;
logEnabled = false;
use_freedesktop_appearance =
sendDBusMessageWithReply(freedesktop_appearance_messages, 2, &res, DBUS_TYPE_UINT32);
logEnabled = true;
}
if (use_freedesktop_appearance) {
unsigned int res = 0;
if (!sendDBusMessageWithReply(freedesktop_appearance_messages, 2, &res, DBUS_TYPE_UINT32)) {
return UNKNOWN_RESULT;
}
return res;
} else {
char *res = NULL;
if (!sendDBusMessageWithReply(gnome_desktop_messages, 2, &res, DBUS_TYPE_STRING)) {
return UNKNOWN_RESULT;
}
return (res != NULL) ? strstr(res, "dark") != NULL : UNKNOWN_RESULT;
}
}
JNIEXPORT void JNICALL Java_sun_awt_UNIXToolkit_toolkitInit() {
DBusApi *dBus = DBusApi_setupDBusDefault();
if (dBus) {
SystemProperties_setup(dBus, env);
}
}

View File

@@ -1,40 +0,0 @@
/*
* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2023, JetBrains s.r.o.. All rights reserved.
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. 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.
*/
#ifndef JETBRAINSRUNTIME_SYSTEM_PROPERTIES_H
#define JETBRAINSRUNTIME_SYSTEM_PROPERTIES_H
#include <stdbool.h>
#include <jni.h>
#include <jni_util.h>
#include "dbus_interface.h"
bool SystemProperties_setup(DBusApi *dBus_, JNIEnv *env_);
void SystemProperties_pullEvent(void);
#endif //JETBRAINSRUNTIME_SYSTEM_PROPERTIES_H

View File

@@ -28,5 +28,3 @@ serviceability/tmtools/jstat/GcTest02.java JBR-6974 linux-all
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

@@ -259,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

@@ -1,99 +0,0 @@
/*
* Copyright 2000-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.
*/
import java.awt.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
/**
* @test
* @summary DetectingOSThemeTest checks that JBR could correctly detect OS theme and notify about theme changing in time
* @run main DetectingOSThemeTest
* @requires (os.family == "linux")
*/
public class DetectingOSThemeTest {
private static final int TIME_TO_WAIT = 2000;
private static final String LIGHT_THEME_NAME = "Light";
private static final String DARK_THEME_NAME = "Dark";
private static final String UNDEFINED_THEME_NAME = "Undefined";
private static String currentTheme() {
Boolean val = (Boolean) Toolkit.getDefaultToolkit().getDesktopProperty("awt.os.theme.isDark");
if (val == null) {
return UNDEFINED_THEME_NAME;
}
return (val) ? DARK_THEME_NAME : LIGHT_THEME_NAME;
}
private static void setOsDarkTheme(String val) {
try {
if (val.equals(DARK_THEME_NAME)) {
Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'");
Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'");
} else {
Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita'");
Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface color-scheme 'default'");
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static String currentTheme = null;
public static void main(String[] args) throws Exception {
currentTheme = currentTheme();
if (currentTheme.equals(UNDEFINED_THEME_NAME)) {
throw new RuntimeException("Test Failed! Cannot detect current OS theme");
}
String initialTheme = currentTheme;
try {
setOsDarkTheme(LIGHT_THEME_NAME);
Thread.sleep(TIME_TO_WAIT);
if (!currentTheme().equals(LIGHT_THEME_NAME)) {
throw new RuntimeException("Test Failed! Initial OS theme supposed to be Light");
}
String[] themesOrder = {DARK_THEME_NAME, LIGHT_THEME_NAME, DARK_THEME_NAME};
Toolkit.getDefaultToolkit().addPropertyChangeListener("awt.os.theme.isDark", evt -> {
currentTheme = currentTheme();
});
for (String nextTheme : themesOrder) {
setOsDarkTheme(nextTheme);
Thread.sleep(TIME_TO_WAIT);
if (!currentTheme().equals(nextTheme)) {
throw new RuntimeException("Test Failed! OS theme which was set doesn't match with detected");
}
if (!currentTheme.equals(nextTheme)) {
throw new RuntimeException("Test Failed! Changing OS theme was not detected");
}
}
} finally {
setOsDarkTheme(initialTheme);
}
}
}

View File

@@ -128,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

@@ -163,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
@@ -1026,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
@@ -1352,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

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
@@ -68,7 +69,7 @@ sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5204 linux-all,macosx-all,wi
#
java/awt/Graphics/XORPaint.java#id0 nobug generic-all
java/awt/Graphics2D/LargeWindowPaintTest.java#ZGenerational nobug generic-all
java/awt/Graphics2D/LargeWindowPaintTest.java#ZSinglege 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
@@ -106,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