Hold added object reference in ItemObject
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / ItemObject.cs
index e8c9be7..fb44251 100644 (file)
@@ -12,6 +12,7 @@ namespace ElmSharp
         private static Dictionary<IntPtr, ItemObject> s_HandleToItemTable = new Dictionary<IntPtr, ItemObject>();
         private static int s_globalId = 0;
 
+        readonly Dictionary<string, EvasObject> _partContents = new Dictionary<string, EvasObject>();
         Interop.Evas.SmartCallback _deleteCallback;
         IntPtr _handle = IntPtr.Zero;
 
@@ -23,11 +24,14 @@ namespace ElmSharp
             Handle = handle;
         }
 
-        ~ItemObject()
-        {
-            if (Handle != IntPtr.Zero)
-                Interop.Elementary.elm_object_item_del(Handle);
-        }
+        // C# Finalizer was called on GC thread
+        // So, We can't access to EFL object
+        // And When Finalizer was called, Field can be already released.
+        //~ItemObject()
+        //{
+        //    if (Handle != IntPtr.Zero)
+        //        Interop.Elementary.elm_object_item_del(Handle);
+        //}
 
         public int Id { get; private set; }
 
@@ -78,6 +82,7 @@ namespace ElmSharp
                 Interop.Elementary.elm_object_item_part_content_unset(Handle, part);
             }
             Interop.Elementary.elm_object_item_part_content_set(Handle, part, content);
+            _partContents[part ?? "__default__"] = content;
         }
 
         public void SetPartText(string part, string text)
@@ -125,6 +130,7 @@ namespace ElmSharp
             {
                 s_HandleToItemTable.Remove(_handle);
             }
+            _partContents.Clear();
             _handle = IntPtr.Zero;
         }