//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);
}
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)
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();
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;
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;
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;
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;
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;