Add bindings for ACPI.

Add acpi bindings to config.
Add handlers in e_acpi for common/default acpi events.
Add actions for some missing ACPI events.
 - NB: Dim/Undim screen do nothing currently except a printf.



SVN revision: 49309
This commit is contained in:
Christopher Michael 2010-05-29 19:57:13 +00:00
parent 4d1f37af1a
commit d2d1e49bf5
7 changed files with 292 additions and 26 deletions

View File

@ -24,6 +24,7 @@ static int _e_acpi_cb_server_del(void *data __UNUSED__, int type __UNUSED__, voi
static int _e_acpi_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event);
static void _e_acpi_cb_event_free(void *data __UNUSED__, void *event);
static int _e_acpi_lid_status_get(const char *device, const char *bus);
static int _e_acpi_cb_event(void *data __UNUSED__, int type __UNUSED__, void *event);
/* local variables */
static Ecore_Con_Server *_e_acpid = NULL;
@ -98,6 +99,24 @@ e_acpi_init(void)
eina_list_append(_e_acpid_hdls,
ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA,
_e_acpi_cb_server_data, NULL));
/* Add handlers for standard acpi events */
_e_acpid_hdls =
eina_list_append(_e_acpid_hdls,
ecore_event_handler_add(E_EVENT_ACPI_AC_ADAPTER,
_e_acpi_cb_event, NULL));
_e_acpid_hdls =
eina_list_append(_e_acpid_hdls,
ecore_event_handler_add(E_EVENT_ACPI_LID,
_e_acpi_cb_event, NULL));
_e_acpid_hdls =
eina_list_append(_e_acpid_hdls,
ecore_event_handler_add(E_EVENT_ACPI_POWER,
_e_acpi_cb_event, NULL));
_e_acpid_hdls =
eina_list_append(_e_acpid_hdls,
ecore_event_handler_add(E_EVENT_ACPI_SLEEP,
_e_acpi_cb_event, NULL));
return 1;
}
@ -274,3 +293,13 @@ _e_acpi_lid_status_get(const char *device, const char *bus)
else
return E_ACPI_LID_UNKNOWN;
}
static int
_e_acpi_cb_event(void *data __UNUSED__, int type __UNUSED__, void *event)
{
E_Event_Acpi *ev;
ev = event;
e_bindings_acpi_event_handle(E_BINDING_CONTEXT_NONE, NULL, ev);
return 1;
}

View File

@ -71,6 +71,13 @@
}
#define ACT_FN_END_KEY(act) \
static void _e_actions_act_##act##_end_key(E_Object *obj, const char *params, Ecore_Event_Key *ev)
#define ACT_GO_ACPI(name) \
{ \
act = e_action_add(#name); \
if (act) act->func.go_acpi = _e_actions_act_##name##_go_acpi; \
}
#define ACT_FN_GO_ACPI(act) \
static void _e_actions_act_##act##_go_acpi(E_Object *obj, const char *params, E_Event_Acpi *ev)
/* local subsystem functions */
static void _e_action_free(E_Action *act);
@ -2497,6 +2504,16 @@ ACT_FN_END_MOUSE(delayed_action)
_delayed_action_mouse_del(obj, params, ev);
}
ACT_FN_GO_ACPI(dim_screen)
{
printf("Dim Screen\n");
}
ACT_FN_GO_ACPI(undim_screen)
{
printf("Undim Screen\n");
}
/* local subsystem globals */
static Eina_Hash *actions = NULL;
static Eina_List *action_list = NULL;
@ -2915,6 +2932,14 @@ e_actions_init(void)
ACT_END_KEY(delayed_action);
ACT_END_MOUSE(delayed_action);
ACT_GO_ACPI(dim_screen);
e_action_predef_name_set(_("Acpi"), _("Dim Screen"), "dim_screen",
NULL, NULL, 0);
ACT_GO_ACPI(undim_screen);
e_action_predef_name_set(_("Acpi"), _("Undim Screen"), "undim_screen",
NULL, NULL, 0);
return 1;
}

View File

