From ee63b1d6af3cb0848573ee4dc5a44d003cc83f82 Mon Sep 17 00:00:00 2001 From: Inhong Date: Mon, 21 Jan 2019 11:04:46 +0900 Subject: [PATCH 1/1] [InputMethod] Remove lock from InputMethodEditor (#671) IME does not need to consider multi-threading. --- .../Tizen.Uix.InputMethod/InputMethodEditor.cs | 505 +++++++++------------ 1 file changed, 204 insertions(+), 301 deletions(-) diff --git a/src/Tizen.Uix.InputMethod/Tizen.Uix.InputMethod/InputMethodEditor.cs b/src/Tizen.Uix.InputMethod/Tizen.Uix.InputMethod/InputMethodEditor.cs index f02f687..0e3c8f2 100755 --- a/src/Tizen.Uix.InputMethod/Tizen.Uix.InputMethod/InputMethodEditor.cs +++ b/src/Tizen.Uix.InputMethod/Tizen.Uix.InputMethod/InputMethodEditor.cs @@ -960,7 +960,6 @@ namespace Tizen.Uix.InputMethod /// 4 public static class InputMethodEditor { - private static Object thisLock = new Object(); private static ImeCallbackStructGCHandle _imeCallbackStructGCHandle = new ImeCallbackStructGCHandle(); private static event EventHandler _focusIn; private static ImeFocusedInCb _imeFocusedInDelegate; @@ -1125,30 +1124,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeFocusedInDelegate = (int contextId, IntPtr userData) => { - _imeFocusedInDelegate = (int contextId, IntPtr userData) => - { - FocusedInEventArgs args = new FocusedInEventArgs(contextId); - _focusIn?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetFocusedInCb(_imeFocusedInDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add FocusedIn Failed with error " + error); - } - else - { - _focusIn += value; - } + FocusedInEventArgs args = new FocusedInEventArgs(contextId); + _focusIn?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetFocusedInCb(_imeFocusedInDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add FocusedIn Failed with error " + error); + } + else + { + _focusIn += value; } } remove { - lock (thisLock) - { - _focusIn -= value; - } + _focusIn -= value; } } @@ -1160,30 +1153,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeFocusedOutDelegate = (int contextId, IntPtr userData) => { - _imeFocusedOutDelegate = (int contextId, IntPtr userData) => - { - FocusedOutEventArgs args = new FocusedOutEventArgs(contextId); - _focusOut?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetFocusedOutCb(_imeFocusedOutDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add FocusedOut Failed with error " + error); - } - else - { - _focusOut += value; - } + FocusedOutEventArgs args = new FocusedOutEventArgs(contextId); + _focusOut?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetFocusedOutCb(_imeFocusedOutDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add FocusedOut Failed with error " + error); + } + else + { + _focusOut += value; } } remove { - lock (thisLock) - { - _focusOut -= value; - } + _focusOut -= value; } } @@ -1195,30 +1182,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeSurroundingTextUpdatedDelegate = (int contextId, IntPtr text, int cursorPos, IntPtr userData) => { - _imeSurroundingTextUpdatedDelegate = (int contextId, IntPtr text, int cursorPos, IntPtr userData) => - { - SurroundingTextUpdatedEventArgs args = new SurroundingTextUpdatedEventArgs(contextId, Marshal.PtrToStringAnsi(text), cursorPos); - _surroundingTextUpdated?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetSurroundingTextUpdatedCb(_imeSurroundingTextUpdatedDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add SurroundingTextUpdated Failed with error " + error); - } - else - { - _surroundingTextUpdated += value; - } + SurroundingTextUpdatedEventArgs args = new SurroundingTextUpdatedEventArgs(contextId, Marshal.PtrToStringAnsi(text), cursorPos); + _surroundingTextUpdated?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetSurroundingTextUpdatedCb(_imeSurroundingTextUpdatedDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add SurroundingTextUpdated Failed with error " + error); + } + else + { + _surroundingTextUpdated += value; } } remove { - lock (thisLock) - { - _surroundingTextUpdated -= value; - } + _surroundingTextUpdated -= value; } } @@ -1230,29 +1211,23 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeInputContextResetDelegate = (IntPtr userData) => { - _imeInputContextResetDelegate = (IntPtr userData) => - { - _inputContextReset?.Invoke(null, EventArgs.Empty); - }; - ErrorCode error = ImeEventSetInputContextResetCb(_imeInputContextResetDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add InputContextReset Failed with error " + error); - } - else - { - _inputContextReset += value; - } + _inputContextReset?.Invoke(null, EventArgs.Empty); + }; + ErrorCode error = ImeEventSetInputContextResetCb(_imeInputContextResetDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add InputContextReset Failed with error " + error); + } + else + { + _inputContextReset += value; } } remove { - lock (thisLock) - { - _inputContextReset -= value; - } + _inputContextReset -= value; } } @@ -1264,30 +1239,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeCursorPositionUpdatedDelegate = (int cursorPos, IntPtr userData) => { - _imeCursorPositionUpdatedDelegate = (int cursorPos, IntPtr userData) => - { - CursorPositionUpdatedEventArgs args = new CursorPositionUpdatedEventArgs(cursorPos); - _cursorPositionUpdated?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetCursorPositionUpdatedCb(_imeCursorPositionUpdatedDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add CursorPositionUpdated Failed with error " + error); - } - else - { - _cursorPositionUpdated += value; - } + CursorPositionUpdatedEventArgs args = new CursorPositionUpdatedEventArgs(cursorPos); + _cursorPositionUpdated?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetCursorPositionUpdatedCb(_imeCursorPositionUpdatedDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add CursorPositionUpdated Failed with error " + error); + } + else + { + _cursorPositionUpdated += value; } } remove { - lock (thisLock) - { - _cursorPositionUpdated -= value; - } + _cursorPositionUpdated -= value; } } @@ -1300,30 +1269,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeLanguageSetDelegate = (InputPanelLanguage language, IntPtr userData) => { - _imeLanguageSetDelegate = (InputPanelLanguage language, IntPtr userData) => - { - LanguageSetEventArgs args = new LanguageSetEventArgs(language); - _langaugeSet?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetLanguageSetCb(_imeLanguageSetDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add LanguageSet Failed with error " + error); - } - else - { - _langaugeSet += value; - } + LanguageSetEventArgs args = new LanguageSetEventArgs(language); + _langaugeSet?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetLanguageSetCb(_imeLanguageSetDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add LanguageSet Failed with error " + error); + } + else + { + _langaugeSet += value; } } remove { - lock (thisLock) - { - _langaugeSet -= value; - } + _langaugeSet -= value; } } @@ -1335,32 +1298,26 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeDataSetDelegate = (IntPtr data, uint dataLength, IntPtr userData) => { - _imeDataSetDelegate = (IntPtr data, uint dataLength, IntPtr userData) => - { - byte[] destination = new byte[dataLength]; - Marshal.Copy(data, destination, 0, (int)dataLength); - SetDataEventArgs args = new SetDataEventArgs(destination, dataLength); - _imDataSet?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetImdataSetCb(_imeDataSetDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add DataSet Failed with error " + error); - } - else - { - _imDataSet += value; - } + byte[] destination = new byte[dataLength]; + Marshal.Copy(data, destination, 0, (int)dataLength); + SetDataEventArgs args = new SetDataEventArgs(destination, dataLength); + _imDataSet?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetImdataSetCb(_imeDataSetDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add DataSet Failed with error " + error); + } + else + { + _imDataSet += value; } } remove { - lock (thisLock) - { - _imDataSet -= value; - } + _imDataSet -= value; } } @@ -1373,30 +1330,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeLayoutSetDelegate = (InputPanelLayout layout, IntPtr userData) => { - _imeLayoutSetDelegate = (InputPanelLayout layout, IntPtr userData) => - { - LayoutSetEventArgs args = new LayoutSetEventArgs(layout); - _layoutSet?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetLayoutSetCb(_imeLayoutSetDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add LayoutSet Failed with error " + error); - } - else - { - _layoutSet += value; - } + LayoutSetEventArgs args = new LayoutSetEventArgs(layout); + _layoutSet?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetLayoutSetCb(_imeLayoutSetDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add LayoutSet Failed with error " + error); + } + else + { + _layoutSet += value; } } remove { - lock (thisLock) - { - _layoutSet -= value; - } + _layoutSet -= value; } } @@ -1409,30 +1360,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeReturnKeySetDelegate = (InputPanelReturnKey type, IntPtr userData) => { - _imeReturnKeySetDelegate = (InputPanelReturnKey type, IntPtr userData) => - { - ReturnKeySetEventArgs args = new ReturnKeySetEventArgs(type); - _returnKeyTypeSet?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetReturnKeySetCb(_imeReturnKeySetDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add ReturnKeySet Failed with error " + error); - } - else - { - _returnKeyTypeSet += value; - } + ReturnKeySetEventArgs args = new ReturnKeySetEventArgs(type); + _returnKeyTypeSet?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetReturnKeySetCb(_imeReturnKeySetDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add ReturnKeySet Failed with error " + error); + } + else + { + _returnKeyTypeSet += value; } } remove { - lock (thisLock) - { - _returnKeyTypeSet -= value; - } + _returnKeyTypeSet -= value; } } @@ -1444,30 +1389,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeReturnKeyStateSetDelegate = (bool state, IntPtr userData) => { - _imeReturnKeyStateSetDelegate = (bool state, IntPtr userData) => - { - ReturnKeyStateSetEventArgs args = new ReturnKeyStateSetEventArgs(state); - _returnKeyStateSet?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetReturnKeyStateSetCb(_imeReturnKeyStateSetDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add ReturnKeyStateSet Failed with error " + error); - } - else - { - _returnKeyStateSet += value; - } + ReturnKeyStateSetEventArgs args = new ReturnKeyStateSetEventArgs(state); + _returnKeyStateSet?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetReturnKeyStateSetCb(_imeReturnKeyStateSetDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add ReturnKeyStateSet Failed with error " + error); + } + else + { + _returnKeyStateSet += value; } } remove { - lock (thisLock) - { - _returnKeyStateSet -= value; - } + _returnKeyStateSet -= value; } } @@ -1479,30 +1418,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeDisplayLanguageChangedDelegate = (IntPtr language, IntPtr userData) => { - _imeDisplayLanguageChangedDelegate = (IntPtr language, IntPtr userData) => - { - DisplayLanguageChangedEventArgs args = new DisplayLanguageChangedEventArgs(Marshal.PtrToStringAnsi(language)); - _displayLanguageChanged?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetDisplayLanguageChangedCb(_imeDisplayLanguageChangedDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add DisplayLanguageChanged Failed with error " + error); - } - else - { - _displayLanguageChanged += value; - } + DisplayLanguageChangedEventArgs args = new DisplayLanguageChangedEventArgs(Marshal.PtrToStringAnsi(language)); + _displayLanguageChanged?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetDisplayLanguageChangedCb(_imeDisplayLanguageChangedDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add DisplayLanguageChanged Failed with error " + error); + } + else + { + _displayLanguageChanged += value; } } remove { - lock (thisLock) - { - _displayLanguageChanged -= value; - } + _displayLanguageChanged -= value; } } @@ -1514,30 +1447,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeRotationChangedDelegate = (int degree, IntPtr userData) => { - _imeRotationChangedDelegate = (int degree, IntPtr userData) => - { - RotationChangedEventArgs args = new RotationChangedEventArgs(degree); - _rotationDegreeChanged?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetRotationChangedCb(_imeRotationChangedDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add RotationChanged Failed with error " + error); - } - else - { - _rotationDegreeChanged += value; - } + RotationChangedEventArgs args = new RotationChangedEventArgs(degree); + _rotationDegreeChanged?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetRotationChangedCb(_imeRotationChangedDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add RotationChanged Failed with error " + error); + } + else + { + _rotationDegreeChanged += value; } } remove { - lock (thisLock) - { - _rotationDegreeChanged -= value; - } + _rotationDegreeChanged -= value; } } @@ -1549,30 +1476,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + _imeAccessibilityStateChangedDelegate = (bool state, IntPtr userData) => { - _imeAccessibilityStateChangedDelegate = (bool state, IntPtr userData) => - { - AccessibilityStateChangedEventArgs args = new AccessibilityStateChangedEventArgs(state); - _accessibilityStateChanged?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetAccessibilityStateChangedCb(_imeAccessibilityStateChangedDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add AccessibilityStateChanged Failed with error " + error); - } - else - { - _accessibilityStateChanged += value; - } + AccessibilityStateChangedEventArgs args = new AccessibilityStateChangedEventArgs(state); + _accessibilityStateChanged?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetAccessibilityStateChangedCb(_imeAccessibilityStateChangedDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add AccessibilityStateChanged Failed with error " + error); + } + else + { + _accessibilityStateChanged += value; } } remove { - lock (thisLock) - { - _accessibilityStateChanged -= value; - } + _accessibilityStateChanged -= value; } } @@ -2250,30 +2171,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + if (_imePredictionHintSetDelegate == null) { - if (_imePredictionHintSetDelegate == null) + _imePredictionHintSetDelegate = (IntPtr predictionHint, IntPtr userData) => { - _imePredictionHintSetDelegate = (IntPtr predictionHint, IntPtr userData) => - { - PredictionHintUpdatedEventArgs args = new PredictionHintUpdatedEventArgs(Marshal.PtrToStringAnsi(predictionHint)); - _predictionHintUpdated?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetPredictionHintSetCb(_imePredictionHintSetDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add PredictionHintUpdated Failed with error " + error); - } + PredictionHintUpdatedEventArgs args = new PredictionHintUpdatedEventArgs(Marshal.PtrToStringAnsi(predictionHint)); + _predictionHintUpdated?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetPredictionHintSetCb(_imePredictionHintSetDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add PredictionHintUpdated Failed with error " + error); } - _predictionHintUpdated += value; } + _predictionHintUpdated += value; } remove { - lock (thisLock) - { - _predictionHintUpdated -= value; - } + _predictionHintUpdated -= value; } } @@ -2285,31 +2200,25 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + if (_imePredictionHintDataSetDelegate == null) { - if (_imePredictionHintDataSetDelegate == null) + _imePredictionHintDataSetDelegate = (IntPtr key, IntPtr keyValue, IntPtr userData) => { - _imePredictionHintDataSetDelegate = (IntPtr key, IntPtr keyValue, IntPtr userData) => - { - PredictionHintDataUpdatedEventArgs args = new PredictionHintDataUpdatedEventArgs(Marshal.PtrToStringAnsi(key), Marshal.PtrToStringAnsi(keyValue)); - _predictionHintDataUpdated?.Invoke(null, args); - }; - - ErrorCode error = ImeEventSetPredictionHintDataSetCb(_imePredictionHintDataSetDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add PredictionHintDataUpdated Failed with error " + error); - } + PredictionHintDataUpdatedEventArgs args = new PredictionHintDataUpdatedEventArgs(Marshal.PtrToStringAnsi(key), Marshal.PtrToStringAnsi(keyValue)); + _predictionHintDataUpdated?.Invoke(null, args); + }; + + ErrorCode error = ImeEventSetPredictionHintDataSetCb(_imePredictionHintDataSetDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add PredictionHintDataUpdated Failed with error " + error); } - _predictionHintDataUpdated += value; } + _predictionHintDataUpdated += value; } remove { - lock (thisLock) - { - _predictionHintDataUpdated -= value; - } + _predictionHintDataUpdated -= value; } } @@ -2321,30 +2230,24 @@ namespace Tizen.Uix.InputMethod { add { - lock (thisLock) + if (_imeMimeTypeSetRequestDelegate == null) { - if (_imeMimeTypeSetRequestDelegate == null) + _imeMimeTypeSetRequestDelegate = (IntPtr mimeType, IntPtr userData) => { - _imeMimeTypeSetRequestDelegate = (IntPtr mimeType, IntPtr userData) => - { - MimeTypeUpdateRequestedEventArgs args = new MimeTypeUpdateRequestedEventArgs(Marshal.PtrToStringAnsi(mimeType)); - _mimeTypeUpdateRequested?.Invoke(null, args); - }; - ErrorCode error = ImeEventSetMimeTypeSetRequestCb(_imeMimeTypeSetRequestDelegate, IntPtr.Zero); - if (error != ErrorCode.None) - { - Log.Error(LogTag, "Add MimeTypeUpdateRequested Failed with error " + error); - } + MimeTypeUpdateRequestedEventArgs args = new MimeTypeUpdateRequestedEventArgs(Marshal.PtrToStringAnsi(mimeType)); + _mimeTypeUpdateRequested?.Invoke(null, args); + }; + ErrorCode error = ImeEventSetMimeTypeSetRequestCb(_imeMimeTypeSetRequestDelegate, IntPtr.Zero); + if (error != ErrorCode.None) + { + Log.Error(LogTag, "Add MimeTypeUpdateRequested Failed with error " + error); } - _mimeTypeUpdateRequested += value; } + _mimeTypeUpdateRequested += value; } remove { - lock (thisLock) - { - _mimeTypeUpdateRequested -= value; - } + _mimeTypeUpdateRequested -= value; } } -- 2.7.4