]> uap-core.de Git - rssreader.git/commitdiff
add simple and sidebar window
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 11 Jul 2025 19:04:05 +0000 (21:04 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 11 Jul 2025 19:04:05 +0000 (21:04 +0200)
ui-java/src/main/java/de/unixwork/ui/UiObject.java
ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java

index 2ad08fd504b2d26ce00cf85cd959bd53d281d517..fac54c211d37097b71c63d7a17c161dbf38d724c 100644 (file)
@@ -37,6 +37,14 @@ public class UiObject extends Context {
         return UiObjectFuncs.instance.window(title);
     }
 
+    public static UiObject createSidebarWindow(String title) {
+        return UiObjectFuncs.instance.window(title);
+    }
+
+    public static UiObject createSimpleWindow(String title) {
+        return UiObjectFuncs.instance.window(title);
+    }
+
     public void show() {
         UiObjectFuncs.instance.show(this);
     }
index 9a2749f3ff45549836c3eda2f0b8a608911a9b24..014e5a41caa879221ce6fcdf765e9f05456ba86c 100644 (file)
@@ -8,6 +8,8 @@ class UiObjectFuncs {
 
     public MethodHandle ui_show;
     public MethodHandle ui_window;
+    public MethodHandle ui_sidebar_window;
+    public MethodHandle ui_simple_window;
 
     private UiObjectFuncs(Linker linker, SymbolLookup lib) {
         // void* func(void*, void*)
@@ -17,9 +19,13 @@ class UiObjectFuncs {
 
         MemorySegment ui_show_addr = lib.find("ui_show").orElseThrow();
         MemorySegment ui_window_addr = lib.find("ui_window").orElseThrow();
+        MemorySegment ui_sidebar_window_addr = lib.find("ui_sidebar_window").orElseThrow();
+        MemorySegment ui_simple_window_addr = lib.find("ui_simple_window").orElseThrow();
 
         ui_show = linker.downcallHandle(ui_show_addr, sigv_m);
         ui_window = linker.downcallHandle(ui_window_addr, sigm_mm);
+        ui_sidebar_window = linker.downcallHandle(ui_sidebar_window_addr, sigm_mm);
+        ui_simple_window = linker.downcallHandle(ui_simple_window_addr, sigm_mm);
     }
 
     // must be called by the Toolkit constructor
@@ -27,7 +33,7 @@ class UiObjectFuncs {
         UiObjectFuncs.instance = new UiObjectFuncs(linker, lib);
     }
 
-    UiObject window(String title) {
+    private UiObject createWindow(String title, MethodHandle ctor) {
         MemorySegment obj = null;
         Toolkit toolkit = Toolkit.getInstance();
         // Automatic object registration MUST be disabled!
@@ -37,7 +43,7 @@ class UiObjectFuncs {
         toolkit.setIsObjRegEnabled(false);
         try (Arena arena = Arena.ofConfined()) {
             MemorySegment cstr = arena.allocateFrom(title);
-            obj = (MemorySegment) ui_window.invoke(cstr, MemorySegment.NULL);
+            obj = (MemorySegment) ctor.invoke(cstr, MemorySegment.NULL);
         } catch (Throwable e) {
             toolkit.setIsObjRegEnabled(true);
             throw new RuntimeException(e);
@@ -47,6 +53,18 @@ class UiObjectFuncs {
         return new UiObject(obj);
     }
 
+    UiObject window(String title) {
+        return createWindow(title, ui_window);
+    }
+
+    UiObject simpleWindow(String title) {
+        return createWindow(title, ui_simple_window);
+    }
+
+    UiObject sidebarWindow(String title) {
+        return createWindow(title, ui_sidebar_window);
+    }
+
     void show(UiObject obj) {
         try {
             ui_show.invoke(obj.ptr);