@ -15,20 +15,22 @@ typedef struct _E_Action_Group E_Action_Group;
struct _E_Action
{
E_Object e_obj_inherit;
E_Object e_obj_inherit;
const char *name;
struct {
void (*go) (E_Object *obj, const char *params);
void (*go_mouse) (E_Object *obj, const char *params, Ecore_Event_Mouse_Button *ev);
void (*go_wheel) (E_Object *obj, const char *params, Ecore_Event_Mouse_Wheel *ev);
void (*go_edge) (E_Object *obj, const char *params, E_Event_Zone_Edge *ev);
void (*go_key) (E_Object *obj, const char *params, Ecore_Event_Key *ev);
void (*go_signal) (E_Object *obj, const char *params, const char *sig, const char *src);
void (*end) (E_Object *obj, const char *params);
void (*end_mouse) (E_Object *obj, const char *params, Ecore_Event_Mouse_Button *ev);
void (*end_key) (E_Object *obj, const char *params, Ecore_Event_Key *ev);
} func;
struct
{
void (*go) (E_Object *obj, const char *params);
void (*go_mouse) (E_Object *obj, const char *params, Ecore_Event_Mouse_Button *ev);
void (*go_wheel) (E_Object *obj, const char *params, Ecore_Event_Mouse_Wheel *ev);
void (*go_edge) (E_Object *obj, const char *params, E_Event_Zone_Edge *ev);
void (*go_key) (E_Object *obj, const char *params, Ecore_Event_Key *ev);
void (*go_signal) (E_Object *obj, const char *params, const char *sig, const char *src);
void (*go_acpi) (E_Object *obj, const char *params, E_Event_Acpi *ev);
void (*end) (E_Object *obj, const char *params);
void (*end_mouse) (E_Object *obj, const char *params, Ecore_Event_Mouse_Button *ev);
void (*end_key) (E_Object *obj, const char *params, Ecore_Event_Key *ev);
} func;
};
struct _E_Action_Description

View File

