1. Fix virtual keyboard magnifier window's layout mechanism. 77/35777/1
authorMun, Gwan-gyeong <kk.moon@samsung.com>
Tue, 24 Feb 2015 12:52:34 +0000 (21:52 +0900)
committerMun, Gwan-gyeong <kk.moon@samsung.com>
Tue, 24 Feb 2015 12:52:34 +0000 (21:52 +0900)
  : Do not follow enlightenment core's transient-for layout policy.
2. If icccm.class_name is null then check wm_class property.

Change-Id: Iae1efed3f137676edbe646c5eacdcc9f2d4d671b

src/e_mod_keyboard.c
src/e_mod_main.c

index a41c21e..50ce074 100644 (file)
@@ -8,6 +8,20 @@ e_mod_pol_client_is_keyboard(E_Client *ec)
    E_OBJECT_TYPE_CHECK_RETURN(ec, E_CLIENT_TYPE, EINA_FALSE);
 
    if (ec->vkbd.vkbd) return EINA_TRUE;
+   else
+     {
+       char *nname = NULL, *nclass = NULL;
+       Eina_Bool ret = EINA_FALSE;
+       ecore_x_icccm_name_class_get(e_client_util_win_get(ec), &nname, &nclass);
+       if ((nname) && (!strcmp(nname,"Virtual Keyboard")) &&
+           (nclass) && (!strcmp(nclass, "ISF")))
+         ret = EINA_TRUE;
+
+       if (nname) free(nname);
+       if (nclass) free(nclass);
+
+       if (ret) return ret;
+     }
 
    return EINA_FALSE;
 }
@@ -24,6 +38,21 @@ e_mod_pol_client_is_keyboard_sub(E_Client *ec)
        (!strcmp(ec->icccm.class, "ISF")))
      return EINA_TRUE;
 
+   if (!ec->icccm.class)
+     {
+       char *nname = NULL, *nclass = NULL;
+       Eina_Bool ret = EINA_FALSE;
+       ecore_x_icccm_name_class_get(e_client_util_win_get(ec), &nname, &nclass);
+       if ((nname) && (!strcmp(nname,"Key Magnifier")) &&
+           (nclass) && (!strcmp(nclass, "ISF")))
+         ret = EINA_TRUE;
+
+       if (nname) free(nname);
+       if (nclass) free(nclass);
+
+       if (ret) return ret;
+     }
+
    return EINA_FALSE;
 }
 
index 3d0dc5a..80b8bba 100644 (file)
@@ -39,6 +39,7 @@ static Eina_Bool   _pol_client_normal_check(E_Client *ec);
 static void        _pol_client_update(Pol_Client *pc);
 static void        _pol_client_launcher_set(Pol_Client *pc);
 
+static void        _pol_hook_client_eval_pre_new_client(void *d EINA_UNUSED, E_Client *ec);
 static void        _pol_hook_client_eval_pre_fetch(void *d EINA_UNUSED, E_Client *ec);
 static void        _pol_hook_client_eval_pre_post_fetch(void *d EINA_UNUSED, E_Client *ec);
 static void        _pol_hook_client_eval_post_fetch(void *d EINA_UNUSED, E_Client *ec);
@@ -273,6 +274,15 @@ _pol_client_update(Pol_Client *pc)
 }
 
 static void
+_pol_hook_client_eval_pre_new_client(void *d EINA_UNUSED, E_Client *ec)
+{
+   if (e_object_is_del(E_OBJECT(ec))) return;
+
+   if (e_mod_pol_client_is_keyboard_sub(ec))
+     ec->placed = 1;
+}
+
+static void
 _pol_hook_client_eval_pre_fetch(void *d EINA_UNUSED, E_Client *ec)
 {
    if (e_object_is_del(E_OBJECT(ec))) return;
@@ -938,6 +948,8 @@ e_modapi_init(E_Module *m)
    E_LIST_HANDLER_APPEND(handlers, E_EVENT_ZONE_ROTATION_CHANGE_BEGIN,
                          _pol_cb_zone_rotation_change_begin, NULL);
 
+   E_CLIENT_HOOK_APPEND(hooks, E_CLIENT_HOOK_EVAL_PRE_NEW_CLIENT,
+                        _pol_hook_client_eval_pre_new_client, NULL);
    E_CLIENT_HOOK_APPEND(hooks, E_CLIENT_HOOK_EVAL_PRE_FETCH,
                         _pol_hook_client_eval_pre_fetch, NULL);
    E_CLIENT_HOOK_APPEND(hooks, E_CLIENT_HOOK_EVAL_PRE_POST_FETCH,