[NUI] Let we don't dispose cached LastEvents
authorEunki, Hong <eunkiki.hong@samsung.com>
Tue, 26 Sep 2023 02:51:06 +0000 (11:51 +0900)
committerEunki Hong <h.pichulia@gmail.com>
Tue, 26 Sep 2023 08:37:41 +0000 (17:37 +0900)
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
src/Tizen.NUI/src/public/Window/Window.cs

index e9e2081..e25d45e 100755 (executable)
@@ -1269,7 +1269,7 @@ namespace Tizen.NUI
         {
             if (touchPoint == null)
             {
-                using Hover hover = GetLastHoverEvent();
+                Hover hover = GetLastHoverEvent();
                 if (hover == null || hover.GetPointCount() < 1)
                 {
                     return;
@@ -2112,12 +2112,20 @@ namespace Tizen.NUI
         /// We will use weak reference of last key events.
         /// Return value will be invalidated if last key event changed internally.
         /// </remarks>
+        /// <remarks>
+        /// Do not Dispose this value.
+        /// </remarks>
         /// <returns>The last key event the window gets.</returns>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public Key GetLastKeyEvent()
         {
-            if (internalLastKeyEvent == null || !internalLastKeyEvent.HasBody())
+            if (internalLastKeyEvent == null)
             {
+                // TODO : We need to make automatically release memory of these cached events in future.
+                if (!(internalLastKeyEvent?.IsNativeHandleInvalid() ?? true))
+                {
+                    Interop.Key.DeleteKey(internalLastKeyEvent.SwigCPtr);
+                }
                 // Create empty event handle without register.
                 internalLastKeyEvent = new Key(Interop.Key.New(), false);
             }
@@ -2133,12 +2141,20 @@ namespace Tizen.NUI
         /// We will use weak reference of last touch events.
         /// Return value will be invalidated if last touch event changed internally.
         /// </remarks>
+        /// <remarks>
+        /// Do not Dispose this value.
+        /// </remarks>
         /// <returns>The last touch event the window gets.</returns>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public Touch GetLastTouchEvent()
         {
-            if (internalLastTouchEvent == null || !internalLastTouchEvent.HasBody())
+            if (internalLastTouchEvent == null)
             {
+                // TODO : We need to make automatically release memory of these cached events in future.
+                if (!(internalLastTouchEvent?.IsNativeHandleInvalid() ?? true))
+                {
+                    Interop.Touch.DeleteTouch(internalLastTouchEvent.SwigCPtr);
+                }
                 // Create empty event handle without register.
                 internalLastTouchEvent = new Touch(Interop.Touch.NewTouch(), false);
             }
@@ -2154,12 +2170,20 @@ namespace Tizen.NUI
         /// We will use weak reference of last hover events.
         /// Return value will be invalidated if last hover event changed internally.
         /// </remarks>
+        /// <remarks>
+        /// Do not Dispose this value.
+        /// </remarks>
         /// <returns>The last hover event the window gets.</returns>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public Hover GetLastHoverEvent()
         {
-            if (internalLastHoverEvent == null || !internalLastHoverEvent.HasBody())
+            if (internalLastHoverEvent == null)
             {
+                // TODO : We need to make automatically release memory of these cached events in future.
+                if (!(internalLastHoverEvent?.IsNativeHandleInvalid() ?? true))
+                {
+                    Interop.Hover.DeleteHover(internalLastHoverEvent.SwigCPtr);
+                }
                 // Create empty event handle without register.
                 internalLastHoverEvent = new Hover(Interop.Hover.New(0u), false);
             }
@@ -2250,10 +2274,26 @@ namespace Tizen.NUI
 
                 localController?.Dispose();
 
+                // TODO : We need to make automatically release memory of these cached events in future.
+                if (!(internalLastKeyEvent?.IsNativeHandleInvalid() ?? true))
+                {
+                    Interop.Key.DeleteKey(internalLastKeyEvent.SwigCPtr);
+                }
+                if (!(internalLastTouchEvent?.IsNativeHandleInvalid() ?? true))
+                {
+                    Interop.Touch.DeleteTouch(internalLastTouchEvent.SwigCPtr);
+                }
+                if (!(internalLastHoverEvent?.IsNativeHandleInvalid() ?? true))
+                {
+                    Interop.Hover.DeleteHover(internalLastHoverEvent.SwigCPtr);
+                }
+
                 internalLastKeyEvent?.Dispose();
                 internalLastKeyEvent = null;
                 internalLastTouchEvent?.Dispose();
                 internalLastTouchEvent = null;
+                internalLastHoverEvent?.Dispose();
+                internalLastHoverEvent = null;
 
                 internalHoverTimer?.Stop();
                 internalHoverTimer?.Dispose();