Replace EventReceivedSignal in text with KeyboardEventReceivedSignal 32/320032/3
authorBowon Ryu <bowon.ryu@samsung.com>
Thu, 7 Nov 2024 02:26:25 +0000 (11:26 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Thu, 7 Nov 2024 02:31:34 +0000 (11:31 +0900)
In some use cases,
Signals are separated to avoid problems where signal emit occurs within emit.

Change-Id: I63c60d9358351a95b6ceff33146fab7c730f89fd
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-input-method-context.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-input-method-context.h
automated-tests/src/dali-toolkit/utc-Dali-TextEditor.cpp
automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp
dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp
dali-toolkit/internal/controls/text-controls/text-field-impl.cpp

index 0f74724662890ed763efdeec235bfae7d2fb93ed..119f8e974d214f4ca6393564922ac11cb7384f57 100755 (executable)
@@ -65,6 +65,7 @@ public:
 public:  // Signals
   ActivatedSignalType& ActivatedSignal() { return mActivatedSignal; }
   KeyboardEventSignalType& EventReceivedSignal() { return mEventSignal; }
+  KeyboardEventSignalType& KeyboardEventReceivedSignal() { return mKeyboardEventSignal; }
   StatusSignalType& StatusChangedSignal() { return mKeyboardStatusSignal; }
   VoidSignalType& ResizedSignal() { return mKeyboardResizeSignal; }
   VoidSignalType& LanguageChangedSignal() { return mKeyboardLanguageChangedSignal; }
@@ -91,6 +92,7 @@ private:
 
   ActivatedSignalType      mActivatedSignal;
   KeyboardEventSignalType  mEventSignal;
+  KeyboardEventSignalType  mKeyboardEventSignal;
   StatusSignalType         mKeyboardStatusSignal;
   VoidSignalType           mKeyboardResizeSignal;
   VoidSignalType           mKeyboardLanguageChangedSignal;
@@ -344,6 +346,11 @@ InputMethodContext::KeyboardEventSignalType& InputMethodContext::EventReceivedSi
   return Internal::Adaptor::InputMethodContext::GetImplementation(*this).EventReceivedSignal();
 }
 
