]> uap-core.de Git - rssreader.git/commitdiff
free args after creating widgets
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 9 Jul 2025 17:53:06 +0000 (19:53 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 9 Jul 2025 17:53:06 +0000 (19:53 +0200)
ui-java/src/main/java/de/unixwork/ui/AbstractWidgetBuilder.java
ui-java/src/main/java/de/unixwork/ui/ButtonBuilder.java
ui-java/src/main/java/de/unixwork/ui/ContainerBuilder.java
ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java
ui-java/src/main/java/de/unixwork/ui/SplitPaneBuilder.java
ui-java/src/main/java/de/unixwork/ui/ToggleBuilder.java

index 69cb23eedd1a9e53f9e490b5462c78e851bb2cc2..bdff20533269b7c597821abc6f88c474090f8a67 100644 (file)
@@ -6,7 +6,9 @@ import java.lang.invoke.MethodHandle;
 
 public abstract class AbstractWidgetBuilder {
     UiObject obj;
+    MemorySegment args;
     MethodHandle widgetConstructor;
+    MethodHandle argsFree;
 
     public abstract MemorySegment createArgs(Arena arena) throws Throwable;
 
@@ -15,9 +17,21 @@ public abstract class AbstractWidgetBuilder {
         try (Arena arena = Arena.ofConfined()) {
             MemorySegment args = createArgs(arena);
             widget = new UiWidget((MemorySegment) widgetConstructor.invoke(obj.ptr, args));
+            freeArgs();
         } catch (Throwable e) {
             throw new RuntimeException(e);
         }
         return widget;
     }
+
+    void freeArgs() {
+        if(argsFree != null) {
+            try {
+                argsFree.invoke(args);
+                args = null;
+            } catch (Throwable e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
 }
index 9077d8c849ba8bbf254e08cfc4014b32b85ba9fa..ca41a931d80515073bf59e07b1737c5954430960 100644 (file)
@@ -114,7 +114,7 @@ public class ButtonBuilder extends AbstractWidgetBuilder {
     public MemorySegment createArgs(Arena arena) throws Throwable {
         ArgFuncs ui = ArgFuncs.getInstance();
 
-        MemorySegment args = (MemorySegment)ui.button_args_new.invoke();
+        args = (MemorySegment)ui.button_args_new.invoke();
         if(fill) {
             ui.button_args_set_fill.invoke(args, fill);
         }
index 473d741d597ebcfa22132a8008a35be97db3d141..74ea325ad1e3d27aae567ad13892dee940618599 100644 (file)
@@ -123,7 +123,7 @@ public class ContainerBuilder extends AbstractWidgetBuilder{
     public MemorySegment createArgs(Arena arena) throws Throwable {
         ArgFuncs ui = ArgFuncs.getInstance();
 
-        MemorySegment args = (MemorySegment)ui.container_args_new.invoke();
+        args = (MemorySegment)ui.container_args_new.invoke();
         if(fill) {
             ui.container_args_set_fill.invoke(args, fill);
         }
index 3e644ad7328ea40376ed325d8b48f992fac5cf43..93d6b2e0ca4a95e772e89a1d80afeea21388e9eb 100644 (file)
@@ -32,6 +32,7 @@ public class ListViewBuilder<T> extends AbstractWidgetBuilder {
     public ListViewBuilder(UiObject obj, MethodHandle widgetConstructor) {
         this.obj = obj;
         this.widgetConstructor = widgetConstructor;
+        this.argsFree = ArgFuncs.getInstance().list_args_free;
     }
 
     public ListViewBuilder<T> fill(boolean fill) {
@@ -123,7 +124,7 @@ public class ListViewBuilder<T> extends AbstractWidgetBuilder {
     public MemorySegment createArgs(Arena arena) throws Throwable {
         ArgFuncs ui = ArgFuncs.getInstance();
 
-        MemorySegment args = (MemorySegment) ui.list_args_new.invoke();
+        args = (MemorySegment) ui.list_args_new.invoke();
         if (fill) {
             ui.list_args_set_fill.invoke(args, fill);
         }
index f5211dbd307ed8e847903f7287255639aae70556..e605f1ca37756f5388a513fa0f4adbabead8e05e 100644 (file)
@@ -27,6 +27,7 @@ public class SplitPaneBuilder extends AbstractWidgetBuilder{
     public SplitPaneBuilder(UiObject obj, MethodHandle widgetConstructor) {
         this.obj = obj;
         this.widgetConstructor = widgetConstructor;
+        this.argsFree = ArgFuncs.getInstance().splitpane_args_free;
     }
 
     public SplitPaneBuilder fill(boolean fill) {
index 02277b4608be01ae191585c174a2f808f3c0c616..1fc1bdc3899ba0136e898f14e7ea6637b07c4d0d 100644 (file)
@@ -27,6 +27,7 @@ public class ToggleBuilder extends AbstractWidgetBuilder {
     public ToggleBuilder(UiObject obj, MethodHandle widgetConstructor) {
         this.obj = obj;
         this.widgetConstructor = widgetConstructor;
+        this.argsFree = ArgFuncs.getInstance().toggle_args_free;
     }
 
     public ToggleBuilder fill(boolean fill) {
@@ -122,7 +123,7 @@ public class ToggleBuilder extends AbstractWidgetBuilder {
     public MemorySegment createArgs(Arena arena) throws Throwable {
         ArgFuncs ui = ArgFuncs.getInstance();
 
-        MemorySegment args = (MemorySegment)ui.toggle_args_new.invoke();
+        args = (MemorySegment)ui.toggle_args_new.invoke();
         if(fill) {
             // TODO
         }