Fixed On Mon, May 22, 2017 at 1:20 PM Stephen Houston <smhousto...@gmail.com> wrote:
> On Mon, May 22, 2017 at 1:18 PM Stephen Houston <smhousto...@gmail.com> > wrote: > >> On Mon, May 22, 2017 at 1:05 PM Mike Blumenkrantz < >> michael.blumenkra...@gmail.com> wrote: >> >>> On Mon, May 22, 2017 at 2:02 PM Stephen 'Okra' Houston < >>> smhousto...@gmail.com> wrote: >>> >>> > okra pushed a commit to branch master. >>> > >>> > >>> > >>> http://git.enlightenment.org/core/enlightenment.git/commit/?id=171686f0a91339443353288b3e005fbc0503fc1b >>> > >>> > commit 171686f0a91339443353288b3e005fbc0503fc1b >>> > Author: Stephen 'Okra' Houston <smhousto...@gmail.com> >>> > Date: Mon May 22 13:01:12 2017 -0500 >>> > >>> > Luncher Improvements: Don't add multiple global handlers for the >>> same >>> > events and don't show preview immediately for iconic. >>> > >>> > This fixes T5377 >>> > --- >>> > src/modules/luncher/bar.c | 92 >>> > +++++++++++++---------------------------------- >>> > 1 file changed, 24 insertions(+), 68 deletions(-) >>> > >>> > diff --git a/src/modules/luncher/bar.c b/src/modules/luncher/bar.c >>> > index 20c082d..5f50663 100644 >>> > --- a/src/modules/luncher/bar.c >>> > +++ b/src/modules/luncher/bar.c >>> > @@ -33,29 +33,6 @@ _bar_aspect(Instance *inst) >>> > } >>> > >>> > static Eina_Bool >>> > -_bar_check_for_iconic(Icon *ic) >>> > -{ >>> > - Eina_List *l, *ll, *clients = NULL; >>> > - E_Client *ec; >>> > - E_Exec_Instance *ex; >>> > - >>> > - EINA_LIST_FOREACH(ic->execs, l, ex) >>> > - { >>> > - EINA_LIST_FOREACH(ex->clients, ll, ec) >>> > - clients = eina_list_append(clients, ec); >>> > - } >>> > - EINA_LIST_FOREACH(ic->clients, l, ec) >>> > - clients = eina_list_append(clients, ec); >>> > - >>> > - EINA_LIST_FREE(clients, ec) >>> > - { >>> > - if (ec->iconic) >>> > - return EINA_TRUE; >>> > - } >>> > - return EINA_FALSE; >>> > -} >>> > - >>> > -static Eina_Bool >>> > _bar_check_for_duplicates(Icon *ic, E_Client *dupe) >>> > { >>> > Eina_List *l, *ll, *clients = NULL; >>> > @@ -990,8 +967,6 @@ _bar_icon_mouse_in(void *data, Evas *e EINA_UNUSED, >>> > Evas_Object *obj, void *even >>> > clients = EINA_TRUE; >>> > if (clients && ic->inst->current_preview && >>> > !ic->inst->current_preview_menu) >>> > _bar_icon_preview_show(ic); >>> > - else if (_bar_check_for_iconic(ic)) >>> > - _bar_icon_preview_show(ic); >>> > else if (clients && !ic->inst->current_preview) >>> > ic->mouse_in_timer = ecore_timer_loop_add(0.3, >>> > _bar_icon_preview_show, ic); >>> > } >>> > @@ -1014,8 +989,6 @@ _bar_exec_new_show(void *data, Evas *e >>> EINA_UNUSED, >>> > Evas_Object *obj, void *even >>> > E_FREE_FUNC(ic->mouse_in_timer, ecore_timer_del); >>> > if (ic->inst->current_preview && >>> > !ic->inst->current_preview_menu) >>> > _bar_icon_preview_show(ic); >>> > - else if (_bar_check_for_iconic(ic)) >>> > - _bar_icon_preview_show(ic); >>> > else if (!ic->inst->current_preview) >>> > ic->mouse_in_timer = ecore_timer_loop_add(0.3, >>> > _bar_icon_preview_show, ic); >>> > } >>> > @@ -1783,6 +1756,7 @@ static void >>> > _bar_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj >>> EINA_UNUSED, >>> > void *event_data EINA_UNUSED) >>> > { >>> > Instance *inst = data; >>> > + Ecore_Event_Handler *handler; >>> > >>> > inst->main_del = EINA_TRUE; >>> > _bar_empty(inst); >>> > @@ -1792,6 +1766,11 @@ _bar_del(void *data, Evas *e EINA_UNUSED, >>> > Evas_Object *obj EINA_UNUSED, void *ev >>> > eina_hash_free(inst->icons_clients_hash); >>> > luncher_instances = eina_list_remove(luncher_instances, inst); >>> > free(inst); >>> > + if (!eina_list_count(luncher_instances)) >>> > + { >>> > + EINA_LIST_FREE(handlers, handler) >>> > + E_FREE_FUNC(handler, ecore_event_handler_del); >>> > + } >>> > } >>> > >>> > static void >>> > @@ -1894,15 +1873,11 @@ _bar_removed_cb(void *data, Evas_Object *obj >>> > EINA_UNUSED, void *event_data) >>> > { >>> > Instance *inst = data; >>> > char buf[4096]; >>> > - Ecore_Event_Handler *handler; >>> > >>> > if (inst->o_main != event_data) return; >>> > if (e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s", >>> > inst->cfg->dir) >= sizeof(buf)) >>> > return; >>> > >>> > - EINA_LIST_FREE(handlers, handler) >>> > - E_FREE_FUNC(handler, ecore_event_handler_del); >>> > - >>> > E_FREE_FUNC(inst->iconify_provider, >>> e_comp_object_effect_mover_del); >>> > >>> > luncher_config->items = eina_list_remove(luncher_config->items, >>> > inst->cfg); >>> > @@ -2108,30 +2083,8 @@ bar_reorder(Instance *inst) >>> > EINTERN void >>> > bar_config_updated(Instance *inst) >>> > { >>> > - Ecore_Event_Handler *handler; >>> > const char *drop[] = { "enlightenment/desktop", >>> > "enlightenment/border", "text/uri-list" }; >>> > >>> > - EINA_LIST_FREE(handlers, handler) >>> > - E_FREE_FUNC(handler, ecore_event_handler_del); >>> > - >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIG_ICON_THEME, >>> > - _bar_cb_update_icons, NULL); >>> > - E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_ICON_CACHE_UPDATE, >>> > - _bar_cb_update_icons, NULL); >>> > - if (inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY) >>> > - { >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW, >>> > - _bar_cb_exec_new, NULL); >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW_CLIENT, >>> > - _bar_cb_exec_new, NULL); >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_PROPERTY, >>> > - _bar_cb_exec_client_prop, NULL); >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_DEL, >>> > - _bar_cb_exec_del, NULL); >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_REMOVE, >>> > - _bar_cb_client_remove, NULL); >>> > - } >>> > - >>> > if (!inst->iconify_provider && inst->cfg->type != >>> > E_LUNCHER_MODULE_LAUNCH_ONLY) >>> > { >>> > inst->iconify_provider = e_comp_object_effect_mover_add(80, >>> > "e,action,*iconify", >>> > @@ -2186,22 +2139,25 @@ bar_create(Evas_Object *parent, int *id, >>> > E_Gadget_Site_Orient orient EINA_UNUSED >>> > evas_object_smart_callback_add(parent, "gadget_removed", >>> > _bar_removed_cb, inst); >>> > evas_object_show(inst->o_main); >>> > >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIG_ICON_THEME, >>> > - _bar_cb_update_icons, NULL); >>> > - E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_ICON_CACHE_UPDATE, >>> > - _bar_cb_update_icons, NULL); >>> > - if (inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY) >>> > + if (!eina_list_count(handlers)) >>> > { >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW, >>> > - _bar_cb_exec_new, NULL); >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW_CLIENT, >>> > - _bar_cb_exec_new, NULL); >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_PROPERTY, >>> > - _bar_cb_exec_client_prop, NULL); >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_DEL, >>> > - _bar_cb_exec_del, NULL); >>> > - E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_REMOVE, >>> > - _bar_cb_client_remove, NULL); >>> > + E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIG_ICON_THEME, >>> > + _bar_cb_update_icons, NULL); >>> > + E_LIST_HANDLER_APPEND(handlers, >>> EFREET_EVENT_ICON_CACHE_UPDATE, >>> > + _bar_cb_update_icons, NULL); >>> > + if (inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY) >>> > + { >>> > >>> >>> If multiple gadgets exist and the first one fails this test then the >>> handlers can never be created. >>> >> >> If multiple gadgets exist, every one of them will call bar_create >> thus every one will run this check -- if the first one "fails" the test, >> then it creates the handlers. if it passes the test and skips the creation >> of the handlers, but the second gadget fails the test, then it will create >> the handlers. I'm not sure I'm seeing your point? >> > Nevermine -- I see the check you are talking about. The per instance > check, not the handlers check. You would indeed be correct. > >> >> >>> >>> > + E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW, >>> > + _bar_cb_exec_new, NULL); >>> > + E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW_CLIENT, >>> > + _bar_cb_exec_new, NULL); >>> > + E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_PROPERTY, >>> > + _bar_cb_exec_client_prop, NULL); >>> > + E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_DEL, >>> > + _bar_cb_exec_del, NULL); >>> > + E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_REMOVE, >>> > + _bar_cb_client_remove, NULL); >>> > + } >>> > } >>> > if (inst->cfg->id < 0) return inst->o_main; >>> > luncher_instances = eina_list_append(luncher_instances, inst); >>> > >>> > -- >>> > >>> > >>> > >>> >>> ------------------------------------------------------------------------------ >>> Check out the vibrant tech community on one of the world's most >>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>> _______________________________________________ >>> enlightenment-devel mailing list >>> enlightenment-devel@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel >>> >> ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel