From 9a2e89c61cdd09e6a1cec458ba09a093eeed8618 Mon Sep 17 00:00:00 2001 From: "Mun, Gwan-gyeong" Date: Tue, 24 Feb 2015 21:52:34 +0900 Subject: [PATCH] 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 --- src/e_mod_keyboard.c | 29 +++++++++++++++++++++++++++++ src/e_mod_main.c | 12 ++++++++++++ 2 files changed, 41 insertions(+) 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, -- 2.7.4