[NUI] Add Dispose to LongPressGestureDetector and modify ReleaseSwigCPtr.
authorjoogab.yun <joogab.yun@samsung.com>
Mon, 6 Mar 2023 05:29:34 +0000 (14:29 +0900)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Mon, 6 Mar 2023 11:10:58 +0000 (20:10 +0900)
src/Tizen.NUI/src/public/Events/LongPressGestureDetector.cs

index 351b804..b16f72a 100755 (executable)
@@ -195,14 +195,45 @@ namespace Tizen.NUI
             return ret;
         }
 
-        /// This will not be public opened.
+        /// <summary>
+        /// override it to clean-up your own resources.
+        /// </summary>
+        /// <param name="type"></param>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
+        protected override void Dispose(DisposeTypes type)
         {
-            if (detectedEventHandler == null && DetectedSignal().Empty() == false)
+            if (disposed)
+            {
+                return;
+            }
+
+            if (type == DisposeTypes.Explicit)
+            {
+                //Called by User
+                //Release your own managed resources here.
+                //You should release all of your own disposable objects here.
+            }
+
+            //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 (HasBody())
             {
-                DetectedSignal().Disconnect(detectedCallback);
+                if (detectedCallback != null)
+                {
+                    using LongPressGestureDetectedSignal signal = new LongPressGestureDetectedSignal(Interop.LongPressGestureDetector.DetectedSignal(GetBaseHandleCPtrHandleRef), false);
+                    signal?.Disconnect(detectedCallback);
+                    detectedCallback = null;
+                }
             }
+            base.Dispose(type);
+        }
+
+        /// This will not be public opened.
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
+        {
             Interop.LongPressGestureDetector.DeleteLongPressGestureDetector(swigCPtr);
         }