From: Olaf Wintermann Date: Wed, 6 Aug 2025 18:39:32 +0000 (+0200) Subject: add oneshot event handler X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=cbeaf3ee026755cf0016c5ffb6e853d212edd15e;p=rssreader.git add oneshot event handler --- 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 e6310ba..4d3af33 100644 --- a/ui-java/src/main/java/de/unixwork/ui/EventWrapper.java +++ b/ui-java/src/main/java/de/unixwork/ui/EventWrapper.java @@ -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? } } diff --git a/ui-java/src/main/java/de/unixwork/ui/Toolkit.java b/ui-java/src/main/java/de/unixwork/ui/Toolkit.java index 21c5342..9718176 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Toolkit.java +++ b/ui-java/src/main/java/de/unixwork/ui/Toolkit.java @@ -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); }