Do not allow to show IME in no focus window 51/228651/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Tue, 24 Mar 2020 01:50:11 +0000 (10:50 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Tue, 24 Mar 2020 10:55:58 +0000 (19:55 +0900)
In case of no window focus, IME does not send key event and
ISF can't process back key and so on.

Change-Id: I095d70e093e40f502c5592130366e8c304279d7f
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
ism/extras/wayland_immodule/wayland_imcontext.c

index 8e36a59..3378543 100644 (file)
@@ -1391,6 +1391,11 @@ set_focus(Ecore_IMF_Context *ctx)
         return EINA_FALSE;
     }
 
+    if (!ecore_wl2_window_activated_get(imcontext->window)) {
+        LOGW("ctx : %p, window does not have focus", ctx);
+        return EINA_FALSE;
+    }
+
     Ecore_Wl2_Input *input = ecore_wl2_window_input_get(imcontext->window);
     if (!input) {
         LOGW("ctx : %p, Can't get Wl_Input", ctx);
@@ -1861,8 +1866,9 @@ show_input_panel(Ecore_IMF_Context *ctx)
            ecore_imf_context_input_panel_return_key_type_get (ctx),
            ecore_imf_context_input_panel_return_key_disabled_get (ctx),
            ecore_imf_context_autocapital_type_get (ctx));
-    LOGD ("client_window : %#lx, password mode : %d, prediction_allow : %d, mime_type : %s, input panel position x : %d, y : %d",
+    LOGD ("client_window : %#lx, Ecore_Wl2_Window : %p, password mode : %d, prediction_allow : %d, mime_type : %s, input panel position x : %d, y : %d",
            (unsigned long int)ecore_imf_context_client_window_get (ctx),
+           imcontext->window,
            (imcontext->content_hint & WL_TEXT_INPUT_CONTENT_HINT_SENSITIVE_DATA) ? 1 : 0,
            ecore_imf_context_prediction_allow_get (ctx),
            imcontext->mime_type,
@@ -3179,13 +3185,14 @@ wayland_im_context_client_window_set(Ecore_IMF_Context *ctx,
 {
     WaylandIMContext *imcontext = (WaylandIMContext *)ecore_imf_context_data_get(ctx);
 
-    LOGD("client window set (window: %p)", window);
+    LOGD("client window set (Ecore_Window: %p)", window);
 
     if (imcontext && window) {
         Ecore_Wl2_Display *wl2_display = ecore_wl2_connected_display_get(NULL);
 
         if (wl2_display)
             imcontext->window = ecore_wl2_display_window_find(wl2_display, (Ecore_Window)window);
+            LOGD("client Ecore_Wl2_Window : %p", imcontext->window);
 
         if (_ime_device && imcontext->window)
             _device_info_send (ecore_wl2_window_id_get (imcontext->window), EINA_TRUE);
@@ -3206,6 +3213,7 @@ wayland_im_context_client_canvas_set(Ecore_IMF_Context *ctx,
 
         if (wl2_display && !imcontext->window)
             imcontext->window = ecore_wl2_display_window_find(wl2_display, ecore_evas_window_get(ecore_evas_ecore_evas_get(canvas)));
+            LOGD("client Ecore_Wl2_Window : %p", imcontext->window);
 
         if (_ime_device && imcontext->window)
             _device_info_send (ecore_wl2_window_id_get (imcontext->window), EINA_TRUE);