From 6f2ee79fae10abeb90a4b86da5d5f62424fce9e8 Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Tue, 26 Sep 2023 11:51:06 +0900 Subject: [PATCH] [NUI] Let we don't dispose cached LastEvents Signed-off-by: Eunki, Hong --- src/Tizen.NUI/src/public/Window/Window.cs | 48 ++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/Tizen.NUI/src/public/Window/Window.cs b/src/Tizen.NUI/src/public/Window/Window.cs index e9e2081..e25d45e 100755 --- a/src/Tizen.NUI/src/public/Window/Window.cs +++ b/src/Tizen.NUI/src/public/Window/Window.cs @@ -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. /// + /// + /// Do not Dispose this value. + /// /// The last key event the window gets. [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. /// + /// + /// Do not Dispose this value. + /// /// The last touch event the window gets. [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. /// + /// + /// Do not Dispose this value. + /// /// The last hover event the window gets. [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(); -- 2.7.4