[EditorBrowsable(EditorBrowsableState.Never)]
public class RotationGestureDetector : GestureDetector
{
-
- private DaliEventHandler<object, DetectedEventArgs> _rotationGestureEventHandler;
- private DetectedCallbackDelegate _rotationGestureCallbackDelegate;
-
-
/// <summary>
/// Creates an initialized RotationGestureDetector.
/// </summary>
{
}
+ private DaliEventHandler<object, DetectedEventArgs> _detectedEventHandler;
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
- private delegate void DetectedCallbackDelegate(IntPtr actor, IntPtr rotationGesture);
+ private delegate void DetectedCallbackType(IntPtr actor, IntPtr rotationGesture);
+ private DetectedCallbackType _detectedCallback;
/// <summary>
/// This signal is emitted when the specified rotation is detected on the attached view.
{
add
{
- lock (this)
+ if (_detectedEventHandler == null)
{
- // Restricted to only one listener
- if (_rotationGestureEventHandler == null)
- {
- _rotationGestureEventHandler += value;
-
- _rotationGestureCallbackDelegate = new DetectedCallbackDelegate(OnRotationGestureDetected);
- this.DetectedSignal().Connect(_rotationGestureCallbackDelegate);
- }
+ _detectedCallback = OnRotationGestureDetected;
+ DetectedSignal().Connect(_detectedCallback);
}
+
+ _detectedEventHandler += value;
}
remove
{
- lock (this)
- {
- if (_rotationGestureEventHandler != null)
- {
- this.DetectedSignal().Disconnect(_rotationGestureCallbackDelegate);
- }
+ _detectedEventHandler -= value;
- _rotationGestureEventHandler -= value;
+ if (_detectedEventHandler == null && DetectedSignal().Empty() == false)
+ {
+ DetectedSignal().Disconnect(_detectedCallback);
}
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
{
+ if (_detectedCallback != null)
+ {
+ DetectedSignal().Disconnect(_detectedCallback);
+ }
+
Interop.RotationGesture.delete_RotationGestureDetector(swigCPtr);
}
e.RotationGesture = Tizen.NUI.RotationGesture.GetRotationGestureFromPtr(rotationGesture);
- if (_rotationGestureEventHandler != null)
+ if (_detectedEventHandler != null)
{
//Here we send all data to user event handlers.
- _rotationGestureEventHandler(this, e);
+ _detectedEventHandler(this, e);
}
}