From e482758d7ba035e9c69642889cdf2f8114af5d31 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Fri, 13 Jun 2025 19:15:25 +0200 Subject: [PATCH] add bindings for remaining event wrapper functions --- .../src/main/java/de/unixwork/ui/Event.java | 30 ++++++++++++++++--- .../java/de/unixwork/ui/EventWrapper.java | 1 - .../java/de/unixwork/ui/ToolkitFuncs.java | 15 ++++++++++ .../main/java/de/unixwork/ui/UiObject.java | 10 +++++++ 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/ui-java/src/main/java/de/unixwork/ui/Event.java b/ui-java/src/main/java/de/unixwork/ui/Event.java index 6846423..00d0732 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Event.java +++ b/ui-java/src/main/java/de/unixwork/ui/Event.java @@ -5,9 +5,13 @@ import java.lang.foreign.MemorySegment; public class Event { private UiObject object; private Object documemt; - private Object window; + private Object windowData; private Object eventdata; private int intval; + private int set; + + private MemorySegment windowPtr; + private MemorySegment documentPtr; public Event() { @@ -20,6 +24,14 @@ public class Event { try { long objAddress = ((MemorySegment) ui.event_get_obj.invoke(eventPtr)).address(); object = toolkit.getToplevelObject(objAddress); + if (object != null) { + windowData = object.getWindowData(); + } + + windowPtr = (MemorySegment) ui.event_get_windowdata.invoke(eventPtr); + documentPtr = (MemorySegment) ui.event_get_document.invoke(eventPtr); + intval = (int)ui.event_get_int.invoke(eventPtr); + set = (int)ui.event_get_set.invoke(eventPtr); } catch (Throwable e) { throw new RuntimeException(e); } @@ -33,15 +45,25 @@ public class Event { return documemt; } - public Object getWindow() { - return window; + public Object getWindowData() { + return windowData; } public Object getEventdata() { return eventdata; } - public int getIntval() { + public int getIntValue() { return intval; } + + public int getSet() { return set; } + + public MemorySegment getWindowPtr() { + return windowPtr; + } + + public MemorySegment getDocumentPtr() { + return documentPtr; + } } diff --git a/ui-java/src/main/java/de/unixwork/ui/EventWrapper.java b/ui-java/src/main/java/de/unixwork/ui/EventWrapper.java index 3d0bfc0..a2d34b8 100644 --- a/ui-java/src/main/java/de/unixwork/ui/EventWrapper.java +++ b/ui-java/src/main/java/de/unixwork/ui/EventWrapper.java @@ -53,7 +53,6 @@ public class EventWrapper { } public static void eventHandler(MemorySegment event, MemorySegment userdata) { - System.out.println("event handler"); int eventHandlerIndex = (int)userdata.address(); Event e = new Event(event); diff --git a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java index 13935b9..160bfcf 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java @@ -7,6 +7,11 @@ public class ToolkitFuncs { static ToolkitFuncs instance; public MethodHandle event_get_obj; + public MethodHandle event_get_document; + public MethodHandle event_get_windowdata; + public MethodHandle event_get_eventdata; + public MethodHandle event_get_int; + public MethodHandle event_get_set; private ToolkitFuncs(Linker linker, SymbolLookup lib) { // void* func(void*) @@ -14,8 +19,18 @@ public class ToolkitFuncs { FunctionDescriptor sigi_m = FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.ADDRESS); MemorySegment event_get_obj_addr = lib.find("ui_event_get_obj").orElseThrow(); + MemorySegment event_get_document_addr = lib.find("ui_event_get_document").orElseThrow(); + MemorySegment event_get_windowdata_addr = lib.find("ui_event_get_windowdata").orElseThrow(); + MemorySegment event_get_eventdata_addr = lib.find("ui_event_get_eventdata").orElseThrow(); + MemorySegment event_get_int_addr = lib.find("ui_event_get_int").orElseThrow(); + MemorySegment event_get_set_addr = lib.find("ui_event_get_set").orElseThrow(); event_get_obj = linker.downcallHandle(event_get_obj_addr, sigm_m); + event_get_document = linker.downcallHandle(event_get_document_addr, sigm_m); + event_get_windowdata = linker.downcallHandle(event_get_windowdata_addr, sigm_m); + event_get_eventdata = linker.downcallHandle(event_get_eventdata_addr, sigm_m); + event_get_int = linker.downcallHandle(event_get_int_addr, sigi_m); + event_get_set = linker.downcallHandle(event_get_set_addr, sigi_m); } static ToolkitFuncs getInstance() { diff --git a/ui-java/src/main/java/de/unixwork/ui/UiObject.java b/ui-java/src/main/java/de/unixwork/ui/UiObject.java index 6938f5c..503ab46 100644 --- a/ui-java/src/main/java/de/unixwork/ui/UiObject.java +++ b/ui-java/src/main/java/de/unixwork/ui/UiObject.java @@ -14,6 +14,8 @@ public class UiObject { private Arena arena; + private Object windowData; + public UiObject(MemorySegment ptr) { this.ptr = ptr; // TODO: maybe the C toolkit code should also handle toplevel object creation and call a callback @@ -45,4 +47,12 @@ public class UiObject { } return arena; } + + public void setWindowData(Object windowData) { + this.windowData = windowData; + } + + public Object getWindowData() { + return windowData; + } } -- 2.47.3