diff --git a/org.eclipse.wb.os.linux/.classpath b/org.eclipse.wb.os.linux/.classpath index 375961e4d..98c57b8d8 100644 --- a/org.eclipse.wb.os.linux/.classpath +++ b/org.eclipse.wb.os.linux/.classpath @@ -1,6 +1,6 @@ - + diff --git a/org.eclipse.wb.os.linux/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.wb.os.linux/.settings/org.eclipse.jdt.core.prefs index 23a92494d..5d2f6160f 100644 --- a/org.eclipse.wb.os.linux/.settings/org.eclipse.jdt.core.prefs +++ b/org.eclipse.wb.os.linux/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,8 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=24 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=21 +org.eclipse.jdt.core.compiler.compliance=24 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -65,7 +65,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=21 +org.eclipse.jdt.core.compiler.source=24 org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=true diff --git a/org.eclipse.wb.os.linux/META-INF/MANIFEST.MF b/org.eclipse.wb.os.linux/META-INF/MANIFEST.MF index 3ea8f57b0..4c71e5606 100644 --- a/org.eclipse.wb.os.linux/META-INF/MANIFEST.MF +++ b/org.eclipse.wb.os.linux/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.wb.os.linux;singleton:=true Bundle-Version: 1.10.200.qualifier Bundle-Vendor: %providerName -Bundle-RequiredExecutionEnvironment: JavaSE-21 +Bundle-RequiredExecutionEnvironment: JavaSE-24 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux)) Require-Bundle: org.eclipse.swt;bundle-version="[3.126.0,4.0.0)", org.eclipse.core.runtime;bundle-version="[3.31.100,4.0.0)", diff --git a/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/gtk3/GTK3.java b/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/gtk3/GTK3.java new file mode 100644 index 000000000..f1fedf926 --- /dev/null +++ b/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/gtk3/GTK3.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2025 Patrick Ziegler and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Patrick Ziegler - initial API and implementation + *******************************************************************************/ +package org.eclipse.wb.internal.os.linux.gtk3; + +import java.lang.foreign.Arena; +import java.lang.foreign.FunctionDescriptor; +import java.lang.foreign.Linker; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.SymbolLookup; +import java.lang.foreign.ValueLayout; +import java.lang.invoke.MethodHandle; + +public final class GTK3 { + private static class InstanceHolder { + private static final Linker linker = Linker.nativeLinker(); + private static final SymbolLookup gtk = SymbolLookup.libraryLookup("libgtk-3.so", Arena.ofAuto()); + + private static MethodHandle createHandle(String name, FunctionDescriptor descriptor) { + MemorySegment symbol = gtk.find(name).orElseThrow(UnsatisfiedLinkError::new); + return InstanceHolder.linker.downcallHandle(symbol, descriptor); + } + + static final MethodHandle gtk_get_major_version = createHandle("gtk_get_major_version", + FunctionDescriptor.of(ValueLayout.JAVA_INT)); + + static final MethodHandle gtk_get_minor_version = createHandle("gtk_get_minor_version", + FunctionDescriptor.of(ValueLayout.JAVA_INT)); + + static final MethodHandle gtk_get_micro_version = createHandle("gtk_get_micro_version", + FunctionDescriptor.of(ValueLayout.JAVA_INT)); + } + + public static int gtk_get_major_version() throws Throwable { + return (int) InstanceHolder.gtk_get_major_version.invoke(); + } + + public static int gtk_get_minor_version() throws Throwable { + return (int) InstanceHolder.gtk_get_minor_version.invoke(); + } + + public static int gtk_get_micro_version() throws Throwable { + return (int) InstanceHolder.gtk_get_micro_version.invoke(); + } +}