From bc443382133121882f628bbf1b7e235b87135cf8 Mon Sep 17 00:00:00 2001 From: Tiago Rezende Campos Falcao Date: Wed, 27 Oct 2010 14:38:54 +0000 Subject: [PATCH] Deselect all items when press Esc Author: Helen Fornazier list, genlist, gengrid: Using _deselect_all_item SVN revision: 53923 --- legacy/elementary/src/lib/elm_gengrid.c | 29 ++++++++++++++++++------- legacy/elementary/src/lib/elm_genlist.c | 23 ++++++++++++++++---- legacy/elementary/src/lib/elm_list.c | 25 ++++++++++++++++----- 3 files changed, 59 insertions(+), 18 deletions(-) diff --git a/legacy/elementary/src/lib/elm_gengrid.c b/legacy/elementary/src/lib/elm_gengrid.c index 1bee8ae60d..5d7f45f7e8 100644 --- a/legacy/elementary/src/lib/elm_gengrid.c +++ b/legacy/elementary/src/lib/elm_gengrid.c @@ -234,6 +234,7 @@ static Eina_Bool _item_single_select_left(Widget_Data *wd); static Eina_Bool _item_single_select_right(Widget_Data *wd); static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info); +static Eina_Bool _deselect_all_items(Widget_Data *wd); static Evas_Smart_Class _pan_sc = EVAS_SMART_CLASS_INIT_VERSION; @@ -338,6 +339,12 @@ _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type ty else y += page_y; } + else if (!strcmp(ev->keyname, "Escape")) + { + if (!_deselect_all_items(wd)) return EINA_FALSE; + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + return EINA_TRUE; + } else return EINA_FALSE; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; @@ -345,6 +352,16 @@ _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type ty return EINA_TRUE; } +static Eina_Bool +_deselect_all_items(Widget_Data *wd) +{ + if (!wd->selected) return EINA_FALSE; + while(wd->selected) + elm_gengrid_item_selected_set(wd->selected->data, EINA_FALSE); + + return EINA_TRUE; +} + static Eina_Bool _item_multi_select_left(Widget_Data *wd) { @@ -426,8 +443,7 @@ _item_single_select_up(Widget_Data *wd) Elm_Gengrid_Item *prev = elm_gengrid_item_prev_get(wd->last_selected_item); if (!prev) return EINA_FALSE; - while (wd->selected) - elm_gengrid_item_selected_set(wd->selected->data, EINA_FALSE); + _deselect_all_items(wd); for (i = 1; i < wd->nmax; i++) { @@ -450,8 +466,7 @@ _item_single_select_down(Widget_Data *wd) Elm_Gengrid_Item *next = elm_gengrid_item_next_get(wd->last_selected_item); if (!next) return EINA_FALSE; - while (wd->selected) - elm_gengrid_item_selected_set(wd->selected->data, EINA_FALSE); + _deselect_all_items(wd); for (i = 1; i < wd->nmax; i++) { @@ -472,8 +487,7 @@ _item_single_select_left(Widget_Data *wd) Elm_Gengrid_Item *prev = elm_gengrid_item_prev_get(wd->last_selected_item); if (!prev) return EINA_FALSE; - while (wd->selected) - elm_gengrid_item_selected_set(wd->selected->data, EINA_FALSE); + _deselect_all_items(wd); elm_gengrid_item_selected_set(prev, EINA_TRUE); elm_gengrid_item_show(prev); @@ -487,8 +501,7 @@ _item_single_select_right(Widget_Data *wd) Elm_Gengrid_Item *next = elm_gengrid_item_next_get(wd->last_selected_item); if (!next) return EINA_FALSE; - while (wd->selected) - elm_gengrid_item_selected_set(wd->selected->data, EINA_FALSE); + _deselect_all_items(wd); elm_gengrid_item_selected_set(next, EINA_TRUE); elm_gengrid_item_show(next); diff --git a/legacy/elementary/src/lib/elm_genlist.c b/legacy/elementary/src/lib/elm_genlist.c index f83408dbbe..76a87c8dd4 100644 --- a/legacy/elementary/src/lib/elm_genlist.c +++ b/legacy/elementary/src/lib/elm_genlist.c @@ -378,6 +378,7 @@ static Eina_Bool _item_single_select_up(Widget_Data *wd); static Eina_Bool _item_single_select_down(Widget_Data *wd); static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info); +static Eina_Bool _deselect_all_items(Widget_Data *wd); static Evas_Smart_Class _pan_sc = EVAS_SMART_CLASS_INIT_VERSION; @@ -473,6 +474,12 @@ _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type ty elm_genlist_item_expanded_set(it, !elm_genlist_item_expanded_get(it)); } + else if (!strcmp(ev->keyname, "Escape")) + { + if (!_deselect_all_items(wd)) return EINA_FALSE; + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + return EINA_TRUE; + } else return EINA_FALSE; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; @@ -480,6 +487,16 @@ _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type ty return EINA_TRUE; } +static Eina_Bool +_deselect_all_items(Widget_Data *wd) +{ + if (!wd->selected) return EINA_FALSE; + while(wd->selected) + elm_genlist_item_selected_set(wd->selected->data, EINA_FALSE); + + return EINA_TRUE; +} + static Eina_Bool _item_multi_select_up(Widget_Data *wd) { @@ -533,8 +550,7 @@ _item_single_select_up(Widget_Data *wd) Elm_Genlist_Item *prev = elm_genlist_item_prev_get(wd->last_selected_item); if (!prev) return EINA_FALSE; - while (wd->selected) - elm_genlist_item_selected_set(wd->selected->data, EINA_FALSE); + _deselect_all_items(wd); elm_genlist_item_selected_set(prev, EINA_TRUE); elm_genlist_item_show(prev); @@ -548,8 +564,7 @@ _item_single_select_down(Widget_Data *wd) Elm_Genlist_Item *next = elm_genlist_item_next_get(wd->last_selected_item); if (!next) return EINA_FALSE; - while (wd->selected) - elm_genlist_item_selected_set(wd->selected->data, EINA_FALSE); + _deselect_all_items(wd); elm_genlist_item_selected_set(next, EINA_TRUE); elm_genlist_item_show(next); diff --git a/legacy/elementary/src/lib/elm_list.c b/legacy/elementary/src/lib/elm_list.c index bdf0bb3a25..b9928a9d78 100644 --- a/legacy/elementary/src/lib/elm_list.c +++ b/legacy/elementary/src/lib/elm_list.c @@ -76,6 +76,7 @@ static Eina_Bool _item_single_select_up(Widget_Data *wd); static Eina_Bool _item_single_select_down(Widget_Data *wd); static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info); +static Eina_Bool _deselect_all_items(Widget_Data *wd); #define ELM_LIST_ITEM_CHECK_DELETED_RETURN(it, ...) \ if (!it) \ @@ -205,6 +206,12 @@ _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type ty else y += page_y; } + else if (!strcmp(ev->keyname, "Escape")) + { + if (!_deselect_all_items(wd)) return EINA_FALSE; + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + return EINA_TRUE; + } else return EINA_FALSE; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; @@ -212,6 +219,16 @@ _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type ty return EINA_TRUE; } +static Eina_Bool +_deselect_all_items(Widget_Data *wd) +{ + if (!wd->selected) return EINA_FALSE; + while(wd->selected) + elm_list_item_selected_set(wd->selected->data, EINA_FALSE); + + return EINA_TRUE; +} + static Eina_Bool _item_multi_select_up(Widget_Data *wd) { @@ -265,9 +282,7 @@ _item_single_select_up(Widget_Data *wd) Elm_List_Item *prev = elm_list_item_prev(wd->last_selected_item); if (!prev) return EINA_FALSE; - while(wd->selected) - elm_list_item_selected_set(eina_list_data_get(wd->selected), - EINA_FALSE); + _deselect_all_items(wd); elm_list_item_selected_set(prev, EINA_TRUE); elm_list_item_show(prev); @@ -281,9 +296,7 @@ _item_single_select_down(Widget_Data *wd) Elm_List_Item *next = elm_list_item_next(wd->last_selected_item); if (!next) return EINA_FALSE; - while(wd->selected) - elm_list_item_selected_set(eina_list_data_get(wd->selected), - EINA_FALSE); + _deselect_all_items(wd); elm_list_item_selected_set(next, EINA_TRUE); elm_list_item_show(next);