On Wed, May 26, 2010 at 3:45 PM, Christopher Michael <cpmicha...@comcast.net> wrote: > Hi all, > > I ran into a snafu wrt acpi stuff. Keep in mind that some of the things > mentioned here are not in svn yet. I'll try to iterate the short version: > > acpi bindings get added to e_config. When e_acpi is initialized, we > create event handlers for the events specified in e_config so that when > the event fires we can call any existing binding(s) (ex: When Adapter is > unplugged, dim the screen. So we create a handler for the > acpi_ac_adapter event). In e_config, we will potentially have two > acpi_ac_adapter events...one for plugged (dim the screen), one for > unplugged (undim the screen). > > The problem that I ran into is this: > > During acpi_init, when creating the event_handlers for ac_adapter, two > event_handlers get created (plugged & unplugged). The problem is that > because 2 handlers get created, when the ac_adapter changes, the events > are firing twice :( (ex: ac_adapter is unplugged, event fires to dim the > screen), but because 2 event handlers were created the event gets fired > again....so now we are getting two calls to dim the screen, even tho the > second "handler" is really for undim. > > The second handler is really for when ac_adapter gets plugged back in, > but due to the nature of how devices are handled in acpi, we don't have > separate E_EVENT_ACPI's for adapter. This could be fixed by > adding/changing E_EVENT_ACPI_AC_ADAPTER_PLUGGED/UNPLUGGED, but this > would also require E_EVENT_ACPI's to be created for every possible > device state: (ie: battery_charging, battery_removed, etc, etc). > > Obviously, I am against this approach as we really have no way of > knowing all the possible states that any given device supports...hence > why I took the generic approach of using one E_EVENT_ACPI for a given > device, and passing it some params that could then be acted on (ie: when > the ac_adapter event fires, it's "params" will be 0 or 1 depending on > adapter state, lid event has "params" of 0 or 1 for open/closed, etc, etc). > > What I would like to do is add an ecore_event_handler_type_get function > because the Ecore_Event_Handler struct is not exposed via API. > > Reasoning here is: we add the event handlers to a list during init, so > what I could do is before adding those handlers to the list, I could > iterate the list and check that a handler for that type has already been > added, and skip it, etc, etc. > > Would anyone be against the addition of ecore_event_handler_type_get ?? > If so, are there any thoughts on a better approach to this problem ??
I'm not sure I understand what you mean. This situation should be similar to others we already have, like ECORE_EVENT_SIGNAL_EXIT that carries in the event structure the reason of the event (see struct _Ecore_Event_Signal_Exit). I see no problem registering twice the same event, just the callbacks need to handle it differently, like for plug you use func1 and for unplug you use func2, they would do: if (!ev->plug) return and if (ev->plug) return respectively. -- Gustavo Sverzut Barbieri http://profusion.mobi embedded systems -------------------------------------- MSN: barbi...@gmail.com Skype: gsbarbieri Mobile: +55 (19) 9225-2202 ------------------------------------------------------------------------------ _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel