Exemple #1
0
 private void DirectorOnFocusChangeCommitted(global::System.IntPtr commitedFocusableView)
 {
     OnFocusChangeCommitted?.Invoke(Registry.GetManagedBaseHandleFromNativePtr(commitedFocusableView) as View);
 }
Exemple #2
0
        /// <summary>
        /// Dispose.
        /// </summary>
        /// <since_tizen> 3 </since_tizen>
        protected virtual void Dispose(DisposeTypes type)
        {
            if (disposed)
            {
                return;
            }

            NUILog.Debug($"[Dispose] BaseHandle.Dispose({type}) START");

            if (type == DisposeTypes.Explicit)
            {
                //Called by User
                //Release your own managed resources here.
                //You should release all of your own disposable objects here.
            }

            //Release your own unmanaged resources here.
            //You should not access any managed member here except static instance.
            //because the execution order of Finalizes is non-deterministic.

            //Unreference this instance from Registry.
            if (registerMe)
            {
                Registry.Unregister(this);
            }

#if NUI_DEBUG_ON
            debuggingCount--;
            NUILog.Debug($"[Dispose] swigCMemOwn:{swigCMemOwn} debuggingCount:{debuggingCount} type:{GetType()} copyNativeHandle:{swigCPtrCopy.Handle.ToString("X8")}");
#endif
            // this is temporary test code. will be removed laster
            {
                if (swigCPtr.Handle != IntPtr.Zero && swigCPtrCopy.Handle != IntPtr.Zero)
                {
                    var process = global::System.Diagnostics.Process.GetCurrentProcess().Id;
                    var thread  = global::System.Threading.Thread.CurrentThread.ManagedThreadId;
                    var me      = this.GetType().FullName;
                    var daliId  = "unknown";
                    var hash    = this.GetType().GetHashCode();
                    var name    = "unknown";

                    if (this is BaseComponents.View)
                    {
                        daliId = Interop.Actor.GetId(swigCPtrCopy).ToString();
                        name   = Interop.Actor.GetName(swigCPtrCopy);
                        BaseObject tmp    = new BaseObject(Interop.BaseHandle.GetBaseObject(swigCPtrCopy), false);
                        var        refCnt = tmp.ReferenceCount();
                        tmp.Dispose();
                        if (refCnt > 2)
                        {
                            Log.Error("NUI", $"[ERR] reference count is over than 2. Could be a memory leak. Need to check! \n" +
                                      $" process:{process} thread:{thread}, isDisposed:{this.disposed}, isDisposeQueued:{this.isDisposeQueued}, me:{me} \n" +
                                      $" disposeType:{type}, name:{name}, daliID:{daliId}, hash:{hash}, refCnt:{refCnt}");
                        }
                    }
                }
            }

            if (SwigCPtr.Handle != IntPtr.Zero)
            {
                if (swigCMemOwn)
                {
                    swigCMemOwn = false;
                    ReleaseSwigCPtr(SwigCPtr);
                }
                swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
            }
            else
            {
                var me = this.GetType().FullName;
                Log.Error("NUI", $"[ERR] SwigCPtr is NULL, need to check! me:{me}");
            }

            if (swigCPtrCopy.Handle != global::System.IntPtr.Zero)
            {
                swigCMemOwn = false;
                Interop.BaseHandle.DeleteBaseHandle(swigCPtrCopy);
                swigCPtrCopy = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
            }
            else
            {
                var me = this.GetType().FullName;
                Log.Error("NUI", $"[ERR] swigCPtrCopy is NULL, need to check! me:{me}");
            }

            disposed = true;

            if (null != Application.Current)
            {
                Application.Current.XamlResourceChanged -= OnResourcesChanged;
            }

            NUILog.Debug($"[Dispose] BaseHandle.Dispose({type}) END");
            NUILog.Debug($"=============================");
        }