From 88110ea900e5ac67beb7af9680d0d4f10a4afee0 Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Tue, 1 Oct 2019 11:07:30 +0900 Subject: [PATCH] [ComponentBased][TCSACR-282] Add Release method to IWindowInfo interface (#1040) * Modify native api name Signed-off-by: hyunho * Add argument check logic SendLaunchRequestAsync control parameter should not be null Signed-off-by: hyunho * Add argument check logic SendLaunchRequestAsync control parameter should not be null Signed-off-by: hyunho * Add Release method to IWindowInfo interface Signed-off-by: hyunho * Use IDisposable to release window resource Signed-off-by: hyunho * Fix indention Signed-off-by: hyunho * Fix dispose method Signed-off-by: hyunho --- .../EFLWindowInfo.cs | 29 ++++++++++++++++++++++ .../FrameComponentStateManager.cs | 3 +++ .../IWindowInfo.cs | 2 +- 3 files changed, 33 insertions(+), 1 deletion(-) mode change 100755 => 100644 src/Tizen.Applications.ComponentBased.Default/Tizen.Applications.ComponentBased.Default/EFLWindowInfo.cs mode change 100755 => 100644 src/Tizen.Applications.ComponentBased/Tizen.Applications.ComponentBased.Common/FrameComponentStateManager.cs diff --git a/src/Tizen.Applications.ComponentBased.Default/Tizen.Applications.ComponentBased.Default/EFLWindowInfo.cs b/src/Tizen.Applications.ComponentBased.Default/Tizen.Applications.ComponentBased.Default/EFLWindowInfo.cs old mode 100755 new mode 100644 index d2ba807..e899a0c --- a/src/Tizen.Applications.ComponentBased.Default/Tizen.Applications.ComponentBased.Default/EFLWindowInfo.cs +++ b/src/Tizen.Applications.ComponentBased.Default/Tizen.Applications.ComponentBased.Default/EFLWindowInfo.cs @@ -13,6 +13,7 @@ namespace Tizen.Applications.ComponentBased.Default private const string LogTag = "Tizen.Applications"; private Window _win; private int _resId; + private bool _disposed = false; /// /// Initializes the EFLWindow class. @@ -44,6 +45,34 @@ namespace Tizen.Applications.ComponentBased.Default } } + /// + /// Releases any unmanaged resources used by this object. Can also dispose any other disposable objects. + /// + /// 6 + /// If true, disposes any disposable objects. If false, does not dispose disposable objects. + protected virtual void Dispose(bool disposing) + { + if (_disposed) + return; + + if (disposing) + { + _win.Unrealize(); + _win = null; + } + _disposed = true; + } + + /// + /// Dispose the window resources + /// + /// + /// 6 + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } } } diff --git a/src/Tizen.Applications.ComponentBased/Tizen.Applications.ComponentBased.Common/FrameComponentStateManager.cs b/src/Tizen.Applications.ComponentBased/Tizen.Applications.ComponentBased.Common/FrameComponentStateManager.cs old mode 100755 new mode 100644 index f850e8d..702ce48 --- a/src/Tizen.Applications.ComponentBased/Tizen.Applications.ComponentBased.Common/FrameComponentStateManager.cs +++ b/src/Tizen.Applications.ComponentBased/Tizen.Applications.ComponentBased.Common/FrameComponentStateManager.cs @@ -8,6 +8,7 @@ namespace Tizen.Applications.ComponentBased.Common { private Interop.CBApplication.FrameLifecycleCallbacks _callbacks; private const string LogTag = "Tizen.Applications"; + private IDictionary _winDic = new Dictionary(); internal FrameComponentStateManager(Type ctype, string id, ComponentBasedApplication parent) : base(ctype, id, parent) { @@ -47,6 +48,7 @@ namespace Tizen.Applications.ComponentBased.Common if (win == null) return IntPtr.Zero; + _winDic.Add(id, win); if (!fc.OnCreate()) { Log.Error(LogTag, "OnCreate fail"); @@ -115,6 +117,7 @@ namespace Tizen.Applications.ComponentBased.Common if (fc.Handle == context) { fc.OnDestroy(); + _winDic[fc.Id].Dispose(); RemoveComponent(fc); break; } diff --git a/src/Tizen.Applications.ComponentBased/Tizen.Applications.ComponentBased.Common/IWindowInfo.cs b/src/Tizen.Applications.ComponentBased/Tizen.Applications.ComponentBased.Common/IWindowInfo.cs index 16df436..61bfb7c 100644 --- a/src/Tizen.Applications.ComponentBased/Tizen.Applications.ComponentBased.Common/IWindowInfo.cs +++ b/src/Tizen.Applications.ComponentBased/Tizen.Applications.ComponentBased.Common/IWindowInfo.cs @@ -6,7 +6,7 @@ namespace Tizen.Applications.ComponentBased.Common /// Interface for window information /// /// 6 - public interface IWindowInfo + public interface IWindowInfo : IDisposable { /// /// Gets window resource ID -- 2.7.4