From: Mun, Gwan-gyeong Date: Tue, 24 Feb 2015 12:52:34 +0000 (+0900) Subject: 1. Fix virtual keyboard magnifier window's layout mechanism. X-Git-Tag: accepted/tizen/common/20150224.150915~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F77%2F35777%2F1;p=platform%2Fcore%2Fuifw%2Fe-mod-tizen-wm-policy.git 1. Fix virtual keyboard magnifier window's layout mechanism. : 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 --- diff --git a/src/e_mod_keyboard.c b/src/e_mod_keyboard.c index a41c21e..50ce074 100644 --- a/src/e_mod_keyboard.c +++ b/src/e_mod_keyboard.c @@ -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; } diff --git a/src/e_mod_main.c b/src/e_mod_main.c index 3d0dc5a..80b8bba 100644 --- a/src/e_mod_main.c +++ b/src/e_mod_main.c @@ -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,