[NUI] Disconnect all native signals of Window class when application is terminated...
authordongsug-song <35130733+dongsug-song@users.noreply.github.com>
Mon, 10 Dec 2018 00:36:08 +0000 (09:36 +0900)
committerhuiyueun <35286162+huiyueun@users.noreply.github.com>
Mon, 10 Dec 2018 00:36:08 +0000 (09:36 +0900)
src/Tizen.NUI/src/internal/Application.cs
src/Tizen.NUI/src/public/Window.cs

index 77085bc..b6b777b 100755 (executable)
@@ -1002,6 +1002,8 @@ namespace Tizen.NUI
                 e.Application = this;
                 _applicationTerminateEventHandler.Invoke(this, e);
             }
+
+            Window.Instance.DisconnectNativeSignals();
         }
 
         /**
index a470427..948990e 100755 (executable)
@@ -1789,5 +1789,63 @@ namespace Tizen.NUI
             }
         }
 
+        /// <summary>
+        /// Disconnect all native signals
+        /// </summary>
+        /// <since_tizen> 5 </since_tizen>
+        internal void DisconnectNativeSignals() 
+        {
+            if( _windowFocusChangedEventCallback != null )
+            {
+                WindowFocusChangedSignal().Disconnect(_windowFocusChangedEventCallback);
+            }
+
+            if( _rootLayerTouchDataCallback != null )
+            {
+                TouchDataSignal().Disconnect(_rootLayerTouchDataCallback);
+            }
+
+            if( _wheelEventCallback != null )
+            {
+                StageWheelEventSignal().Disconnect(_wheelEventCallback);
+            }
+
+            if( _stageKeyCallbackDelegate != null )
+            {
+                KeyEventSignal().Disconnect(_stageKeyCallbackDelegate);
+            }
+
+            if( _stageEventProcessingFinishedEventCallbackDelegate != null )
+            {
+                EventProcessingFinishedSignal().Disconnect(_stageEventProcessingFinishedEventCallbackDelegate);
+            }
+
+            if( _stageContextLostEventCallbackDelegate != null )
+            {
+                ContextLostSignal().Disconnect(_stageContextLostEventCallbackDelegate);
+            }
+
+            if( _stageContextRegainedEventCallbackDelegate != null )
+            {
+                ContextRegainedSignal().Disconnect(_stageContextRegainedEventCallbackDelegate);
+            }
+
+            if( _stageSceneCreatedEventCallbackDelegate != null )
+            {
+                SceneCreatedSignal().Disconnect(_stageSceneCreatedEventCallbackDelegate);
+            }
+
+            if( _windowResizedEventCallback != null )
+            {
+                ResizedSignal().Disconnect(_windowResizedEventCallback);
+            }
+
+            if( _windowFocusChangedEventCallback2 != null )
+            {
+                WindowFocusChangedSignal().Disconnect(_windowFocusChangedEventCallback2);
+            }
+
+        }
+
     }
 }