[NUI] Revert "Sync with dalihub & API5 branch (#631)" (#635)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / DisposeQueue.cs
index 972b479..cde10b2 100755 (executable)
 using System;
 using System.Collections.Generic;
 
-namespace NUI
+namespace Tizen.NUI
 {
 
-    public class DisposeQueue
+    internal class DisposeQueue
     {
-        private static DisposeQueue _disposableQueue = new DisposeQueue();
+        private static readonly DisposeQueue _disposableQueue = new DisposeQueue();
         private List<IDisposable> _disposables = new List<IDisposable>();
-        private Object _listLock = new object();
-        private delegate int ProcessDisposablesDelegate(IntPtr ptr);
-        private ProcessDisposablesDelegate _disposequeueProcessDisposablesDelegate;
+        private System.Object _listLock = new object();
+        private EventThreadCallback _eventThreadCallback;
+        private EventThreadCallback.CallbackDelegate _disposeQueueProcessDisposablesDelegate;
 
         private DisposeQueue()
         {
-          _disposequeueProcessDisposablesDelegate = new ProcessDisposablesDelegate(ProcessDisposables);
-          Application.Instance.AddIdle(_disposequeueProcessDisposablesDelegate);
         }
 
         ~DisposeQueue()
@@ -36,17 +34,33 @@ namespace NUI
             get { return _disposableQueue; }
         }
 
+        private bool _isCalled = false;
+        public void Initialize()
+        {
+            if(_isCalled == false)
+            {
+            _disposeQueueProcessDisposablesDelegate = new EventThreadCallback.CallbackDelegate(ProcessDisposables);
+            _eventThreadCallback = new EventThreadCallback(_disposeQueueProcessDisposablesDelegate);
+                _isCalled = true;
+            }
+        }
+
         public void Add(IDisposable disposable)
         {
-            lock(_listLock)
+            lock (_listLock)
             {
                 _disposables.Add(disposable);
             }
+
+            if (_eventThreadCallback != null)
+            {
+                _eventThreadCallback.Trigger();
+            }
         }
 
-        private int ProcessDisposables(IntPtr ptr)
+        internal void ProcessDisposables()
         {
-            lock(_listLock)
+            lock (_listLock)
             {
                 foreach (IDisposable disposable in _disposables)
                 {
@@ -54,7 +68,6 @@ namespace NUI
                 }
                 _disposables.Clear();
             }
-            return 0;
         }
     }
 }