public class TapGestureDetector : GestureDetector
{
private global::System.Runtime.InteropServices.HandleRef swigCPtr;
- private DaliEventHandler<object, DetectedEventArgs> _tapGestureEventHandler;
- private DetectedCallbackDelegate _tapGestureCallbackDelegate;
/// <summary>
/// Creates an initialized TapGestureDetector.
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
}
+ private DaliEventHandler<object, DetectedEventArgs> _detectedEventHandler;
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
- private delegate void DetectedCallbackDelegate(IntPtr actor, IntPtr TapGesture);
+ private delegate void DetectedCallbackType(IntPtr actor, IntPtr TapGesture);
+ private DetectedCallbackType _detectedCallback;
/// <summary>
/// This signal is emitted when the specified tap is detected on the attached view.
{
add
{
- lock (this)
+ if (_detectedEventHandler == null)
{
- // Restricted to only one listener
- if (_tapGestureEventHandler == null)
- {
- _tapGestureEventHandler += value;
-
- _tapGestureCallbackDelegate = new DetectedCallbackDelegate(OnTapGestureDetected);
- this.DetectedSignal().Connect(_tapGestureCallbackDelegate);
- }
+ _detectedCallback = OnTapGestureDetected;
+ DetectedSignal().Connect(_detectedCallback);
}
+
+ _detectedEventHandler += value;
}
remove
{
- lock (this)
- {
- if (_tapGestureEventHandler != null)
- {
- this.DetectedSignal().Disconnect(_tapGestureCallbackDelegate);
- }
+ _detectedEventHandler -= value;
- _tapGestureEventHandler -= value;
+ if (_detectedEventHandler == null && DetectedSignal().Empty() == false)
+ {
+ DetectedSignal().Disconnect(_detectedCallback);
}
}
}
//Release your own unmanaged resources here.
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_detectedCallback != null)
+ {
+ DetectedSignal().Disconnect(_detectedCallback);
+ }
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
e.TapGesture = Tizen.NUI.TapGesture.GetTapGestureFromPtr(tapGesture);
- if (_tapGestureEventHandler != null)
+ if (_detectedEventHandler != null)
{
//here we send all data to user event handlers
- _tapGestureEventHandler(this, e);
+ _detectedEventHandler(this, e);
}
}