diff --git a/src/modules/comp/e_mod_comp.c b/src/modules/comp/e_mod_comp.c index 78183afe6..6dcb46c69 100644 --- a/src/modules/comp/e_mod_comp.c +++ b/src/modules/comp/e_mod_comp.c @@ -1618,6 +1618,7 @@ _e_mod_comp_win_shadow_setup(E_Comp_Win *cw) char buf[4096]; Eina_List *list = NULL, *l; Match *m; + Eina_Bool focus = EINA_FALSE, urgent = EINA_FALSE; const char *title = NULL, *name = NULL, *clas = NULL, *role = NULL; Ecore_X_Window_Type primary_type = ECORE_X_WINDOW_TYPE_UNKNOWN; @@ -1757,6 +1758,8 @@ _e_mod_comp_win_shadow_setup(E_Comp_Win *cw) continue; } } + focus = m->focus; + urgent = m->urgent; if (m->shadow_style) { snprintf(buf, sizeof(buf), "e/comp/%s", @@ -1797,11 +1800,11 @@ _e_mod_comp_win_shadow_setup(E_Comp_Win *cw) edje_object_signal_emit(cw->shobj, "e,state,shadow,off", "e"); } - if (cw->bd) + if (cw->bd || focus || urgent) { - if (cw->bd->focused) + if (focus || (cw->bd && cw->bd->focused)) edje_object_signal_emit(cw->shobj, "e,state,focus,on", "e"); - if (cw->bd->client.icccm.urgent) + if (urgent || (cw->bd && cw->bd->client.icccm.urgent)) edje_object_signal_emit(cw->shobj, "e,state,urgent,on", "e"); } if (cw->visible) diff --git a/src/modules/comp/e_mod_comp_cfdata.c b/src/modules/comp/e_mod_comp_cfdata.c index 286cfc058..4e1143b52 100644 --- a/src/modules/comp/e_mod_comp_cfdata.c +++ b/src/modules/comp/e_mod_comp_cfdata.c @@ -23,6 +23,8 @@ e_mod_comp_cfdata_edd_init(E_Config_DD **conf_edd, E_Config_DD **match_edd) E_CONFIG_VAL(D, T, argb, CHAR); E_CONFIG_VAL(D, T, fullscreen, CHAR); E_CONFIG_VAL(D, T, modal, CHAR); + E_CONFIG_VAL(D, T, focus, CHAR); + E_CONFIG_VAL(D, T, urgent, CHAR); E_CONFIG_VAL(D, T, shadow_style, STR); *conf_edd = E_CONFIG_DD_NEW("Comp_Config", Config); @@ -104,6 +106,12 @@ e_mod_comp_cfdata_config_new(void) mat->name = eina_stringshare_add("_e_popup_desklock"); mat->shadow_style = eina_stringshare_add("still"); + mat = E_NEW(Match, 1); + cfg->match.popups = eina_list_append(cfg->match.popups, mat); + mat->name = eina_stringshare_add("_e_popup_notification"); + mat->shadow_style = eina_stringshare_add("still"); + mat->focus = 1; + mat = E_NEW(Match, 1); cfg->match.popups = eina_list_append(cfg->match.popups, mat); mat->shadow_style = eina_stringshare_add("popup"); diff --git a/src/modules/comp/e_mod_comp_cfdata.h b/src/modules/comp/e_mod_comp_cfdata.h index 34a49276e..9d20a20c7 100644 --- a/src/modules/comp/e_mod_comp_cfdata.h +++ b/src/modules/comp/e_mod_comp_cfdata.h @@ -56,6 +56,8 @@ struct _Match char argb; // used for borders, overrides, popups, menus, 0 == don't use, 1 == is argb, -1 == not argb char fullscreen; // used for borders, 0 == don't use, 1 == is fullscreen, -1 == not fullscreen char modal; // used for borders, 0 == don't use, 1 == is modal, -1 == not modal + char focus; // used for setting focus state (on popups): 1 is focused, unset is use regular logic + char urgent; // used for setting urgent state (on popups): 1 is urgent, unset is use regular logic }; EAPI void e_mod_comp_cfdata_edd_init(E_Config_DD **conf_edd, E_Config_DD **match_edd);