]> uap-core.de Git - rssreader.git/commitdiff
add oneshot event handler
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 6 Aug 2025 18:39:32 +0000 (20:39 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 6 Aug 2025 18:39:32 +0000 (20:39 +0200)
ui-java/src/main/java/de/unixwork/ui/EventWrapper.java
ui-java/src/main/java/de/unixwork/ui/Toolkit.java

index e6310bacd92d04de46e283a9cb4c254eeb72d0d8..4d3af33377541a64ef1957b12dc61824e02dac74 100644 (file)
@@ -29,9 +29,15 @@ public class EventWrapper {
 
     public EventWrapper(EventHandler handler, boolean oneshot) {
         Toolkit toolkit = Toolkit.getInstance();
-        callback = oneshot ? toolkit.oneshotEventHandler : toolkit.globalEventHandler;
-        long index = toolkit.addEventHandler(handler);
-        userdata = MemorySegment.ofAddress(index);
+        if(oneshot) {
+            callback = toolkit.oneshotEventHandler;
+            long index = toolkit.addOneshotEventHandler(handler);
+            userdata = MemorySegment.ofAddress(index);
+        } else {
+            callback = toolkit.eventHandler;
+            long index = toolkit.addEventHandler(handler);
+            userdata = MemorySegment.ofAddress(index);
+        }
     }
 
     public EventWrapper(EventHandler handler) {
@@ -69,6 +75,12 @@ public class EventWrapper {
     }
 
     public static void oneshotEventHandler(MemorySegment event, MemorySegment userdata) {
-
+        long eventHandlerIndex = userdata.address();
+        Event e = new Event(event);
+        UiObject obj = e.getObject();
+        EventHandler handler = Toolkit.getInstance().removeOneshotEventHandler(eventHandlerIndex);
+        if(handler != null) {
+            handler.callback(e);
+        } // else: error?
     }
 }
index 21c53427c29a2dbaef3864c39d7d54165e58e93d..97181767d3d3d30b9b66c29bcfca302ffb5f1e36 100644 (file)
@@ -437,6 +437,16 @@ public class Toolkit {
         return eventHandlers.get(index);
     }
 
+    public long addOneshotEventHandler(EventHandler handler) {
+        long index = onshotEventHandlers.size();
+        onshotEventHandlers.put(index, handler);
+        return index;
+    }
+
+    public EventHandler removeOneshotEventHandler(long index) {
+        return onshotEventHandlers.remove(index);
+    }
+
     public Context getContext(long address) {
         return contexts.get(address);
     }