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) {
}
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?
}
}
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);
}