From: Jaehyun Cho Date: Mon, 2 Dec 2024 08:40:10 +0000 (+0900) Subject: [NUI] Block native callback if InputMethodContext is disposed X-Git-Tag: submit/tizen_7.0/20241203.022915~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e37dc513ac2e197ec0ae7698d920ed62de1c4ee1;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [NUI] Block native callback if InputMethodContext is disposed Block native callback if InputMethodContext is disposed --- diff --git a/src/Tizen.NUI/src/public/Input/InputMethodContext.cs b/src/Tizen.NUI/src/public/Input/InputMethodContext.cs index 2ef67e5e0..7d93d4898 100755 --- a/src/Tizen.NUI/src/public/Input/InputMethodContext.cs +++ b/src/Tizen.NUI/src/public/Input/InputMethodContext.cs @@ -815,11 +815,41 @@ namespace Tizen.NUI //You should not access any managed member here except static instance //because the execution order of Finalizes is non-deterministic. + if (activatedEventCallback != null) + { + ActivatedSignal().Disconnect(activatedEventCallback); + } + + if (eventReceivedEventCallback != null) + { + EventReceivedSignal().Disconnect(eventReceivedEventCallback); + } + + if (statusChangedEventCallback != null) + { + StatusChangedSignal().Disconnect(statusChangedEventCallback); + } + + if (resizedEventCallback != null) + { + ResizedSignal().Disconnect(resizedEventCallback); + } + + if (languageChangedEventCallback != null) + { + LanguageChangedSignal().Disconnect(languageChangedEventCallback); + } + if (keyboardTypeChangedEventCallback != null) { KeyboardTypeChangedSignal().Disconnect(keyboardTypeChangedEventCallback); } + if (contentReceivedEventCallback != null) + { + ContentReceivedSignal().Disconnect(contentReceivedEventCallback); + } + base.Dispose(type); } @@ -832,6 +862,12 @@ namespace Tizen.NUI private void OnActivated(IntPtr data) { + if (Disposed || IsDisposeQueued) + { + // Ignore native callback if InputMethodContext is disposed or queued for disposal. + return; + } + ActivatedEventArgs e = new ActivatedEventArgs(); if (data != null) @@ -847,6 +883,12 @@ namespace Tizen.NUI private IntPtr OnEventReceived(IntPtr inputMethodContext, IntPtr eventData) { + if (Disposed || IsDisposeQueued) + { + // Ignore native callback if InputMethodContext is disposed or queued for disposal. + return IntPtr.Zero; + } + CallbackData callbackData = null; EventReceivedEventArgs e = new EventReceivedEventArgs(); @@ -876,6 +918,12 @@ namespace Tizen.NUI private void OnStatusChanged(bool statusChanged) { + if (Disposed || IsDisposeQueued) + { + // Ignore native callback if InputMethodContext is disposed or queued for disposal. + return; + } + StatusChangedEventArgs e = new StatusChangedEventArgs(); e.StatusChanged = statusChanged; @@ -888,6 +936,12 @@ namespace Tizen.NUI private void OnResized(int resized) { + if (Disposed || IsDisposeQueued) + { + // Ignore native callback if InputMethodContext is disposed or queued for disposal. + return; + } + ResizedEventArgs e = new ResizedEventArgs(); e.Resized = resized; @@ -899,6 +953,12 @@ namespace Tizen.NUI private void OnLanguageChanged(int languageChanged) { + if (Disposed || IsDisposeQueued) + { + // Ignore native callback if InputMethodContext is disposed or queued for disposal. + return; + } + LanguageChangedEventArgs e = new LanguageChangedEventArgs(); e.LanguageChanged = languageChanged; @@ -910,6 +970,12 @@ namespace Tizen.NUI private void OnKeyboardTypeChanged(KeyboardType type) { + if (Disposed || IsDisposeQueued) + { + // Ignore native callback if InputMethodContext is disposed or queued for disposal. + return; + } + KeyboardTypeChangedEventArgs e = new KeyboardTypeChangedEventArgs(); e.KeyboardType = type; @@ -922,6 +988,12 @@ namespace Tizen.NUI private void OnContentReceived(string content, string description, string mimeType) { + if (Disposed || IsDisposeQueued) + { + // Ignore native callback if InputMethodContext is disposed or queued for disposal. + return; + } + ContentReceivedEventArgs e = new ContentReceivedEventArgs(); e.Content = content; e.Description = description;