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_8.0/20241202.150913~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=875d81c816ad214cf7f0ca3ebed537be7754afbc;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 c188e3006..e747f301c 100755 --- a/src/Tizen.NUI/src/public/Input/InputMethodContext.cs +++ b/src/Tizen.NUI/src/public/Input/InputMethodContext.cs @@ -879,11 +879,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); } @@ -896,6 +926,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 != IntPtr.Zero) @@ -911,6 +947,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(); @@ -940,6 +982,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; @@ -952,6 +1000,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; @@ -963,6 +1017,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; @@ -974,6 +1034,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; @@ -986,6 +1052,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;