@ -10,18 +10,20 @@ static void _e_bindings_key_free(E_Binding_Key *bind);
static void _e_bindings_edge_free(E_Binding_Edge *bind);
static void _e_bindings_signal_free(E_Binding_Signal *bind);
static void _e_bindings_wheel_free(E_Binding_Wheel *bind);
static void _e_bindings_acpi_free(E_Binding_Acpi *bind);
static int _e_bindings_context_match(E_Binding_Context bctxt, E_Binding_Context ctxt);
static E_Binding_Modifier _e_bindings_modifiers(unsigned int modifiers);
static int _e_ecore_modifiers(E_Binding_Modifier modifiers);
static int _e_bindings_edge_cb_timer(void *data);
static int _e_bindings_edge_cb_timer(void *data);
/* local subsystem globals */
static Eina_List *mouse_bindings = NULL;
static Eina_List *key_bindings = NULL;
static Eina_List *edge_bindings = NULL;
static Eina_List *mouse_bindings = NULL;
static Eina_List *key_bindings = NULL;
static Eina_List *edge_bindings = NULL;
static Eina_List *signal_bindings = NULL;
static Eina_List *wheel_bindings = NULL;
static Eina_List *wheel_bindings = NULL;
static Eina_List *acpi_bindings = NULL;
typedef struct _E_Binding_Edge_Data E_Binding_Edge_Data;
@ -43,6 +45,7 @@ e_bindings_init(void)
E_Config_Binding_Wheel *ebw;
E_Config_Binding_Edge *ebe;
E_Config_Binding_Key *ebk;
E_Config_Binding_Acpi *eba;
Eina_List *l;
EINA_LIST_FOREACH(e_config->mouse_bindings, l, ebm)
@ -69,6 +72,7 @@ e_bindings_init(void)
(!strncmp(ebs->source, "e.event.resize.", 15)))
{
char params[32];
snprintf(params, sizeof(params), "resize_%s", ebs->params);
e_bindings_signal_add(ebs->context, "mouse,in", ebs->source, ebs->modifiers,
ebs->any_mod, "pointer_resize_push", params);
@ -81,6 +85,10 @@ e_bindings_init(void)
e_bindings_wheel_add(ebw->context, ebw->direction, ebw->z, ebw->modifiers,
ebw->any_mod, ebw->action, ebw->params);
EINA_LIST_FOREACH(e_config->acpi_bindings, l, eba)
e_bindings_acpi_add(eba->context, eba->type, eba->status,
eba->action, eba->params);
return 1;
}
@ -92,6 +100,7 @@ e_bindings_shutdown(void)
E_FREE_LIST(edge_bindings, _e_bindings_edge_free);
E_FREE_LIST(signal_bindings, _e_bindings_signal_free);
E_FREE_LIST(wheel_bindings, _e_bindings_wheel_free);
E_FREE_LIST(acpi_bindings, _e_bindings_acpi_free);
return 1;
}
@ -730,7 +739,7 @@ EAPI void
e_bindings_wheel_add(E_Binding_Context ctxt, int direction, int z, E_Binding_Modifier mod, int any_mod, const char *action, const char *params)
{
E_Binding_Wheel *bind;
bind = calloc(1, sizeof(E_Binding_Wheel));
bind->ctxt = ctxt;
bind->direction = direction;
@ -871,6 +880,83 @@ e_bindings_wheel_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event
return act;
}
EAPI void
e_bindings_acpi_add(E_Binding_Context ctxt, int type, int status, const char *action, const char *params)
{
E_Binding_Acpi *bind;
bind = E_NEW(E_Binding_Acpi, 1);
bind->ctxt = ctxt;
bind->type = type;
bind->status = status;
if (action) bind->action = eina_stringshare_add(action);
if (params) bind->params = eina_stringshare_add(params);
acpi_bindings = eina_list_append(acpi_bindings, bind);
}
EAPI void
e_bindings_acpi_del(E_Binding_Context ctxt, int type, int status, const char *action, const char *params)
{
E_Binding_Acpi *bind;
Eina_List *l;
EINA_LIST_FOREACH(acpi_bindings, l, bind)
{
if ((bind->ctxt == ctxt) &&
(bind->type == type) && (bind->status == status) &&
(((bind->action) && (action) && (!strcmp(bind->action, action))) ||
((!bind->action) && (!action))) &&
(((bind->params) && (params) && (!strcmp(bind->params, params))) ||
((!bind->params) && (!params))))
{
_e_bindings_acpi_free(bind);
acpi_bindings = eina_list_remove_list(acpi_bindings, l);
break;
}
}
}
EAPI E_Action *
e_bindings_acpi_find(E_Binding_Context ctxt, E_Object *obj, E_Event_Acpi *ev, E_Binding_Acpi **bind_ret)
{
E_Binding_Acpi *bind;
Eina_List *l;
EINA_LIST_FOREACH(acpi_bindings, l, bind)
{
if ((bind->type == ev->type) && (bind->status == ev->status))
{
if (_e_bindings_context_match(bind->ctxt, ctxt))
{
E_Action *act;
act = e_action_find(bind->action);
if (bind_ret) *bind_ret = bind;
return act;
}
}
}
return NULL;
}
EAPI E_Action *
e_bindings_acpi_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event_Acpi *ev)
{
E_Action *act;
E_Binding_Acpi *bind;
act = e_bindings_acpi_find(ctxt, obj, ev, &bind);
if (act)
{
if (act->func.go_acpi)
act->func.go_acpi(obj, bind->params, ev);
else if (act->func.go)
act->func.go(obj, bind->params);
return act;
}
return act;
}
/* local subsystem functions */
static void
@ -923,6 +1009,14 @@ _e_bindings_wheel_free(E_Binding_Wheel *bind)
free(bind);
}
static void
_e_bindings_acpi_free(E_Binding_Acpi *bind)
{
if (bind->action) eina_stringshare_del(bind->action);
if (bind->params) eina_stringshare_del(bind->params);
E_FREE(bind);
}
static int
_e_bindings_context_match(E_Binding_Context bctxt, E_Binding_Context ctxt)
{

View File

@ -35,6 +35,7 @@ typedef struct _E_Binding_Key E_Binding_Key;
typedef struct _E_Binding_Edge E_Binding_Edge;
typedef struct _E_Binding_Signal E_Binding_Signal;
typedef struct _E_Binding_Wheel E_Binding_Wheel;
typedef struct _E_Binding_Acpi E_Binding_Acpi;
#else
#ifndef E_BINDINGS_H
@ -95,6 +96,13 @@ struct _E_Binding_Wheel
const char *params;
};
struct _E_Binding_Acpi
{
E_Binding_Context ctxt;
int type, status;
const char *action, *params;
};
EAPI int e_bindings_init(void);
EAPI int e_bindings_shutdown(void);
@ -135,5 +143,10 @@ EAPI void e_bindings_wheel_ungrab(E_Binding_Context ctxt, Ecore_X_Window
EAPI E_Action *e_bindings_wheel_find(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Wheel *ev, E_Binding_Wheel **bind_ret);
EAPI E_Action *e_bindings_wheel_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Wheel *ev);
EAPI void e_bindings_acpi_add(E_Binding_Context ctxt, int type, int status, const char *action, const char *params);
EAPI void e_bindings_acpi_del(E_Binding_Context ctxt, int type, int status, const char *action, const char *params);
EAPI E_Action *e_bindings_acpi_find(E_Binding_Context ctxt, E_Object *obj, E_Event_Acpi *ev, E_Binding_Acpi **bind_ret);
EAPI E_Action *e_bindings_acpi_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event_Acpi *ev);
#endif
#endif

