private AnimationFinishedEventCallbackType _animationFinishedEventCallback;
private System.IntPtr _finishedCallbackOfNative;
+ private bool isFinishedSignalConnected = false;
private AnimationProgressReachedEventCallbackType _animationProgressReachedEventCallback;
_animationFinishedEventCallback = OnFinished;
_finishedCallbackOfNative = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate<System.Delegate>(_animationFinishedEventCallback);
+ isFinishedSignalConnected = false;
}
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
{
add
{
- if (_animationFinishedEventHandler == null && disposed == false)
+ if (_animationFinishedEventHandler == null && disposed == false && isFinishedSignalConnected == false)
{
- FinishedSignal().Connect(_finishedCallbackOfNative);
+ var signal = FinishedSignal();
+ if (signal?.SwigCPtr.Handle == IntPtr.Zero) { signal = null; }
+ signal?.Connect(_finishedCallbackOfNative);
+ signal?.Dispose();
+ isFinishedSignalConnected = true;
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
_animationFinishedEventHandler += value;
}
remove
{
_animationFinishedEventHandler -= value;
-
- if (_animationFinishedEventHandler == null && FinishedSignal().Empty() == false)
+ if (_animationFinishedEventHandler == null && isFinishedSignalConnected)
{
- FinishedSignal().Disconnect(_finishedCallbackOfNative);
+ var signal = FinishedSignal();
+ if (signal?.SwigCPtr.Handle == IntPtr.Zero) { signal = null; }
+ signal?.Disconnect(_finishedCallbackOfNative);
+ signal?.Dispose();
+ isFinishedSignalConnected = false;
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
}
}
return;
}
- if (_animationFinishedEventHandler != null)
+ if (_animationFinishedEventHandler != null && isFinishedSignalConnected)
{
- FinishedSignal().Disconnect(_finishedCallbackOfNative);
+ var signal = FinishedSignal();
+ if (signal?.SwigCPtr.Handle == IntPtr.Zero) { signal = null; }
+ signal?.Disconnect(_finishedCallbackOfNative);
+ signal?.Dispose();
+ isFinishedSignalConnected = false;
_animationFinishedEventHandler = null;
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
if (_animationProgressReachedEventCallback != null)
[EditorBrowsable(EditorBrowsableState.Never)]
protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
{
- if(swigCPtr.Handle == IntPtr.Zero || this.HasBody() == false)
+ if (swigCPtr.Handle == IntPtr.Zero || this.HasBody() == false)
{
Tizen.Log.Fatal("NUI", $"[ERROR] Animation ReleaseSwigCPtr()! IntPtr=0x{swigCPtr.Handle:X} HasBody={this.HasBody()}");
return;