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

Reply via email to