View File

@ -16,8 +16,9 @@ static int _e_config_revisions = 0;
/* local subsystem functions */
static void _e_config_save_cb(void *data);
static void _e_config_free(E_Config *cfg);
static int _e_config_cb_timer(void *data);
static int _e_config_eet_close_handle(Eet_File *ef, char *file);
static int _e_config_cb_timer(void *data);
static int _e_config_eet_close_handle(Eet_File *ef, char *file);
static void _e_config_acpi_bindings_add(void);
/* local subsystem globals */
static int _e_config_save_block = 0;
@ -34,6 +35,7 @@ static E_Config_DD *_e_config_bindings_key_edd = NULL;
static E_Config_DD *_e_config_bindings_edge_edd = NULL;
static E_Config_DD *_e_config_bindings_signal_edd = NULL;
static E_Config_DD *_e_config_bindings_wheel_edd = NULL;
static E_Config_DD *_e_config_bindings_acpi_edd = NULL;
static E_Config_DD *_e_config_path_append_edd = NULL;
static E_Config_DD *_e_config_desktop_bg_edd = NULL;
static E_Config_DD *_e_config_desktop_name_edd = NULL;
@ -358,6 +360,18 @@ e_config_init(void)
E_CONFIG_VAL(D, T, action, STR);
E_CONFIG_VAL(D, T, params, STR);
_e_config_bindings_acpi_edd = E_CONFIG_DD_NEW("E_Config_Binding_Acpi",
E_Config_Binding_Acpi);
#undef T
#undef D
#define T E_Config_Binding_Acpi
#define D _e_config_bindings_acpi_edd
E_CONFIG_VAL(D, T, context, INT);
E_CONFIG_VAL(D, T, type, INT);
E_CONFIG_VAL(D, T, status, INT);
E_CONFIG_VAL(D, T, action, STR);
E_CONFIG_VAL(D, T, params, STR);
_e_config_remember_edd = E_CONFIG_DD_NEW("E_Remember", E_Remember);
#undef T
#undef D
@ -512,6 +526,7 @@ e_config_init(void)
E_CONFIG_LIST(D, T, edge_bindings, _e_config_bindings_edge_edd); /**/
E_CONFIG_LIST(D, T, signal_bindings, _e_config_bindings_signal_edd); /**/
E_CONFIG_LIST(D, T, wheel_bindings, _e_config_bindings_wheel_edd); /**/
E_CONFIG_LIST(D, T, acpi_bindings, _e_config_bindings_acpi_edd); /**/
E_CONFIG_LIST(D, T, path_append_data, _e_config_path_append_edd); /**/
E_CONFIG_LIST(D, T, path_append_images, _e_config_path_append_edd); /**/
E_CONFIG_LIST(D, T, path_append_fonts, _e_config_path_append_edd); /**/
@ -754,6 +769,7 @@ e_config_shutdown(void)
E_CONFIG_DD_FREE(_e_config_bindings_edge_edd);
E_CONFIG_DD_FREE(_e_config_bindings_signal_edd);
E_CONFIG_DD_FREE(_e_config_bindings_wheel_edd);
E_CONFIG_DD_FREE(_e_config_bindings_acpi_edd);
E_CONFIG_DD_FREE(_e_config_path_append_edd);
E_CONFIG_DD_FREE(_e_config_desktop_bg_edd);
E_CONFIG_DD_FREE(_e_config_desktop_name_edd);
@ -979,6 +995,10 @@ e_config_load(void)
COPYVAL(exec.show_exit_dialog);
IFCFGEND;
IFCFG(0x0136);
_e_config_acpi_bindings_add();
IFCFGEND;
e_config->config_version = E_CONFIG_FILE_VERSION;
_e_config_free(tcfg);
}
@ -1582,7 +1602,7 @@ e_config_binding_wheel_match(E_Config_Binding_Wheel *eb_in)
{
Eina_List *l;
E_Config_Binding_Wheel *eb;
EINA_LIST_FOREACH(e_config->wheel_bindings, l, eb)
{
if ((eb->context == eb_in->context) &&
@ -1591,9 +1611,31 @@ e_config_binding_wheel_match(E_Config_Binding_Wheel *eb_in)
(eb->modifiers == eb_in->modifiers) &&
(eb->any_mod == eb_in->any_mod) &&
(((eb->action) && (eb_in->action) && (!strcmp(eb->action, eb_in->action))) ||
((!eb->action) && (!eb_in->action))) &&
((!eb->action) && (!eb_in->action))) &&
(((eb->params) && (eb_in->params) && (!strcmp(eb->params, eb_in->params))) ||
((!eb->params) && (!eb_in->params))))
((!eb->params) && (!eb_in->params))))
return eb;
}
return NULL;
}
EAPI E_Config_Binding_Acpi *
e_config_binding_acpi_match(E_Config_Binding_Acpi *eb_in)
{
Eina_List *l;
E_Config_Binding_Acpi *eb;
EINA_LIST_FOREACH(e_config->acpi_bindings, l, eb)
{
if ((eb->context == eb_in->context) &&
(eb->type == eb_in->type) &&
(eb->status == eb_in->status) &&
(((eb->action) && (eb_in->action) &&
(!strcmp(eb->action, eb_in->action))) ||
((!eb->action) && (!eb_in->action))) &&
(((eb->params) && (eb_in->params) &&
(!strcmp(eb->params, eb_in->params))) ||
((!eb->params) && (!eb_in->params))))
return eb;
}
return NULL;
@ -1624,6 +1666,7 @@ _e_config_free(E_Config *ecf)
E_Config_Syscon_Action *sca;
E_Config_Binding_Key *ebk;
E_Config_Binding_Edge *ebe;
E_Config_Binding_Acpi *eba;
E_Font_Fallback *eff;
E_Config_Module *em;
E_Font_Default *efd;
@ -1689,6 +1732,12 @@ _e_config_free(E_Config *ecf)
if (ebw->params) eina_stringshare_del(ebw->params);
E_FREE(ebw);
}
EINA_LIST_FREE(ecf->acpi_bindings, eba)
{
if (eba->action) eina_stringshare_del(eba->action);
if (eba->params) eina_stringshare_del(eba->params);
E_FREE(eba);
}
EINA_LIST_FREE(ecf->path_append_data, epd)
{
if (epd->dir) eina_stringshare_del(epd->dir);
@ -1890,3 +1939,49 @@ _e_config_eet_close_handle(Eet_File *ef, char *file)
}
return 1;
}
static void
_e_config_acpi_bindings_add(void)
{
E_Config_Binding_Acpi *bind;
bind = E_NEW(E_Config_Binding_Acpi, 1);
bind->context = E_BINDING_CONTEXT_NONE;
bind->type = E_ACPI_TYPE_AC_ADAPTER;
bind->status = 0;
bind->action = eina_stringshare_add("dim_screen");
bind->params = NULL;
e_config->acpi_bindings = eina_list_append(e_config->acpi_bindings, bind);
bind = E_NEW(E_Config_Binding_Acpi, 1);
bind->context = E_BINDING_CONTEXT_NONE;
bind->type = E_ACPI_TYPE_AC_ADAPTER;
bind->status = 1;
bind->action = eina_stringshare_add("undim_screen");
bind->params = NULL;
e_config->acpi_bindings = eina_list_append(e_config->acpi_bindings, bind);
bind = E_NEW(E_Config_Binding_Acpi, 1);
bind->context = E_BINDING_CONTEXT_NONE;
bind->type = E_ACPI_TYPE_LID;
bind->status = 0;
bind->action = eina_stringshare_add("suspend");
bind->params = eina_stringshare_add("now");
e_config->acpi_bindings = eina_list_append(e_config->acpi_bindings, bind);
bind = E_NEW(E_Config_Binding_Acpi, 1);
bind->context = E_BINDING_CONTEXT_NONE;
bind->type = E_ACPI_TYPE_POWER;
bind->status = 0;
bind->action = eina_stringshare_add("halt_now");
bind->params = eina_stringshare_add("now");
e_config->acpi_bindings = eina_list_append(e_config->acpi_bindings, bind);
bind = E_NEW(E_Config_Binding_Acpi, 1);
bind->context = E_BINDING_CONTEXT_NONE;
bind->type = E_ACPI_TYPE_SLEEP;
bind->status = 0;
bind->action = eina_stringshare_add("suspend");
bind->params = eina_stringshare_add("now");
e_config->acpi_bindings = eina_list_append(e_config->acpi_bindings, bind);
}

View File

@ -13,6 +13,7 @@ typedef struct _E_Config_Binding_Key E_Config_Binding_Key;
typedef struct _E_Config_Binding_Edge E_Config_Binding_Edge;
typedef struct _E_Config_Binding_Signal E_Config_Binding_Signal;
typedef struct _E_Config_Binding_Wheel E_Config_Binding_Wheel;
typedef struct _E_Config_Binding_Acpi E_Config_Binding_Acpi;
typedef struct _E_Config_Desktop_Background E_Config_Desktop_Background;
typedef struct _E_Config_Desktop_Name E_Config_Desktop_Name;
typedef struct _E_Config_Gadcon E_Config_Gadcon;
@ -21,7 +22,6 @@ typedef struct _E_Config_Shelf E_Config_Shelf;
typedef struct _E_Config_Shelf_Desk E_Config_Shelf_Desk;
typedef struct _E_Config_Mime_Icon E_Config_Mime_Icon;
typedef struct _E_Config_Syscon_Action E_Config_Syscon_Action;
typedef struct _E_Event_Config_Icon_Theme E_Event_Config_Icon_Theme;
#else
@ -35,7 +35,7 @@ typedef struct _E_Event_Config_Icon_Theme E_Event_Config_Icon_Theme;
/* increment this whenever a new set of config values are added but the users
* config doesn't need to be wiped - simply new values need to be put in
*/
#define E_CONFIG_FILE_GENERATION 0x0135
#define E_CONFIG_FILE_GENERATION 0x0136
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION)
#define E_EVAS_ENGINE_DEFAULT 0
@ -104,6 +104,7 @@ struct _E_Config
Eina_List *edge_bindings; // GUI
Eina_List *signal_bindings;
Eina_List *wheel_bindings; // GUI
Eina_List *acpi_bindings; // GUI
Eina_List *path_append_data; // GUI
Eina_List *path_append_images; // GUI
Eina_List *path_append_fonts; // GUI
@ -417,6 +418,12 @@ struct _E_Config_Binding_Wheel
const char *params;
};
struct _E_Config_Binding_Acpi
{
int context, type, status;
const char *action, *params;
};
struct _E_Config_Desktop_Background
{
int container;
@ -528,6 +535,7 @@ EAPI E_Config_Binding_Key *e_config_binding_key_match(E_Config_Binding_Key *e
EAPI E_Config_Binding_Edge *e_config_binding_edge_match(E_Config_Binding_Edge *eb_in);
EAPI E_Config_Binding_Signal *e_config_binding_signal_match(E_Config_Binding_Signal *eb_in);
EAPI E_Config_Binding_Wheel *e_config_binding_wheel_match(E_Config_Binding_Wheel *eb_in);
EAPI E_Config_Binding_Acpi *e_config_binding_acpi_match(E_Config_Binding_Acpi *eb_in);
EAPI void e_config_mode_changed(void);
extern EAPI E_Config *e_config;