From c53a6efc8ddd9c568c618d8891db48635854d5b4 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 18 May 2016 14:42:30 -0400 Subject: [PATCH] add client util function for detecting popups, block popups in ibar/tasks mainly a wayland issue where popup menus would cause the tasks gadget to grow and shrink uncontrollably --- src/bin/e_client.x | 20 ++++++++++++++++++++ src/modules/ibar/e_mod_main.c | 1 + src/modules/tasks/e_mod_main.c | 5 ++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/bin/e_client.x b/src/bin/e_client.x index 2a2785512..c2ec18cd1 100644 --- a/src/bin/e_client.x +++ b/src/bin/e_client.x @@ -76,6 +76,26 @@ e_client_util_ignored_get(const E_Client *ec) return ec->override || ec->input_only || ec->ignored; } +static inline Eina_Bool +e_client_util_is_popup(const E_Client *ec) +{ + if (!ec) return EINA_FALSE; + switch (ec->netwm.type) + { + case E_WINDOW_TYPE_MENU: + case E_WINDOW_TYPE_SPLASH: + case E_WINDOW_TYPE_DROPDOWN_MENU: + case E_WINDOW_TYPE_POPUP_MENU: + case E_WINDOW_TYPE_TOOLTIP: + case E_WINDOW_TYPE_NOTIFICATION: + case E_WINDOW_TYPE_COMBO: + case E_WINDOW_TYPE_DND: + return EINA_TRUE; + default: break; + } + return EINA_FALSE; +} + static inline Eina_Bool e_client_util_desk_visible(const E_Client *ec, const E_Desk *desk) { diff --git a/src/modules/ibar/e_mod_main.c b/src/modules/ibar/e_mod_main.c index 5b5538edb..3f805ecf7 100644 --- a/src/modules/ibar/e_mod_main.c +++ b/src/modules/ibar/e_mod_main.c @@ -1299,6 +1299,7 @@ _ibar_icon_menu_client_add(IBar_Icon *ic, E_Client *ec) int w, h; if (ec->netwm.state.skip_taskbar || e_client_util_ignored_get(ec)) return EINA_FALSE; + if (e_client_util_is_popup(ec)) return EINA_FALSE; o = ic->menu->o_bg; it = edje_object_add(e_comp->evas); ic->client_objs = eina_list_append(ic->client_objs, it); diff --git a/src/modules/tasks/e_mod_main.c b/src/modules/tasks/e_mod_main.c index fa78b694f..e7fdfaaa3 100644 --- a/src/modules/tasks/e_mod_main.c +++ b/src/modules/tasks/e_mod_main.c @@ -369,7 +369,8 @@ _tasks_new(Evas *e, E_Zone *zone, const char *id) tasks->horizontal = 1; EINA_LIST_FOREACH(e_comp->clients, l, ec) { - if ((!e_client_util_ignored_get(ec)) && (!e_object_is_del(E_OBJECT(ec)))) + if ((!e_client_util_ignored_get(ec)) && (!e_object_is_del(E_OBJECT(ec))) && + (!e_client_util_is_popup(ec))) tasks->clients = eina_list_append(tasks->clients, ec); } @@ -892,6 +893,8 @@ _tasks_cb_event_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *e Eina_List *l; if (e_client_util_ignored_get(ev->ec) || e_object_is_del(E_OBJECT(ev->ec))) return ECORE_CALLBACK_RENEW; + if (e_client_util_is_popup(ev->ec)) return ECORE_CALLBACK_RENEW; + EINA_LIST_FOREACH(tasks_config->tasks, l, tasks) { if ((!tasks->clients) || (!eina_list_data_find(tasks->clients, ev->ec)))