[NUI] Change all CallingConvention to `Cdecl`
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / BaseComponents / TextFieldEvent.cs
index ba8414f..2999f1f 100755 (executable)
@@ -44,27 +44,35 @@ namespace Tizen.NUI.BaseComponents
         private EventHandler textFieldSelectionClearedEventHandler;
         private SelectionClearedCallbackDelegate textFieldSelectionClearedCallbackDelegate;
 
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private EventHandler textFieldSelectionStartedEventHandler;
+        private SelectionStartedCallbackDelegate textFieldSelectionStartedCallbackDelegate;
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         private delegate void TextChangedCallbackDelegate(IntPtr textField);
 
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         private delegate void CursorPositionChangedCallbackDelegate(IntPtr textField, uint oldPosition);
 
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         private delegate void MaxLengthReachedCallbackDelegate(IntPtr textField);
 
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         private delegate void AnchorClickedCallbackDelegate(IntPtr textField, IntPtr href, uint hrefLength);
 
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         private delegate void SelectionChangedCallbackDelegate(IntPtr textField, uint oldStart, uint oldEnd);
 
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         private delegate void InputFilteredCallbackDelegate(IntPtr textField, InputFilterType type);
 
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         private delegate void SelectionClearedCallbackDelegate(IntPtr textField);
 
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        private delegate void SelectionStartedCallbackDelegate(IntPtr textField);
+
+        private bool invokeTextChanged = true;
+
         /// <summary>
         /// The TextChanged event.
         /// </summary>
@@ -91,7 +99,7 @@ namespace Tizen.NUI.BaseComponents
         }
 
         /// <summary>
-        /// The CursorPositionChanged event.
+        /// The CursorPositionChanged event is emitted whenever the primary cursor position changed.
         /// </summary>
         /// <since_tizen> 9 </since_tizen>
         public event EventHandler CursorPositionChanged
@@ -141,10 +149,34 @@ namespace Tizen.NUI.BaseComponents
         }
 
         /// <summary>
+        /// The SelectionStarted event is emitted when the selection has been started.
+        /// </summary>
+        /// <since_tizen> 10 </since_tizen>
+        public event EventHandler SelectionStarted
+        {
+            add
+            {
+                if (textFieldSelectionStartedEventHandler == null)
+                {
+                    textFieldSelectionStartedCallbackDelegate = (OnSelectionStarted);
+                    SelectionStartedSignal().Connect(textFieldSelectionStartedCallbackDelegate);
+                }
+                textFieldSelectionStartedEventHandler += value;
+            }
+            remove
+            {
+                if (textFieldSelectionStartedEventHandler == null && SelectionStartedSignal().Empty() == false)
+                {
+                    this.SelectionStartedSignal().Disconnect(textFieldSelectionStartedCallbackDelegate);
+                }
+                textFieldSelectionStartedEventHandler -= value;
+            }
+        }
+
+        /// <summary>
         /// The SelectionCleared signal is emitted when selection is cleared.
         /// </summary>
-        /// This will be public opened after ACR done. Before ACR, need to be hidden as inhouse API.
-        [EditorBrowsable(EditorBrowsableState.Never)]
+        /// <since_tizen> 9 </since_tizen>
         public event EventHandler SelectionCleared
         {
             add
@@ -192,7 +224,7 @@ namespace Tizen.NUI.BaseComponents
         }
 
         /// <summary>
-        /// The SelectionChanged signal is emitted whenever the selected text changed.
+        /// The SelectionChanged event is emitted whenever the selected text is changed.
         /// </summary>
         /// <since_tizen> 9 </since_tizen>
         public event EventHandler SelectionChanged
@@ -238,7 +270,7 @@ namespace Tizen.NUI.BaseComponents
         /// };
         /// </code>
         /// </example>
-        [EditorBrowsable(EditorBrowsableState.Never)]
+        /// <since_tizen> 9 </since_tizen>
         public event EventHandler<InputFilteredEventArgs> InputFiltered
         {
             add
@@ -260,6 +292,13 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
+        internal TextFieldSignal SelectionStartedSignal()
+        {
+            TextFieldSignal ret = new TextFieldSignal(Interop.TextField.SelectionStartedSignal(SwigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
         internal TextFieldSignal SelectionClearedSignal()
         {
             TextFieldSignal ret = new TextFieldSignal(Interop.TextField.SelectionClearedSignal(SwigCPtr), false);
@@ -309,6 +348,12 @@ namespace Tizen.NUI.BaseComponents
             return ret;
         }
 
+        private void OnSelectionStarted(IntPtr textField)
+        {
+            //no data to be sent to the user
+            textFieldSelectionStartedEventHandler?.Invoke(this, EventArgs.Empty);
+        }
+
         private void OnSelectionCleared(IntPtr textField)
         {
             //no data to be sent to the user
@@ -317,7 +362,7 @@ namespace Tizen.NUI.BaseComponents
 
         private void OnTextChanged(IntPtr textField)
         {
-            if (textFieldTextChangedEventHandler != null)
+            if (textFieldTextChangedEventHandler != null && invokeTextChanged)
             {
                 TextChangedEventArgs e = new TextChangedEventArgs();