From: jh5.cho Date: Fri, 24 Mar 2017 08:27:09 +0000 (+0900) Subject: Refactor RenderPost event using EvasEvent X-Git-Tag: submit/trunk/20170823.075128~110^2~127 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4e2d5e522b500932d9739c0333194283a5a43d9f;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git Refactor RenderPost event using EvasEvent - RenderPost event is implemented as EvasEvent, not EvasObjectEvent, due to the malfuntion under TCT execute envirenment - Update Version to Beta-018 Change-Id: Idaf0137f094674d016f1bdf248b8b8ff007a6660 --- diff --git a/packaging/elm-sharp.spec b/packaging/elm-sharp.spec index 1df2f6c..2f140ee 100644 --- a/packaging/elm-sharp.spec +++ b/packaging/elm-sharp.spec @@ -1,4 +1,4 @@ -%define DEV_VERSION beta-017 +%define DEV_VERSION beta-018 Name: elm-sharp Summary: C# Binding for Elementary diff --git a/src/ElmSharp/ElmSharp/EvasObject.cs b/src/ElmSharp/ElmSharp/EvasObject.cs index f9cf919..0b3d8ef 100755 --- a/src/ElmSharp/ElmSharp/EvasObject.cs +++ b/src/ElmSharp/ElmSharp/EvasObject.cs @@ -45,7 +45,8 @@ namespace ElmSharp EvasObjectEvent _keydown; EvasObjectEvent _moved; EvasObjectEvent _resized; - EvasObjectEvent _renderPost; + EventHandler _renderPost; + Interop.Evas.EvasCallback _renderPostCallback = null; readonly HashSet _eventStore = new HashSet(); @@ -103,13 +104,30 @@ namespace ElmSharp add { _resized.On += value; } remove { _resized.On -= value; } } + /// /// Current widget RenderPost Event Handler /// public event EventHandler RenderPost { - add { _renderPost.On += value; } - remove { _renderPost.On -= value; } + add + { + _renderPost += value; + if (_renderPostCallback == null) + { + _renderPostCallback = new Interop.Evas.EvasCallback((o, e, d) => _renderPost?.Invoke(this, EventArgs.Empty)); + Interop.Evas.evas_event_callback_add(Interop.Evas.evas_object_evas_get(Handle), Interop.Evas.ObjectCallbackType.RenderPost, _renderPostCallback, IntPtr.Zero); + } + } + remove + { + _renderPost -= value; + if (_renderPost?.GetInvocationList().Length == 0) + { + Interop.Evas.evas_event_callback_del(Interop.Evas.evas_object_evas_get(Handle), Interop.Evas.ObjectCallbackType.RenderPost, _renderPostCallback); + _renderPostCallback = null; + } + } } /// @@ -510,7 +528,6 @@ namespace ElmSharp _keyup = new EvasObjectEvent(this, EvasObjectCallbackType.KeyUp, EvasKeyEventArgs.Create); _moved = new EvasObjectEvent(this, EvasObjectCallbackType.Move); _resized = new EvasObjectEvent(this, EvasObjectCallbackType.Resize); - _renderPost = new EvasObjectEvent(this, Interop.Evas.evas_object_evas_get(Handle), EvasObjectCallbackType.RenderPost); _deleted.On += (s, e) => MakeInvalidate(); _keydown.On += (s, e) => KeyDown?.Invoke(this, e); @@ -525,6 +542,12 @@ namespace ElmSharp { if (IsRealized) { + if(_renderPostCallback != null) + { + Interop.Evas.evas_event_callback_del(Interop.Evas.evas_object_evas_get(Handle), Interop.Evas.ObjectCallbackType.RenderPost, _renderPostCallback); + _renderPostCallback = null; + } + OnUnrealize(); IntPtr toBeDeleted = Handle; Handle = IntPtr.Zero; diff --git a/src/ElmSharp/Interop/Interop.Evas.cs b/src/ElmSharp/Interop/Interop.Evas.cs old mode 100644 new mode 100755 index bbc2b99..6adbb98 --- a/src/ElmSharp/Interop/Interop.Evas.cs +++ b/src/ElmSharp/Interop/Interop.Evas.cs @@ -62,6 +62,14 @@ internal static partial class Interop } internal delegate void EventCallback(IntPtr data, IntPtr evas, IntPtr obj, IntPtr info); + internal delegate void EvasCallback(IntPtr data, IntPtr evas, IntPtr info); + + [DllImport(Libraries.Evas)] + internal static extern void evas_event_callback_add(IntPtr obj, ObjectCallbackType type, EvasCallback func, IntPtr data); + + [DllImport(Libraries.Evas)] + internal static extern void evas_event_callback_del(IntPtr obj, ObjectCallbackType type, EvasCallback func); + [DllImport(Libraries.Evas)] internal static extern void evas_object_event_callback_add(IntPtr obj, ObjectCallbackType type, EventCallback func, IntPtr data); [DllImport(Libraries.Evas)]