Add ability to have ACPI events do a custom command.

SVN revision: 49340
This commit is contained in:
Christopher Michael 2010-05-31 01:22:16 +00:00
parent 812e7efa47
commit fc5b8ca5d2
1 changed files with 73 additions and 21 deletions

View File

@ -11,7 +11,8 @@
struct _E_Config_Dialog_Data struct _E_Config_Dialog_Data
{ {
Eina_List *bindings; Eina_List *bindings;
Evas_Object *o_bindings, *o_actions; Evas_Object *o_bindings, *o_actions, *o_params;
const char *bindex;
}; };
/* local function prototypes */ /* local function prototypes */
@ -27,6 +28,7 @@ static E_Action_Description *_selected_action_get(E_Config_Dialog_Data *cfdata);
static const char *_binding_get_label(E_Config_Binding_Acpi *bind); static const char *_binding_get_label(E_Config_Binding_Acpi *bind);
static void _cb_bindings_changed(void *data); static void _cb_bindings_changed(void *data);
static void _cb_actions_changed(void *data); static void _cb_actions_changed(void *data);
static void _cb_entry_changed(void *data, void *data2 __UNUSED__);
E_Config_Dialog * E_Config_Dialog *
e_int_config_acpibindings(E_Container *con, const char *params __UNUSED__) e_int_config_acpibindings(E_Container *con, const char *params __UNUSED__)
@ -134,23 +136,33 @@ _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
static Evas_Object * static Evas_Object *
_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{ {
Evas_Object *ol, *of, *ow; Evas_Object *ol, *of, *ow, *ot;
ol = e_widget_list_add(evas, 0, 1); ol = e_widget_list_add(evas, 0, 1);
of = e_widget_frametable_add(evas, _("ACPI Bindings"), 0); of = e_widget_framelist_add(evas, _("ACPI Bindings"), 0);
ow = e_widget_ilist_add(evas, (24 * e_scale), (24 * e_scale), NULL); ow = e_widget_ilist_add(evas, (24 * e_scale), (24 * e_scale),
&(cfdata->bindex));
cfdata->o_bindings = ow; cfdata->o_bindings = ow;
_fill_bindings(cfdata); _fill_bindings(cfdata);
e_widget_frametable_object_append(of, ow, 0, 0, 2, 1, 1, 1, 1, 1); e_widget_framelist_object_append(of, ow);
e_widget_list_object_append(ol, of, 1, 1, 0.5); e_widget_list_object_append(ol, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Actions"), 0); ot = e_widget_table_add(evas, 0);
of = e_widget_framelist_add(evas, _("Action"), 0);
ow = e_widget_ilist_add(evas, (24 * e_scale), (24 * e_scale), NULL); ow = e_widget_ilist_add(evas, (24 * e_scale), (24 * e_scale), NULL);
cfdata->o_actions = ow; cfdata->o_actions = ow;
_fill_actions(cfdata); _fill_actions(cfdata);
e_widget_framelist_object_append(of, ow); e_widget_framelist_object_append(of, ow);
e_widget_list_object_append(ol, of, 1, 1, 0.5); e_widget_table_object_append(ot, of, 0, 0, 1, 1, 1, 1, 1, 1);
ow = e_widget_framelist_add(evas, _("Action Params"), 0);
cfdata->o_params =
e_widget_entry_add(evas, NULL, _cb_entry_changed, cfdata, NULL);
e_widget_disabled_set(cfdata->o_params, EINA_TRUE);
e_widget_framelist_object_append(ow, cfdata->o_params);
e_widget_table_object_append(ot, ow, 0, 1, 1, 1, 1, 0, 1, 0);
e_widget_list_object_append(ol, ot, 1, 1, 0.5);
e_dialog_resizable_set(cfd->dia, 1); e_dialog_resizable_set(cfd->dia, 1);
return ol; return ol;
@ -210,7 +222,8 @@ _fill_actions(E_Config_Dialog_Data *cfdata)
{ {
if (!grp->acts) continue; if (!grp->acts) continue;
if ((strcmp(grp->act_grp, "Acpi")) && if ((strcmp(grp->act_grp, "Acpi")) &&
(strcmp(grp->act_grp, "System"))) continue; (strcmp(grp->act_grp, "System")) &&
(strcmp(grp->act_grp, "Launch"))) continue;
e_widget_ilist_header_append(cfdata->o_actions, NULL, grp->act_grp); e_widget_ilist_header_append(cfdata->o_actions, NULL, grp->act_grp);
EINA_LIST_FOREACH(grp->acts, ll, dsc) EINA_LIST_FOREACH(grp->acts, ll, dsc)
e_widget_ilist_append(cfdata->o_actions, NULL, dsc->act_name, e_widget_ilist_append(cfdata->o_actions, NULL, dsc->act_name,
@ -230,16 +243,10 @@ static E_Config_Binding_Acpi *
_selected_binding_get(E_Config_Dialog_Data *cfdata) _selected_binding_get(E_Config_Dialog_Data *cfdata)
{ {
E_Config_Binding_Acpi *bind; E_Config_Binding_Acpi *bind;
int sel;
const char *index;
if (!cfdata) return NULL; if (!cfdata) return NULL;
sel = e_widget_ilist_selected_get(cfdata->o_bindings); if (!(bind = eina_list_nth(cfdata->bindings, atoi(cfdata->bindex))))
if (sel < 0) return NULL;
if (!(index = e_widget_ilist_nth_value_get(cfdata->o_bindings, sel)))
return NULL; return NULL;
sel = atoi(index);
if (!(bind = eina_list_nth(cfdata->bindings, sel))) return NULL;
return bind; return bind;
} }
@ -262,7 +269,8 @@ _selected_action_get(E_Config_Dialog_Data *cfdata)
{ {
if (!grp->acts) continue; if (!grp->acts) continue;
if ((strcmp(grp->act_grp, "Acpi")) && if ((strcmp(grp->act_grp, "Acpi")) &&
(strcmp(grp->act_grp, "System"))) continue; (strcmp(grp->act_grp, "System")) &&
(strcmp(grp->act_grp, "Launch"))) continue;
EINA_LIST_FOREACH(grp->acts, ll, dsc) EINA_LIST_FOREACH(grp->acts, ll, dsc)
{ {
if ((dsc->act_name) && (!strcmp(dsc->act_name, lbl))) if ((dsc->act_name) && (!strcmp(dsc->act_name, lbl)))
@ -270,7 +278,7 @@ _selected_action_get(E_Config_Dialog_Data *cfdata)
} }
} }
return NULL; return dsc;
} }
static const char * static const char *
@ -314,7 +322,13 @@ _cb_bindings_changed(void *data)
int i = -1; int i = -1;
if (!(cfdata = data)) return; if (!(cfdata = data)) return;
if (!(bind = _selected_binding_get(cfdata))) return; if (!(bind = _selected_binding_get(cfdata)))
{
e_widget_entry_clear(cfdata->o_params);
e_widget_disabled_set(cfdata->o_params, EINA_TRUE);
return;
}
e_widget_ilist_unselect(cfdata->o_actions); e_widget_ilist_unselect(cfdata->o_actions);
EINA_LIST_FOREACH(e_widget_ilist_items_get(cfdata->o_actions), items, item) EINA_LIST_FOREACH(e_widget_ilist_items_get(cfdata->o_actions), items, item)
{ {
@ -336,8 +350,46 @@ _cb_actions_changed(void *data)
E_Action_Description *dsc; E_Action_Description *dsc;
if (!(cfdata = data)) return; if (!(cfdata = data)) return;
if (!(bind = _selected_binding_get(cfdata))) return; if (!(bind = _selected_binding_get(cfdata)))
if (!(dsc = _selected_action_get(cfdata))) return; {
e_widget_entry_clear(cfdata->o_params);
e_widget_disabled_set(cfdata->o_params, EINA_TRUE);
return;
}
if (!(dsc = _selected_action_get(cfdata)))
{
e_widget_entry_clear(cfdata->o_params);
e_widget_disabled_set(cfdata->o_params, EINA_TRUE);
return;
}
eina_stringshare_replace(&bind->action, dsc->act_cmd); eina_stringshare_replace(&bind->action, dsc->act_cmd);
eina_stringshare_replace(&bind->params, dsc->act_params); e_widget_disabled_set(cfdata->o_params, !(dsc->editable));
if ((!dsc->editable) && (dsc->act_params))
e_widget_entry_text_set(cfdata->o_params, dsc->act_params);
else if (bind->params)
e_widget_entry_text_set(cfdata->o_params, bind->params);
else
{
if ((!dsc->param_example) || (!dsc->param_example[0]))
e_widget_entry_text_set(cfdata->o_params, _("<None>"));
else
e_widget_entry_text_set(cfdata->o_params, dsc->param_example);
}
}
static void
_cb_entry_changed(void *data, void *data2 __UNUSED__)
{
E_Config_Dialog_Data *cfdata;
E_Config_Binding_Acpi *bind;
E_Action_Description *dsc;
if (!(cfdata = data)) return;
if (!(dsc = _selected_action_get(cfdata))) return;
if (!dsc->editable) return;
if (!(bind = _selected_binding_get(cfdata))) return;
eina_stringshare_replace(&bind->params,
e_widget_entry_text_get(cfdata->o_params));
} }