From 834f5480b46846844970850c57b6b1c1b7570ab7 Mon Sep 17 00:00:00 2001 From: Boram Bae Date: Fri, 16 Sep 2022 14:32:45 +0900 Subject: [PATCH 1/2] Fix input panel bugs * Resolve #346. * Corrects deleting character in text composition. * Now, filter makes the key focus move work properly, so no longer need to ignore specific key event handling. Signed-off-by: Boram Bae --- .../tizen/tizen_input_method_context.cc | 64 ++++++------------- .../tizen/tizen_input_method_context.h | 2 - 2 files changed, 19 insertions(+), 47 deletions(-) diff --git a/shell/platform/tizen/tizen_input_method_context.cc b/shell/platform/tizen/tizen_input_method_context.cc index 79ad734d3db49..dfbd385a17735 100644 --- a/shell/platform/tizen/tizen_input_method_context.cc +++ b/shell/platform/tizen/tizen_input_method_context.cc @@ -83,7 +83,7 @@ Ecore_IMF_Keyboard_Locks EcoreInputModifiersToEcoreImfLocks( } template -T EcoreEventKeyToEcoreImfEvent(Ecore_Event_Key* event, const char* dev_name) { +T EcoreEventKeyToEcoreImfEvent(Ecore_Event_Key* event) { T imf_event; imf_event.keyname = event->keyname; @@ -91,11 +91,25 @@ T EcoreEventKeyToEcoreImfEvent(Ecore_Event_Key* event, const char* dev_name) { imf_event.string = event->string; imf_event.compose = event->compose; imf_event.timestamp = event->timestamp; + imf_event.keycode = event->keycode; + imf_event.modifiers = EcoreInputModifiersToEcoreImfModifiers(event->modifiers); imf_event.locks = EcoreInputModifiersToEcoreImfLocks(event->modifiers); - imf_event.dev_name = dev_name; - imf_event.keycode = event->keycode; + + if (event->dev) { + imf_event.dev_name = ecore_device_name_get(event->dev) + ? ecore_device_name_get(event->dev) + : ""; + imf_event.dev_class = + static_cast(ecore_device_class_get(event->dev)); + imf_event.dev_subclass = static_cast( + ecore_device_subclass_get(event->dev)); + } else { + imf_event.dev_name = ""; + imf_event.dev_class = ECORE_IMF_DEVICE_CLASS_NONE; + imf_event.dev_subclass = ECORE_IMF_DEVICE_SUBCLASS_NONE; + } return imf_event; } @@ -144,30 +158,15 @@ bool TizenInputMethodContext::HandleEcoreEventKey(Ecore_Event_Key* event, bool is_down) { FT_ASSERT(imf_context_); FT_ASSERT(event); -#ifdef WEARABLE_PROFILE - // Hardware keyboard is not supported on watch devices. - const char* device_name = "ime"; - bool is_ime = true; -#else - const char* device_name = ecore_device_name_get(event->dev); - bool is_ime = device_name ? strcmp(device_name, "ime") == 0 : true; -#endif - - if (ShouldIgnoreKey(event->key, is_ime)) { - return false; - } - if (is_down) { Ecore_IMF_Event_Key_Down imf_event = - EcoreEventKeyToEcoreImfEvent(event, - device_name); + EcoreEventKeyToEcoreImfEvent(event); return ecore_imf_context_filter_event( imf_context_, ECORE_IMF_EVENT_KEY_DOWN, reinterpret_cast(&imf_event)); } else { Ecore_IMF_Event_Key_Up imf_event = - EcoreEventKeyToEcoreImfEvent(event, - device_name); + EcoreEventKeyToEcoreImfEvent(event); return ecore_imf_context_filter_event( imf_context_, ECORE_IMF_EVENT_KEY_UP, reinterpret_cast(&imf_event)); @@ -176,10 +175,6 @@ bool TizenInputMethodContext::HandleEcoreEventKey(Ecore_Event_Key* event, bool TizenInputMethodContext::HandleEvasEventKeyDown( Evas_Event_Key_Down* event) { - if (ShouldIgnoreKey(event->key, true)) { - return false; - } - Ecore_IMF_Event_Key_Down imf_event; ecore_imf_evas_event_key_down_wrap(event, &imf_event); @@ -189,10 +184,6 @@ bool TizenInputMethodContext::HandleEvasEventKeyDown( } bool TizenInputMethodContext::HandleEvasEventKeyUp(Evas_Event_Key_Up* event) { - if (ShouldIgnoreKey(event->key, true)) { - return false; - } - Ecore_IMF_Event_Key_Up imf_event; ecore_imf_evas_event_key_up_wrap(event, &imf_event); @@ -363,21 +354,4 @@ void TizenInputMethodContext::SetInputPanelOptions() { imf_context_, ECORE_IMF_INPUT_PANEL_LANG_AUTOMATIC); } -bool TizenInputMethodContext::ShouldIgnoreKey(std::string key, bool is_ime) { - // The below keys should be handled by the flutter framework. - if (is_ime && (key == "Left" || key == "Right" || key == "Up" || - key == "Down" || key == "End" || key == "Home" || - key == "BackSpace" || key == "Delete")) { - return true; - } -#ifdef TV_PROFILE - // The Select key should be handled in the TextInputChannel. - if (is_ime && key == "Select") { - return true; - } -#endif - - return false; -} - } // namespace flutter diff --git a/shell/platform/tizen/tizen_input_method_context.h b/shell/platform/tizen/tizen_input_method_context.h index ff9913605a25e..b94ddb1538a09 100644 --- a/shell/platform/tizen/tizen_input_method_context.h +++ b/shell/platform/tizen/tizen_input_method_context.h @@ -70,8 +70,6 @@ class TizenInputMethodContext { void SetContextOptions(); void SetInputPanelOptions(); - bool ShouldIgnoreKey(std::string key, bool is_ime); - Ecore_IMF_Context* imf_context_ = nullptr; OnCommit on_commit_; OnPreeditChanged on_preedit_changed_; From a25d7c0339279b494f0b4863c25de680080df84e Mon Sep 17 00:00:00 2001 From: Boram Bae Date: Fri, 16 Sep 2022 15:33:28 +0900 Subject: [PATCH 2/2] Update based on review Signed-off-by: Boram Bae --- shell/platform/tizen/tizen_input_method_context.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/shell/platform/tizen/tizen_input_method_context.cc b/shell/platform/tizen/tizen_input_method_context.cc index dfbd385a17735..02505561a9419 100644 --- a/shell/platform/tizen/tizen_input_method_context.cc +++ b/shell/platform/tizen/tizen_input_method_context.cc @@ -98,9 +98,8 @@ T EcoreEventKeyToEcoreImfEvent(Ecore_Event_Key* event) { imf_event.locks = EcoreInputModifiersToEcoreImfLocks(event->modifiers); if (event->dev) { - imf_event.dev_name = ecore_device_name_get(event->dev) - ? ecore_device_name_get(event->dev) - : ""; + const char* device_name = ecore_device_name_get(event->dev); + imf_event.dev_name = device_name ? device_name : ""; imf_event.dev_class = static_cast(ecore_device_class_get(event->dev)); imf_event.dev_subclass = static_cast(