private static void onObjectDestroy(MemorySegment obj, MemorySegment unused) {
Toolkit toolkit = Toolkit.getInstance();
+ UiObject uiObj = toolkit.getToplevelObject(obj.address());
+ if(uiObj != null) {
+ uiObj.destroy();
+ }
toolkit.toplevelObjects.remove(obj.address());
}
package de.unixwork.ui;
import java.lang.foreign.Arena;
-import java.lang.foreign.FunctionDescriptor;
import java.lang.foreign.MemorySegment;
-import java.lang.invoke.MethodHandle;
import java.util.ArrayList;
-import java.util.function.Function;
public class UiObject extends Context {
MemorySegment ptr;
private ArrayList<EventHandler> eventHandlers = new ArrayList<>();
+ private ArrayList<ObjectDestroyHandler> closeHandlers = new ArrayList<>();
private Arena arena;
}
}
+ public void addCloseHandler(ObjectDestroyHandler handler) {
+ closeHandlers.add(handler);
+ }
+
+ public void removeCloseHandler(ObjectDestroyHandler handler) {
+ closeHandlers.remove(handler);
+ }
+
+ protected void destroy() {
+ for(var handler : closeHandlers) {
+ handler.callback(this);
+ }
+ }
+
public static UiObject createWindow(String title) {
return UiObjectFuncs.instance.window(title);
}