[NUI] Support adding multiple callback to gesture (#1215)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / RotationGestureDetector.cs
index cd1741c..8ca4a4b 100755 (executable)
@@ -28,11 +28,6 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class RotationGestureDetector : GestureDetector
     {
-
-        private DaliEventHandler<object, DetectedEventArgs> _rotationGestureEventHandler;
-        private DetectedCallbackDelegate _rotationGestureCallbackDelegate;
-
-
         /// <summary>
         /// Creates an initialized RotationGestureDetector.
         /// </summary>
@@ -59,8 +54,10 @@ namespace Tizen.NUI
         {
         }
 
+        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.
@@ -71,29 +68,22 @@ namespace Tizen.NUI
         {
             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);
                 }
             }
         }
@@ -136,6 +126,11 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
         {
+            if (_detectedCallback != null)
+            {
+                DetectedSignal().Disconnect(_detectedCallback);
+            }
+
             Interop.RotationGesture.delete_RotationGestureDetector(swigCPtr);
         }
 
@@ -152,10 +147,10 @@ namespace Tizen.NUI
 
             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);
             }
         }