Send confirm composition event immediately when imf context was reset
authorSangYong Park <sy302.park@samsung.com>
Fri, 5 Jul 2013 03:01:31 +0000 (12:01 +0900)
committerGerrit Code Review <gerrit@gerrit.vlan144.tizendev.org>
Fri, 5 Jul 2013 08:22:21 +0000 (08:22 +0000)
[Title] Send confirm composition event immediately when imf context was reset
[Issue#] N/A
[Problem] Composition text was inserted after tap.
[Cause] Confirm composition was handled after focus was moved.
[Solution] Send confirm composition event immediately when imf context was reset.

Change-Id: I08b78b3e996083c86d6ba4211a8c0749b12a6d0b

Source/WebKit2/UIProcess/efl/InputMethodContextEfl.cpp
Source/WebKit2/UIProcess/efl/InputMethodContextEfl.h

index 8bd8ee1..5bced31 100755 (executable)
@@ -42,7 +42,7 @@ InputMethodContextEfl::InputMethodContextEfl(EwkViewImpl* viewImpl, PassOwnPtr<E
     , m_contextID(0)
     , m_state(ECORE_IMF_INPUT_PANEL_STATE_HIDE)
     , m_inputPickerType(-1)
-    , m_handleKeyDownEvent(false)
+    , m_doNotHandleFakeKeyEvent(false)
     , m_fakeKeyEventTimer(this, &InputMethodContextEfl::fakeKeyEventTimerFired)
 #endif
 {
@@ -143,8 +143,7 @@ void InputMethodContextEfl::onIMFDeleteSurrounding(void* data, Ecore_IMF_Context
     if (!eventInfo || !inputMethodContext->m_viewImpl->page()->focusedFrame() || !inputMethodContext->m_focused)
         return;
 
-    if (!inputMethodContext->m_handleKeyDownEvent)
-        inputMethodContext->requestFakeKeyEvent();
+    inputMethodContext->requestFakeKeyEvent();
 
     Ecore_IMF_Event_Delete_Surrounding* event = static_cast<Ecore_IMF_Event_Delete_Surrounding*>(eventInfo);
     inputMethodContext->m_viewImpl->page()->deleteSurroundingText(event->offset, event->n_chars);
@@ -156,8 +155,7 @@ void InputMethodContextEfl::onIMFInputSequenceComplete(void* data, Ecore_IMF_Con
     if (!eventInfo || !inputMethodContext->m_focused)
         return;
 
-    if (!inputMethodContext->m_handleKeyDownEvent)
-        inputMethodContext->requestFakeKeyEvent();
+    inputMethodContext->requestFakeKeyEvent();
 
     inputMethodContext->m_viewImpl->page()->confirmComposition(String::fromUTF8(static_cast<char*>(eventInfo)));
 }
@@ -206,8 +204,7 @@ void InputMethodContextEfl::onIMFPreeditSequenceChanged(void* data, Ecore_IMF_Co
     if (!page->focusedFrame())
         return;
 
-    if (!inputMethodContext->m_handleKeyDownEvent)
-        inputMethodContext->requestFakeKeyEvent();
+    inputMethodContext->requestFakeKeyEvent();
 
     PageClientImpl* pageClient = inputMethodContext->m_viewImpl->pageClient.get();
     IntRect caretRect;
@@ -327,7 +324,14 @@ PassOwnPtr<Ecore_IMF_Context> InputMethodContextEfl::createIMFContext(Evas* canv
 
 void InputMethodContextEfl::handleMouseUpEvent(const Evas_Event_Mouse_Up*)
 {
+#if ENABLE(TIZEN_ISF_PORT)
+    if (!m_context)
+        return;
+
+    resetIMFContext();
+#else
     ecore_imf_context_reset(m_context.get());
+#endif
 }
 
 void InputMethodContextEfl::handleKeyDownEvent(const Evas_Event_Key_Down* downEvent, bool* isFiltered)
@@ -341,7 +345,7 @@ void InputMethodContextEfl::handleKeyDownEvent(const Evas_Event_Key_Down* downEv
     else
         m_viewImpl->page()->prepareKeyDownEvent();
 
-    m_handleKeyDownEvent = true;
+    m_doNotHandleFakeKeyEvent = true;
 #endif
 
     Ecore_IMF_Event inputMethodEvent;
@@ -350,7 +354,7 @@ void InputMethodContextEfl::handleKeyDownEvent(const Evas_Event_Key_Down* downEv
     *isFiltered = ecore_imf_context_filter_event(m_context.get(), ECORE_IMF_EVENT_KEY_DOWN, &inputMethodEvent);
 
 #if ENABLE(TIZEN_ISF_PORT)
-    m_handleKeyDownEvent = false;
+    m_doNotHandleFakeKeyEvent = false;
 #endif
 }
 
@@ -556,7 +560,9 @@ void InputMethodContextEfl::resetIMFContext()
     if (!m_context)
         return;
 
+    m_doNotHandleFakeKeyEvent = true;
     ecore_imf_context_reset(m_context.get());
+    m_doNotHandleFakeKeyEvent = false;
 }
 
 void InputMethodContextEfl::showIMFContext(const EditorState& editor)
@@ -635,7 +641,7 @@ void InputMethodContextEfl::showIMFContext(const EditorState& editor)
         m_viewImpl->pageClient->closeClipboardWindow();
 #endif
 
-    ecore_imf_context_reset(m_context.get());
+    resetIMFContext();
     ecore_imf_context_focus_in(m_context.get());
     ecore_imf_context_input_panel_show(m_context.get());
 
@@ -668,7 +674,7 @@ void InputMethodContextEfl::hideIMFContext()
 
     if (ecore_imf_context_input_panel_state_get(m_context.get()) != ECORE_IMF_INPUT_PANEL_STATE_HIDE
         && evas_object_focus_get(m_viewImpl->view())) {
-        ecore_imf_context_reset(m_context.get());
+        resetIMFContext();
         ecore_imf_context_input_panel_hide(m_context.get());
         ecore_imf_context_focus_out(m_context.get());
     }
@@ -726,7 +732,7 @@ void InputMethodContextEfl::setKeyboardMode(bool isOn)
 
 void InputMethodContextEfl::requestFakeKeyEvent()
 {
-    if (m_handleKeyDownEvent || m_fakeKeyEventTimer.isActive())
+    if (m_doNotHandleFakeKeyEvent || m_fakeKeyEventTimer.isActive())
         return;
 
     m_fakeKeyEventTimer.startOneShot(0);
index f95c79c..8c6698a 100755 (executable)
@@ -110,7 +110,7 @@ private:
     int m_state;
     WebCore::IntRect m_imeRect;
     int m_inputPickerType;
-    bool m_handleKeyDownEvent;
+    bool m_doNotHandleFakeKeyEvent;
     WebCore::Timer<InputMethodContextEfl> m_fakeKeyEventTimer;
 #endif
 };