Skip to content

Commit 0325239

Browse files
committed
PoC - Use Foreign Function & Memory API for GTK3 OS Support
1 parent 1de0f85 commit 0325239

File tree

4 files changed

+59
-5
lines changed

4 files changed

+59
-5
lines changed

org.eclipse.wb.os.linux/.classpath

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<classpath>
3-
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21"/>
3+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-24"/>
44
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
55
<classpathentry kind="src" path="src"/>
66
<classpathentry kind="output" path="bin"/>

org.eclipse.wb.os.linux/.settings/org.eclipse.jdt.core.prefs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
eclipse.preferences.version=1
22
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3-
org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
3+
org.eclipse.jdt.core.compiler.codegen.targetPlatform=24
44
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
5-
org.eclipse.jdt.core.compiler.compliance=21
5+
org.eclipse.jdt.core.compiler.compliance=24
66
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
77
org.eclipse.jdt.core.compiler.debug.localVariable=generate
88
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -65,7 +65,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa
6565
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
6666
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
6767
org.eclipse.jdt.core.compiler.release=enabled
68-
org.eclipse.jdt.core.compiler.source=21
68+
org.eclipse.jdt.core.compiler.source=24
6969
org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
7070
org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
7171
org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=true

org.eclipse.wb.os.linux/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Bundle-Name: %pluginName
44
Bundle-SymbolicName: org.eclipse.wb.os.linux;singleton:=true
55
Bundle-Version: 1.10.200.qualifier
66
Bundle-Vendor: %providerName
7-
Bundle-RequiredExecutionEnvironment: JavaSE-21
7+
Bundle-RequiredExecutionEnvironment: JavaSE-24
88
Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux))
99
Require-Bundle: org.eclipse.swt;bundle-version="[3.126.0,4.0.0)",
1010
org.eclipse.core.runtime;bundle-version="[3.31.100,4.0.0)",
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2025 Patrick Ziegler and others.
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Eclipse Public License 2.0 which is available at
6+
* https://www.eclipse.org/legal/epl-2.0.
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*
10+
* Contributors:
11+
* Patrick Ziegler - initial API and implementation
12+
*******************************************************************************/
13+
package org.eclipse.wb.internal.os.linux.gtk3;
14+
15+
import java.lang.foreign.Arena;
16+
import java.lang.foreign.FunctionDescriptor;
17+
import java.lang.foreign.Linker;
18+
import java.lang.foreign.MemorySegment;
19+
import java.lang.foreign.SymbolLookup;
20+
import java.lang.foreign.ValueLayout;
21+
import java.lang.invoke.MethodHandle;
22+
23+
public final class GTK3 {
24+
private static class InstanceHolder {
25+
private static final Linker linker = Linker.nativeLinker();
26+
private static final SymbolLookup gtk = SymbolLookup.libraryLookup("libgtk-3.so", Arena.ofAuto());
27+
28+
private static MethodHandle createHandle(String name, FunctionDescriptor descriptor) {
29+
MemorySegment symbol = gtk.find(name).orElseThrow(UnsatisfiedLinkError::new);
30+
return InstanceHolder.linker.downcallHandle(symbol, descriptor);
31+
}
32+
33+
static final MethodHandle gtk_get_major_version = createHandle("gtk_get_major_version",
34+
FunctionDescriptor.of(ValueLayout.JAVA_INT));
35+
36+
static final MethodHandle gtk_get_minor_version = createHandle("gtk_get_minor_version",
37+
FunctionDescriptor.of(ValueLayout.JAVA_INT));
38+
39+
static final MethodHandle gtk_get_micro_version = createHandle("gtk_get_micro_version",
40+
FunctionDescriptor.of(ValueLayout.JAVA_INT));
41+
}
42+
43+
public static int gtk_get_major_version() throws Throwable {
44+
return (int) InstanceHolder.gtk_get_major_version.invoke();
45+
}
46+
47+
public static int gtk_get_minor_version() throws Throwable {
48+
return (int) InstanceHolder.gtk_get_minor_version.invoke();
49+
}
50+
51+
public static int gtk_get_micro_version() throws Throwable {
52+
return (int) InstanceHolder.gtk_get_micro_version.invoke();
53+
}
54+
}

0 commit comments

Comments
 (0)