+InputMethodContext::KeyboardEventSignalType& InputMethodContext::KeyboardEventReceivedSignal()
+{
+  return Internal::Adaptor::InputMethodContext::GetImplementation(*this).KeyboardEventReceivedSignal();
+}
+
 InputMethodContext::StatusSignalType& InputMethodContext::StatusChangedSignal()
 {
   return Internal::Adaptor::InputMethodContext::GetImplementation(*this).StatusChangedSignal();
index deb9a2d2511051b1c04ba172f60d5738cc4fc847..c2aaa052187c5aa75330ca49da0cbe9cf3bb7a6d 100755 (executable)
@@ -374,12 +374,29 @@ public:
   ActivatedSignalType& ActivatedSignal();
 
   /**
-   * @brief This is emitted when the input method context receives an event.
+   * @brief This is emitted when the InputMethodContext receives an event from the InputMethodContext.
+   * @note This signal is the same as KeyboardEventReceivedSignal().
+   * This signal is bound to dali-csharp-binder and can be used in external apps.
    *
    * @return The Event signal containing the event data.
    */
   KeyboardEventSignalType& EventReceivedSignal();
 
+  /**
+   * @brief This is emitted when the InputMethodContext receives an event from the InputMethodContext.
+   * @note This signal is the same as EventReceivedSignal().
+   * This signal is only used by dali.
+   *
+   * The EventReceivedSignal combines different kinds of events triggered by the IMF into a single signal, which it then emits.
+   * These events often happen during text entry through S/W keyboard and Applications depend on this signal to perform various actions.
+   * There exists a situation where further emissions take place inside the emitted signal.
+   * Unfortunately, these events are already exposed publicly and cannot be segregated separately.
+   * As a workaround, we keep the original signal intact but separate signals meant exclusively for usage within dali.
+   *
+   * @return The Event signal containing the event data.
+   */
+  KeyboardEventSignalType& KeyboardEventReceivedSignal();
+
   /**
    * @brief Connect to this signal to be notified when the virtual keyboard is shown or hidden.
    *
index 690fd0257f1564a14ec9a7744725e32b8eb24138..d63762feb18b89800b22b945d786150ad0bc8017 100644 (file)
@@ -1433,7 +1433,7 @@ int utcDaliTextEditorTextChangedWithInputMethodContext(void)
   // input text
   gTextChangedCallBackCalled = false;
   imfEvent                   = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "ㅎ", 0, 1);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   application.SendNotification();
   application.Render();
   DALI_TEST_CHECK(gTextChangedCallBackCalled);
@@ -1441,7 +1441,7 @@ int utcDaliTextEditorTextChangedWithInputMethodContext(void)
 
   gTextChangedCallBackCalled = false;
   imfEvent                   = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "호", 0, 1);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   application.SendNotification();
   application.Render();
   DALI_TEST_CHECK(gTextChangedCallBackCalled);
@@ -1449,7 +1449,7 @@ int utcDaliTextEditorTextChangedWithInputMethodContext(void)
 
   gTextChangedCallBackCalled = false;
   imfEvent                   = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "혿", 0, 1);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   application.SendNotification();
   application.Render();
   DALI_TEST_CHECK(gTextChangedCallBackCalled);
@@ -1457,15 +1457,15 @@ int utcDaliTextEditorTextChangedWithInputMethodContext(void)
 
   gTextChangedCallBackCalled = false;
   imfEvent                   = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "", 0, 1);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   DALI_TEST_CHECK(!gTextChangedCallBackCalled);
 
   imfEvent = InputMethodContext::EventData(InputMethodContext::COMMIT, "호", 0, 1);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   DALI_TEST_CHECK(!gTextChangedCallBackCalled);
 
   imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "두", 1, 2);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   DALI_TEST_CHECK(!gTextChangedCallBackCalled);
 
   application.SendNotification();
index e7d79b696a5588c67d5b93850849879b00ac11c3..dc304d7db5e0cf96e63680ad10567162630e2b58 100644 (file)
@@ -1686,7 +1686,7 @@ int utcDaliTextFieldTextChangedWithInputMethodContext(void)
   // input text
   gTextChangedCallBackCalled = false;
   imfEvent                   = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "ㅎ", 0, 1);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   application.SendNotification();
   application.Render();
   DALI_TEST_CHECK(gTextChangedCallBackCalled);
@@ -1694,7 +1694,7 @@ int utcDaliTextFieldTextChangedWithInputMethodContext(void)
 
   gTextChangedCallBackCalled = false;
   imfEvent                   = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "호", 0, 1);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   application.SendNotification();
   application.Render();
   DALI_TEST_CHECK(gTextChangedCallBackCalled);
@@ -1702,7 +1702,7 @@ int utcDaliTextFieldTextChangedWithInputMethodContext(void)
 
   gTextChangedCallBackCalled = false;
   imfEvent                   = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "혿", 0, 1);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   application.SendNotification();
   application.Render();
   DALI_TEST_CHECK(gTextChangedCallBackCalled);
@@ -1710,15 +1710,15 @@ int utcDaliTextFieldTextChangedWithInputMethodContext(void)
 
   gTextChangedCallBackCalled = false;
   imfEvent                   = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "", 0, 1);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   DALI_TEST_CHECK(!gTextChangedCallBackCalled);
 
   imfEvent = InputMethodContext::EventData(InputMethodContext::COMMIT, "호", 0, 1);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   DALI_TEST_CHECK(!gTextChangedCallBackCalled);
 
   imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "두", 1, 2);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   DALI_TEST_CHECK(!gTextChangedCallBackCalled);
 
   application.SendNotification();
@@ -1757,7 +1757,7 @@ int utcDaliTextFieldSelectionWithInputMethodContext(void)
   // input text
   gSelectionChangedCallbackCalled = false;
   imfEvent                        = InputMethodContext::EventData(InputMethodContext::SELECTION_SET, 1, 4);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   application.SendNotification();
   application.Render();
   DALI_TEST_CHECK(gSelectionChangedCallbackCalled);
@@ -1796,7 +1796,7 @@ int utcDaliTextFieldPositionWithInputMethodContext(void)
   // input text
   gCursorPositionChangedCallbackCalled = false;
   imfEvent                             = InputMethodContext::EventData(InputMethodContext::SELECTION_SET, 2, 2);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   application.SendNotification();
   application.Render();
   DALI_TEST_CHECK(gCursorPositionChangedCallbackCalled);
@@ -1839,7 +1839,7 @@ int utcDaliTextFieldInputFilterWithInputMethodContext(void)
   // input text
   gInputFilteredAcceptedCallbackCalled = false;
   imfEvent                             = InputMethodContext::EventData(InputMethodContext::COMMIT, "Hello1234", 0, 9);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   application.SendNotification();
   application.Render();
   DALI_TEST_CHECK(gInputFilteredAcceptedCallbackCalled);
@@ -1848,7 +1848,7 @@ int utcDaliTextFieldInputFilterWithInputMethodContext(void)
   inputFilteredSignal                  = false;
   gInputFilteredRejectedCallbackCalled = false;
   imfEvent                             = InputMethodContext::EventData(InputMethodContext::COMMIT, "1234567", 0, 7);
-  inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent);
+  inputMethodContext.KeyboardEventReceivedSignal().Emit(inputMethodContext, imfEvent);
   application.SendNotification();
   application.Render();
   DALI_TEST_CHECK(gInputFilteredRejectedCallbackCalled);
index 04b3a431df3b9066ab745d099de41a1e4385af09..1a130c923bba5259767b9c0793a67d7aa589671c 100644 (file)
@@ -843,7 +843,7 @@ void TextEditor::OnKeyInputFocusGained()
 
     mInputMethodContext.StatusChangedSignal().Connect(this, &TextEditor::KeyboardStatusChanged);
 
-    mInputMethodContext.EventReceivedSignal().Connect(this, &TextEditor::OnInputMethodContextEvent);
+    mInputMethodContext.KeyboardEventReceivedSignal().Connect(this, &TextEditor::OnInputMethodContextEvent);
 
     // Notify that the text editing start.
     mInputMethodContext.Activate();
@@ -873,7 +873,7 @@ void TextEditor::OnKeyInputFocusLost()
     // Notify that the text editing finish.
     mInputMethodContext.Deactivate();
 
-    mInputMethodContext.EventReceivedSignal().Disconnect(this, &TextEditor::OnInputMethodContextEvent);
+    mInputMethodContext.KeyboardEventReceivedSignal().Disconnect(this, &TextEditor::OnInputMethodContextEvent);
   }
 
   mController->KeyboardFocusLostEvent();
index b4fd8d73a50f6d096c055e8dace3c4524187e5c3..cfdbb8763dcc41b4f7b943f2e0142ce7702c515d 100644 (file)
@@ -754,7 +754,7 @@ void TextField::OnKeyInputFocusGained()
 
     mInputMethodContext.StatusChangedSignal().Connect(this, &TextField::KeyboardStatusChanged);
 
-    mInputMethodContext.EventReceivedSignal().Connect(this, &TextField::OnInputMethodContextEvent);
+    mInputMethodContext.KeyboardEventReceivedSignal().Connect(this, &TextField::OnInputMethodContextEvent);
 
     // Notify that the text editing start.
     mInputMethodContext.Activate();
@@ -783,7 +783,7 @@ void TextField::OnKeyInputFocusLost()
     // Notify that the text editing finish.
     mInputMethodContext.Deactivate();
 
-    mInputMethodContext.EventReceivedSignal().Disconnect(this, &TextField::OnInputMethodContextEvent);
+    mInputMethodContext.KeyboardEventReceivedSignal().Disconnect(this, &TextField::OnInputMethodContextEvent);
   }
 
   mController->KeyboardFocusLostEvent();