From 3c9a29dff6e9d8967c6aad6f5c75d2d133deefc5 Mon Sep 17 00:00:00 2001 From: SangYong Park Date: Fri, 5 Jul 2013 12:01:31 +0900 Subject: [PATCH] Send confirm composition event immediately when imf context was reset [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 --- .../UIProcess/efl/InputMethodContextEfl.cpp | 30 +++++++++++++--------- .../WebKit2/UIProcess/efl/InputMethodContextEfl.h | 2 +- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.cpp b/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.cpp index 8bd8ee1..5bced31 100755 --- a/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.cpp +++ b/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.cpp @@ -42,7 +42,7 @@ InputMethodContextEfl::InputMethodContextEfl(EwkViewImpl* viewImpl, PassOwnPtrm_viewImpl->page()->focusedFrame() || !inputMethodContext->m_focused) return; - if (!inputMethodContext->m_handleKeyDownEvent) - inputMethodContext->requestFakeKeyEvent(); + inputMethodContext->requestFakeKeyEvent(); Ecore_IMF_Event_Delete_Surrounding* event = static_cast(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(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 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); diff --git a/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.h b/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.h index f95c79c..8c6698a 100755 --- a/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.h +++ b/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.h @@ -110,7 +110,7 @@ private: int m_state; WebCore::IntRect m_imeRect; int m_inputPickerType; - bool m_handleKeyDownEvent; + bool m_doNotHandleFakeKeyEvent; WebCore::Timer m_fakeKeyEventTimer; #endif }; -- 2.7.4