static const char SIG_LANG_CHANGED[] = "language,changed";
static const char SIG_PRESSED[] = "pressed";
static const char SIG_RELEASED[] = "released";
+static const char SIG_FOCUSED[] = "item,focused";
+static const char SIG_UNFOCUSED[] = "item,unfocused";
static const Evas_Smart_Cb_Description _smart_callbacks[] = {
{SIG_CLICKED_DOUBLE, ""},
}
else
next = (Elm_Gen_Item *)elm_genlist_item_next_get
- (sd->last_selected_item);
+ (sd->last_selected_item);
if (!next) return EINA_FALSE;
return EINA_TRUE;
}
+static void
+_item_highlight(Elm_Gen_Item *it)
+{
+ const char *selectraise;
+ Elm_Genlist_Smart_Data *sd = GL_IT(it)->wsd;
+
+ if (elm_widget_item_disabled_get(it)) return;
+ if ((sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE) ||
+ (sd->select_mode == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY ) ||
+ (it->select_mode == ELM_OBJECT_SELECT_MODE_NONE) ||
+ (it->select_mode == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY ))
+ return;
+
+ if (!sd->highlight || it->highlighted) return;
+#if GENLIST_PINCH_ZOOM_SUPPORT
+ if (sd->pinch_zoom_mode) return;
+#endif
+
+ selectraise = edje_object_data_get(VIEW(it), "selectraise");
+ if ((selectraise) && (!strcmp(selectraise, "on")))
+ {
+ if (it->deco_all_view) evas_object_raise(it->deco_all_view);
+ else evas_object_raise(VIEW(it));
+ if ((it->item->group_item) && (it->item->group_item->realized))
+ evas_object_raise(it->item->VIEW(group_item));
+ }
+ it->highlighted = EINA_TRUE;
+
+ if (it->deco_all_view)
+ edje_object_signal_emit(it->deco_all_view, "elm,state,selected", "elm");
+ edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm");
+ evas_object_smart_callback_call(WIDGET(it), SIG_HIGHLIGHTED, it);
+}
+
+static void
+_item_unhighlight(Elm_Gen_Item *it)
+{
+ if (!it->highlighted) return;
+
+ if (!it->item->nostacking)
+ {
+ if ((it->item->order_num_in & 0x1) ^ it->item->stacking_even)
+ {
+ if (it->deco_all_view) evas_object_lower(it->deco_all_view);
+ else evas_object_lower(VIEW(it));
+ }
+ else
+ {
+ if (it->deco_all_view) evas_object_raise(it->deco_all_view);
+ else evas_object_raise(VIEW(it));
+ }
+ }
+ it->highlighted = EINA_FALSE;
+
+ if (it->deco_all_view)
+ edje_object_signal_emit(it->deco_all_view, "elm,state,unselected", "elm");
+ edje_object_signal_emit(VIEW(it), "elm,state,unselected", "elm");
+ evas_object_smart_callback_call(WIDGET(it), SIG_UNHIGHLIGHTED, it);
+}
+
+static void
+_item_unselect(Elm_Gen_Item *it)
+{
+ Elm_Genlist_Smart_Data *sd = GL_IT(it)->wsd;
+ _item_unhighlight(it);
+ if (!it->selected) return;
+
+ it->selected = EINA_FALSE;
+ sd->selected = eina_list_remove(sd->selected, it);
+ evas_object_smart_callback_call(WIDGET(it), SIG_UNSELECTED, it);
+}
+
+static void
+_item_select(Elm_Gen_Item *it)
+{
+ Evas_Object *obj = WIDGET(it);
+ Elm_Genlist_Smart_Data *sd = GL_IT(it)->wsd;
+ if (elm_widget_item_disabled_get(it)) return;
+ if ((sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE) ||
+ (sd->select_mode == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) ||
+ (it->select_mode == ELM_OBJECT_SELECT_MODE_NONE) ||
+ (it->select_mode == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY))
+ return;
+
+#if GENLIST_PINCH_ZOOM_SUPPORT
+ if (IS_ROOT_PARENT_IT(it) && (sd->pinch_zoom_mode == ELM_GEN_PINCH_ZOOM_CONTRACT))
+ {
+ elm_genlist_pinch_zoom_mode_set(obj, ELM_GEN_PINCH_ZOOM_EXPAND);
+ elm_genlist_item_show((Elm_Object_Item *)it, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+ return;
+ }
+#endif
+
+#if 0
+ // FIXME: difference from upstream
+ if ((GL_IT(it)->wsd->last_selected_item) &&
+ (it != (Elm_Gen_Item *) GL_IT(it)->wsd->last_selected_item))
+ _item_unfocusable_set
+ ((Elm_Gen_Item *)GL_IT(it)->wsd->last_selected_item, EINA_TRUE);
+#endif
+
+ // Do not check selected because always select mode can be used
+ _item_highlight(it);
+ it->selected = EINA_TRUE;
+ sd->selected = eina_list_append(sd->selected, it);
+ sd->last_selected_item = (Elm_Object_Item *)it;
+
+ if (it->func.func) it->func.func((void *)it->func.data, obj, it);
+ if (!EINA_MAGIC_CHECK((Elm_Widget_Item *)it, ELM_WIDGET_ITEM_MAGIC))
+ return;
+ evas_object_smart_callback_call(WIDGET(it), SIG_SELECTED, it);
+}
+
+static void
+_item_select_unselect(Elm_Gen_Item *it, Eina_Bool selected)
+{
+ Elm_Genlist_Smart_Data *sd = GL_IT(it)->wsd;
+ Evas_Object *obj = ELM_WIDGET_DATA(sd)->obj;
+ if (elm_widget_item_disabled_get(it)) return;
+
+ evas_object_ref(obj);
+ if (!sd->multi)
+ {
+ const Eina_List *l, *ll;
+ Elm_Gen_Item *it2;
+ EINA_LIST_FOREACH_SAFE(sd->selected, l, ll, it2)
+ if (it2 != it) _item_unselect(it2);
+ }
+ if (selected) _item_select(it);
+ else _item_unselect(it);
+ evas_object_unref(obj);
+}
+
+static void _item_focused(Elm_Gen_Item *it)
+{
+ if (!it) return;
+ Elm_Genlist_Smart_Data *sd = GL_IT(it)->wsd;
+ Evas_Coord x, y, w, h, sx, sy, sw, sh;
+
+ evas_object_geometry_get(VIEW(it), &x, &y, &w, &h);
+ evas_object_geometry_get(ELM_WIDGET_DATA(sd)->obj, &sx, &sy, &sw, &sh);
+ if ((x < sx) || (y < sy) || ((x + w) > (sx + sw)) || ((y + h) > (sy + sh)))
+ {
+ elm_genlist_item_bring_in((Elm_Object_Item *)it,
+ ELM_GENLIST_ITEM_SCROLLTO_IN);
+ }
+
+ edje_object_signal_emit
+ (VIEW(it), "elm,state,focused", "elm");
+ if (it->deco_all_view)
+ edje_object_signal_emit
+ (it->deco_all_view, "elm,state,focused", "elm");
+
+ sd->focused = it;
+}
+
+static void _item_unfocused(Elm_Gen_Item *it)
+{
+ if (!it) return;
+ Elm_Genlist_Smart_Data *sd = GL_IT(it)->wsd;
+ edje_object_signal_emit
+ (VIEW(sd->focused), "elm,state,unfocused", "elm");
+ if (sd->focused->deco_all_view)
+ edje_object_signal_emit
+ (sd->focused->deco_all_view, "elm,state,unfocused", "elm");
+ if (it == sd->focused)
+ sd->focused = NULL;
+}
+
+static Elm_Gen_Item *_item_focused_search(Elm_Gen_Item *it, int dir)
+{
+ if (!it) return NULL;
+ Elm_Gen_Item *tmp = it;
+ if (dir == 1)
+ {
+ tmp = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(tmp)->next);
+ }
+ else
+ {
+ tmp = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(tmp)->prev);
+ }
+ if (!tmp) tmp = it;
+ return tmp;
+}
+
+static void _item_focused_next(Elm_Genlist_Smart_Data *sd, int dir)
+{
+ Elm_Gen_Item *it;
+ if (elm_widget_focus_get(ELM_WIDGET_DATA(sd)->obj))
+ edje_object_signal_emit
+ (ELM_WIDGET_DATA(sd)->resize_obj, "elm,state,unfocused", "elm");
+
+ if (!sd->focused)
+ {
+ if (dir == 1)
+ it = ELM_GEN_ITEM_FROM_INLIST(sd->items);
+ else
+ it = ELM_GEN_ITEM_FROM_INLIST(sd->items->last);
+ }
+ else
+ {
+ it = sd->focused;
+ _item_unfocused(sd->focused);
+ it = _item_focused_search(it, dir);
+ }
+ _item_focused(it);
+}
+
static Eina_Bool
_elm_genlist_smart_event(Evas_Object *obj,
Evas_Object *src __UNUSED__,
Evas_Coord step_y = 0;
Evas_Coord page_x = 0;
Evas_Coord page_y = 0;
- Elm_Object_Item *it;
Evas_Event_Key_Down *ev = event_info;
Evas_Coord pan_max_x = 0, pan_max_y = 0;
((!strcmp(ev->keyname, "KP_Up")) && (!ev->string)))
{
if (((evas_key_modifier_is_set(ev->modifiers, "Shift")) &&
- (_item_multi_select_up(sd)))
- || (_item_single_select_up(sd)))
+ (_item_multi_select_up(sd))))
{
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
else
- y -= step_y;
+ {
+ _item_focused_next(sd, -1);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ return EINA_TRUE;
+ }
}
else if ((!strcmp(ev->keyname, "Down")) ||
((!strcmp(ev->keyname, "KP_Down")) && (!ev->string)))
{
if (((evas_key_modifier_is_set(ev->modifiers, "Shift")) &&
- (_item_multi_select_down(sd)))
- || (_item_single_select_down(sd)))
+ (_item_multi_select_down(sd))))
{
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
else
- y += step_y;
+ {
+ _item_focused_next(sd, 1);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ return EINA_TRUE;
+ }
}
else if ((!strcmp(ev->keyname, "Home")) ||
((!strcmp(ev->keyname, "KP_Home")) && (!ev->string)))
{
- it = elm_genlist_first_item_get(obj);
- elm_genlist_item_bring_in(it, ELM_GENLIST_ITEM_SCROLLTO_IN);
- elm_genlist_item_selected_set(it, EINA_TRUE);
+ _item_unfocused(sd->focused);
+ _item_focused_next(sd, 1);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
else if ((!strcmp(ev->keyname, "End")) ||
((!strcmp(ev->keyname, "KP_End")) && (!ev->string)))
{
- it = elm_genlist_last_item_get(obj);
- elm_genlist_item_bring_in(it, ELM_GENLIST_ITEM_SCROLLTO_IN);
- elm_genlist_item_selected_set(it, EINA_TRUE);
+ _item_unfocused(sd->focused);
+ sd->focused = ELM_GEN_ITEM_FROM_INLIST(sd->items->last);
+ _item_focused_next(sd, -1);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
- else if (((!strcmp(ev->keyname, "Return")) ||
- (!strcmp(ev->keyname, "KP_Enter")) ||
- (!strcmp(ev->keyname, "space")))
- && (!sd->multi) && (sd->selected))
+ else if (!strcmp(ev->keyname, "Return") ||
+ !strcmp(ev->keyname, "KP_Enter") ||
+ !strcmp(ev->keyname, "space"))
{
- it = elm_genlist_selected_item_get(obj);
- elm_genlist_item_expanded_set(it, !elm_genlist_item_expanded_get(it));
- evas_object_smart_callback_call(WIDGET(it), SIG_ACTIVATED, it);
+ if (sd->focused)
+ {
+ Elm_Gen_Item *it = sd->focused;
+ _item_select_unselect(it, EINA_TRUE);
+ evas_object_smart_callback_call(WIDGET(it), SIG_ACTIVATED, it);
+ }
}
else return EINA_FALSE;
{
ELM_GENLIST_DATA_GET(obj, sd);
+ // Why does parent do first?
if (!ELM_WIDGET_CLASS(_elm_genlist_parent_sc)->on_focus(obj))
return EINA_FALSE;
(!sd->last_selected_item))
sd->last_selected_item = eina_list_data_get(sd->selected);
+ if (elm_widget_focus_get(obj))
+ {
+ if (sd->focused)
+ {
+ edje_object_signal_emit
+ (VIEW(sd->focused), "elm,state,focused", "elm");
+ if (sd->focused->deco_all_view)
+ edje_object_signal_emit
+ (sd->focused->deco_all_view, "elm,state,focused", "elm");
+ }
+ else
+ edje_object_signal_emit(ELM_WIDGET_DATA(sd)->resize_obj, "elm,state,focused", "elm");
+ }
+ else
+ {
+ if (sd->focused)
+ {
+ edje_object_signal_emit
+ (VIEW(sd->focused), "elm,state,unfocused", "elm");
+ if (sd->focused->deco_all_view)
+ edje_object_signal_emit
+ (sd->focused->deco_all_view, "elm,state,unfocused", "elm");
+ }
+ else
+ edje_object_signal_emit(ELM_WIDGET_DATA(sd)->resize_obj, "elm,state,unfocused", "elm");
+ }
return EINA_TRUE;
}
}
static void
-_item_highlight(Elm_Gen_Item *it)
-{
- const char *selectraise;
- Elm_Genlist_Smart_Data *sd = GL_IT(it)->wsd;
-
- if (elm_widget_item_disabled_get(it)) return;
- if ((sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE) ||
- (sd->select_mode == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY ) ||
- (it->select_mode == ELM_OBJECT_SELECT_MODE_NONE) ||
- (it->select_mode == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY ))
- return;
-
- if (!sd->highlight || it->highlighted) return;
-#if GENLIST_PINCH_ZOOM_SUPPORT
- if (sd->pinch_zoom_mode) return;
-#endif
-
- selectraise = edje_object_data_get(VIEW(it), "selectraise");
- if ((selectraise) && (!strcmp(selectraise, "on")))
- {
- if (it->deco_all_view) evas_object_raise(it->deco_all_view);
- else evas_object_raise(VIEW(it));
- if ((it->item->group_item) && (it->item->group_item->realized))
- evas_object_raise(it->item->VIEW(group_item));
- }
- it->highlighted = EINA_TRUE;
-
- if (it->deco_all_view)
- edje_object_signal_emit(it->deco_all_view, "elm,state,selected", "elm");
- edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm");
- evas_object_smart_callback_call(WIDGET(it), SIG_HIGHLIGHTED, it);
-}
-
-static void
-_item_unhighlight(Elm_Gen_Item *it)
-{
- if (!it->highlighted) return;
-
- if (!it->item->nostacking)
- {
- if ((it->item->order_num_in & 0x1) ^ it->item->stacking_even)
- {
- if (it->deco_all_view) evas_object_lower(it->deco_all_view);
- else evas_object_lower(VIEW(it));
- }
- else
- {
- if (it->deco_all_view) evas_object_raise(it->deco_all_view);
- else evas_object_raise(VIEW(it));
- }
- }
- it->highlighted = EINA_FALSE;
-
- if (it->deco_all_view)
- edje_object_signal_emit(it->deco_all_view, "elm,state,unselected", "elm");
- edje_object_signal_emit(VIEW(it), "elm,state,unselected", "elm");
- evas_object_smart_callback_call(WIDGET(it), SIG_UNHIGHLIGHTED, it);
-}
-
-static void
-_item_unselect(Elm_Gen_Item *it)
-{
- Elm_Genlist_Smart_Data *sd = GL_IT(it)->wsd;
- _item_unhighlight(it);
- if (!it->selected) return;
-
- it->selected = EINA_FALSE;
- sd->selected = eina_list_remove(sd->selected, it);
- evas_object_smart_callback_call(WIDGET(it), SIG_UNSELECTED, it);
-}
-
-static void
-_item_select(Elm_Gen_Item *it)
-{
- Evas_Object *obj = WIDGET(it);
- Elm_Genlist_Smart_Data *sd = GL_IT(it)->wsd;
- if (elm_widget_item_disabled_get(it)) return;
- if ((sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE) ||
- (sd->select_mode == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) ||
- (it->select_mode == ELM_OBJECT_SELECT_MODE_NONE) ||
- (it->select_mode == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY))
- return;
-
-#if GENLIST_PINCH_ZOOM_SUPPORT
- if (IS_ROOT_PARENT_IT(it) && (sd->pinch_zoom_mode == ELM_GEN_PINCH_ZOOM_CONTRACT))
- {
- elm_genlist_pinch_zoom_mode_set(obj, ELM_GEN_PINCH_ZOOM_EXPAND);
- elm_genlist_item_show((Elm_Object_Item *)it, ELM_GENLIST_ITEM_SCROLLTO_TOP);
- return;
- }
-#endif
-
-#if 0
- // FIXME: difference from upstream
- if ((GL_IT(it)->wsd->last_selected_item) &&
- (it != (Elm_Gen_Item *) GL_IT(it)->wsd->last_selected_item))
- _item_unfocusable_set
- ((Elm_Gen_Item *)GL_IT(it)->wsd->last_selected_item, EINA_TRUE);
-#endif
-
- // Do not check selected because always select mode can be used
- _item_highlight(it);
- it->selected = EINA_TRUE;
- sd->selected = eina_list_append(sd->selected, it);
- sd->last_selected_item = (Elm_Object_Item *)it;
-
- if (it->func.func) it->func.func((void *)it->func.data, obj, it);
- if (!EINA_MAGIC_CHECK((Elm_Widget_Item *)it, ELM_WIDGET_ITEM_MAGIC))
- return;
- evas_object_smart_callback_call(WIDGET(it), SIG_SELECTED, it);
-}
-
-static void
-_item_select_unselect(Elm_Gen_Item *it, Eina_Bool selected)
-{
- Elm_Genlist_Smart_Data *sd = GL_IT(it)->wsd;
- Evas_Object *obj = ELM_WIDGET_DATA(sd)->obj;
- if (elm_widget_item_disabled_get(it)) return;
-
- evas_object_ref(obj);
- if (!sd->multi)
- {
- const Eina_List *l, *ll;
- Elm_Gen_Item *it2;
- EINA_LIST_FOREACH_SAFE(sd->selected, l, ll, it2)
- if (it2 != it) _item_unselect(it2);
- }
- if (selected) _item_select(it);
- else _item_unselect(it);
- evas_object_unref(obj);
-}
-
-static void
_item_block_position_update(Eina_Inlist *list,
int idx)
{
ELM_WIDGET_CLASS(sc)->translate = _elm_genlist_smart_translate;
/* not a 'focus chain manager' */
- ELM_WIDGET_CLASS(sc)->focus_next = NULL;
+ ELM_WIDGET_CLASS(sc)->focus_next = NULL; //_elm_genlist_smart_focus_next;
ELM_WIDGET_CLASS(sc)->focus_direction = NULL;
ELM_LAYOUT_CLASS(sc)->sizing_eval = _elm_genlist_smart_sizing_eval;
static void _mouse_down_cb(void *, Evas *, Evas_Object *, void *);
static void _mouse_move_cb(void *, Evas *, Evas_Object *, void *);
static void _items_fix(Evas_Object *);
+static void _item_select(Elm_List_Item *it);
+static void _item_unselect(Elm_List_Item *it);
+
+
EVAS_SMART_SUBCLASS_IFACE_NEW
(ELM_LIST_SMART_NAME, _elm_list, Elm_List_Smart_Class,
return EINA_TRUE;
}
+static void _item_focused(Elm_List_Item *it)
+{
+ if (!it) return;
+ Elm_List_Smart_Data *sd = it->sd;
+ Evas_Coord x, y, w, h, sx, sy, sw, sh;
+
+ evas_object_geometry_get(VIEW(it), &x, &y, &w, &h);
+ evas_object_geometry_get(ELM_WIDGET_DATA(sd)->obj, &sx, &sy, &sw, &sh);
+ if ((x < sx) || (y < sy) || ((x + w) > (sx + sw)) || ((y + h) > (sy + sh)))
+ {
+ elm_list_item_bring_in((Elm_Object_Item *)it);
+ }
+
+ edje_object_signal_emit
+ (VIEW(it), "elm,state,focused", "elm");
+
+ sd->focused = (Elm_Object_Item *)it;
+}
+
+static void _item_unfocused(Elm_List_Item *it)
+{
+ if (!it) return;
+ Elm_List_Smart_Data *sd = it->sd;
+ edje_object_signal_emit
+ (VIEW(sd->focused), "elm,state,unfocused", "elm");
+ if (it == (Elm_List_Item *)sd->focused)
+ sd->focused = NULL;
+}
+
+static Elm_List_Item *_item_focused_search(Elm_List_Item *it, int dir)
+{
+ if (!it) return NULL;
+ Eina_List *l = eina_list_data_find_list(it->sd->items, it);
+ Eina_List *tmp = l;
+ if (dir == 1) tmp = eina_list_next(tmp);
+ else tmp = eina_list_prev(tmp);
+ if (!tmp) tmp = l;
+ return (Elm_List_Item *)eina_list_data_get(tmp);
+}
+
+static void _item_focused_next(Elm_List_Smart_Data *sd, int dir)
+{
+ Elm_List_Item *it = NULL;
+
+ if (elm_widget_focus_get(ELM_WIDGET_DATA(sd)->obj))
+ edje_object_signal_emit
+ (ELM_WIDGET_DATA(sd)->resize_obj, "elm,state,unfocused", "elm");
+
+ if (!sd->focused)
+ {
+ if (dir == 1)
+ it = (Elm_List_Item *)eina_list_data_get(sd->items);
+ else
+ it = (Elm_List_Item *)eina_list_data_get(eina_list_last(sd->items));
+ }
+ else
+ {
+ it = (Elm_List_Item *)sd->focused;
+ _item_unfocused((Elm_List_Item *)sd->focused);
+ it = _item_focused_search(it, dir);
+ }
+ _item_focused(it);
+}
+
+
static Eina_Bool
_elm_list_smart_event(Evas_Object *obj,
Evas_Object *src __UNUSED__,
((!strcmp(ev->keyname, "KP_Up")) && !ev->string))
{
if ((!sd->h_mode) &&
- (((evas_key_modifier_is_set(ev->modifiers, "Shift")) &&
- (_item_multi_select_up(sd)))
- || (_item_single_select_up(sd))))
+ (evas_key_modifier_is_set(ev->modifiers, "Shift")) &&
+ (_item_multi_select_up(sd)))
{
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
else
- y -= step_y;
+ {
+ _item_focused_next(sd, -1);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ return EINA_TRUE;
+ }
}
else if ((!strcmp(ev->keyname, "Down")) ||
((!strcmp(ev->keyname, "KP_Down")) && !ev->string))
{
if ((!sd->h_mode) &&
- (((evas_key_modifier_is_set(ev->modifiers, "Shift")) &&
- (_item_multi_select_down(sd)))
- || (_item_single_select_down(sd))))
+ (evas_key_modifier_is_set(ev->modifiers, "Shift")) &&
+ (_item_multi_select_down(sd)))
{
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
else
- y += step_y;
+ {
+ _item_focused_next(sd, 1);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ return EINA_TRUE;
+ }
}
else if ((!strcmp(ev->keyname, "Home")) ||
((!strcmp(ev->keyname, "KP_Home")) && !ev->string))
{
- it = eina_list_data_get(sd->items);
- elm_list_item_bring_in((Elm_Object_Item *)it);
+ _item_unfocused((Elm_List_Item *)sd->focused);
+ _item_focused_next(sd, 1);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
else if ((!strcmp(ev->keyname, "End")) ||
((!strcmp(ev->keyname, "KP_End")) && !ev->string))
{
- it = eina_list_data_get(eina_list_last(sd->items));
- elm_list_item_bring_in((Elm_Object_Item *)it);
+ _item_unfocused((Elm_List_Item *)sd->focused);
+ _item_focused_next(sd, -1);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
}
else if (((!strcmp(ev->keyname, "Return")) ||
(!strcmp(ev->keyname, "KP_Enter")) ||
- (!strcmp(ev->keyname, "space")))
- && (!sd->multi) && (sd->selected))
+ (!strcmp(ev->keyname, "space"))) &&
+ (!sd->multi))
{
- it = (Elm_List_Item *)elm_list_selected_item_get(obj);
- if (it) evas_object_smart_callback_call(WIDGET(it), SIG_ACTIVATED, it);
+ if (sd->focused)
+ {
+ it = (Elm_List_Item *)sd->focused;
+ _item_select(it);
+ evas_object_smart_callback_call(WIDGET(it), SIG_ACTIVATED, it);
+ it->selected = EINA_FALSE;
+ sd->selected = eina_list_remove(sd->selected, it);
+ }
}
else if (!strcmp(ev->keyname, "Escape"))
{
if (elm_widget_focus_get(obj) && sd->selected && !sd->last_selected_item)
sd->last_selected_item = eina_list_data_get(sd->selected);
+ if (elm_widget_focus_get(obj))
+ {
+ if (sd->focused)
+ {
+ edje_object_signal_emit
+ (VIEW(sd->focused), "elm,state,focused", "elm");
+ }
+ else
+ edje_object_signal_emit(ELM_WIDGET_DATA(sd)->resize_obj, "elm,state,focused", "elm");
+ }
+ else
+ {
+ if (sd->focused)
+ {
+ edje_object_signal_emit
+ (VIEW(sd->focused), "elm,state,unfocused", "elm");
+ }
+ else
+ edje_object_signal_emit(ELM_WIDGET_DATA(sd)->resize_obj, "elm,state,unfocused", "elm");
+ }
return EINA_TRUE;
}