using System; using UnityEngine.UIElements; namespace RosettaUI.UIToolkit { public static class CallbackEventHandlerExtension { #if !UNITY_6000_0_OR_NEWER public static void RegisterCallbackOnce(this CallbackEventHandler handler, EventCallback callback, TrickleDown useTrickleDown = TrickleDown.NoTrickleDown) where TEventType : EventBase, new() { handler.RegisterCallback(Callback, useTrickleDown); return; void Callback(TEventType evt) { handler.UnregisterCallback(Callback); callback(evt); } } #endif public static void RegisterCallbackUntil(this CallbackEventHandler handler, Func until, EventCallback callback, TrickleDown useTrickleDown = TrickleDown.NoTrickleDown) where TEventType : EventBase, new() { handler.RegisterCallback(Callback, useTrickleDown); void Callback(TEventType evt) { if (until()) { handler.UnregisterCallback(Callback); return; } callback(evt); } } } }