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;
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; }
}
}
- internal event EventHandler Deleted;
+ public event EventHandler Deleted;
public void Delete()
{
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)
{
Deleted?.Invoke(this, EventArgs.Empty);
OnInvalidate();
+ if (s_IdToItemTable.ContainsKey(Id))
+ {
+ s_IdToItemTable.Remove(Id);
+ }
+ if (s_HandleToItemTable.ContainsKey(_handle))
+ {
+ s_HandleToItemTable.Remove(_handle);
+ }
+ _partContents.Clear();
_handle = IntPtr.Zero;
}