From 1a51c5c28315e520269bcc6adeee2373f3ce80b6 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sat, 21 Jan 2006 10:06:13 +0000 Subject: [PATCH] ilist jumps to the selected spot now with the ilist widget (keyboard nav is sane again) SVN revision: 19938 --- src/bin/e_ilist.c | 7 +++++-- src/bin/e_ilist.h | 2 +- src/bin/e_widget_ilist.c | 16 +++++++++++++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/bin/e_ilist.c b/src/bin/e_ilist.c index a75e549..118a5cf 100644 --- a/src/bin/e_ilist.c +++ b/src/bin/e_ilist.c @@ -27,6 +27,7 @@ struct _E_Smart_Item Evas_Object *base_obj; Evas_Object *icon_obj; void (*func) (void *data, void *data2); + void (*func_hilight) (void *data, void *data2); void *data; void *data2; }; @@ -91,7 +92,7 @@ e_ilist_icon_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h) } EAPI void -e_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data, void *data2), void *data, void *data2) +e_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data, void *data2), void (*func_hilight) (void *data, void *data2), void *data, void *data2) { E_Smart_Item *si; Evas_Coord mw = 0, mh = 0; @@ -114,7 +115,8 @@ e_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) ( edje_object_part_swallow(si->base_obj, "icon_swallow", si->icon_obj); evas_object_show(si->icon_obj); } - si->func = func; + si->func = func; + si->func_hilight = func_hilight; si->data = data; si->data2 = data2; sd->items = evas_list_append(sd->items, si); @@ -151,6 +153,7 @@ e_ilist_selected_set(Evas_Object *obj, int n) { evas_object_raise(si->base_obj); edje_object_signal_emit(si->base_obj, "active", ""); + if (si->func_hilight) si->func_hilight(si->data, si->data2); if (!sd->selector) { if (si->func) si->func(si->data, si->data2); diff --git a/src/bin/e_ilist.h b/src/bin/e_ilist.h index a9dbea1..441e4ec 100644 --- a/src/bin/e_ilist.h +++ b/src/bin/e_ilist.h @@ -8,7 +8,7 @@ EAPI Evas_Object *e_ilist_add (Evas *evas); EAPI void e_ilist_icon_size_set (Evas_Object *obj, Evas_Coord w, Evas_Coord h); -EAPI void e_ilist_append (Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data, void *data2), void *data, void *data2); +EAPI void e_ilist_append (Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data, void *data2), void (*func_hilight) (void *data, void *data2), void *data, void *data2); EAPI void e_ilist_selected_set (Evas_Object *obj, int n); EAPI int e_ilist_selected_get (Evas_Object *obj); EAPI const char *e_ilist_selected_label_get (Evas_Object *obj); diff --git a/src/bin/e_widget_ilist.c b/src/bin/e_widget_ilist.c index 05c3728..9346c11 100644 --- a/src/bin/e_widget_ilist.c +++ b/src/bin/e_widget_ilist.c @@ -22,6 +22,7 @@ static void _e_wid_del_hook(Evas_Object *obj); static void _e_wid_focus_hook(Evas_Object *obj); static void _e_wid_cb_scrollframe_resize(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _e_wid_cb_item_sel(void *data, void *data2); +static void _e_wid_cb_item_hilight(void *data, void *data2); static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info); /* externally accessible functions */ @@ -73,7 +74,7 @@ e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*f wcb->data = data; if (val) wcb->value = strdup(val); wd->callbacks = evas_list_append(wd->callbacks, wcb); - e_ilist_append(wd->o_ilist, icon, label, _e_wid_cb_item_sel, wd, wcb); + e_ilist_append(wd->o_ilist, icon, label, _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb); if (icon) evas_object_show(icon); e_ilist_min_size_get(wd->o_ilist, &mw, &mh); evas_object_resize(wd->o_ilist, mw, mh); @@ -228,6 +229,19 @@ _e_wid_cb_item_sel(void *data, void *data2) } static void +_e_wid_cb_item_hilight(void *data, void *data2) +{ + E_Widget_Data *wd; + Evas_Coord x, y, w, h; + E_Widget_Callback *wcb; + + wd = data; + wcb = data2; + e_ilist_selected_geometry_get(wd->o_ilist, &x, &y, &w, &h); + e_scrollframe_child_region_show(wd->o_scrollframe, x, y, w, h); +} + +static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info) { e_widget_focus_steal(data); -- 2.7.4