Evas_Object *sort_btn;
Evas_Object *sort_popup;
Evas_Object *grid;
- Elm_Object_Item *cur_selected_item;
+ Elm_Object_Item *focused_item;
struct gridmgr *gmgr;
Eina_List *app_list;
enum sort_type sort_type;
return;
}
+ if (!priv->app_list)
+ return;
+
switch (id) {
case SORT_RECENT:
_sort_by_recently_used(priv);
priv->sort_type = SORT_RECENT;
-
break;
case SORT_A_TO_Z:
_destroy_sort_ctxpopup(priv);
elm_object_text_set(priv->sort_btn, elm_object_text_get(obj));
gridmgr_append_list(priv->gmgr, STR_MYAPPS, priv->app_list);
+ priv->focused_item = elm_gengrid_first_item_get(priv->grid);
}
static void _option_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
priv = data;
if (!strcmp(ev->keyname, KEY_BACK)
- || !strcmp(ev->keyname, KEY_BACK_REMOTE))
+ || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
ui_app_exit();
- else if (!strcmp(ev->keyname, KEY_ENTER)
- || !strcmp(ev->keyname, KEY_ENTER_REMOTE))
+ } else if (!strcmp(ev->keyname, KEY_ENTER)
+ || !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
if (!_draw_sort_option(priv))
_ERR("Draw sort ctxpopup failed.");
+ }
+}
+
+static void _sort_key_up_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Key_Up *ev)
+{
+ struct _priv *priv;
+
+ if (!data || !obj || !ev) {
+ _ERR("Invalid argument.");
+ return;
+ }
+ priv = data;
+
+ if (!strcmp(ev->keyname, KEY_UP)) {
+ if (priv->focused_item)
+ elm_object_item_focus_set(priv->focused_item,
+ EINA_TRUE);
+ else
+ elm_object_focus_set(priv->focused_menu, EINA_TRUE);
+ }
}
static void _sort_mouse_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
elm_object_signal_emit(priv->focused_menu, SIG_SELECTED, SRC_MENU_BTN);
- if (priv->cur_selected_item) {
- elm_object_item_focus_set(priv->cur_selected_item, EINA_TRUE);
- priv->cur_selected_item = NULL;
+ if (priv->focused_item)
+ elm_object_item_focus_set(priv->focused_item, EINA_TRUE);
+}
+
+static void _grid_item_focused_cb(void *data, Elm_Object_Item *it,
+ const char *emission, const char *source)
+{
+ struct _priv *priv;
+
+ if (!data || !it) {
+ _ERR("Invalid argument.");
+ return;
}
+ priv = data;
+
+ priv->focused_item = it;
}
static void _grid_item_selected_cb(void *data, Elm_Object_Item *it,
gridmgr_append_list(priv->gmgr, STR_MYAPPS, priv->app_list);
item = elm_gengrid_first_item_get(priv->grid);
- priv->cur_selected_item = NULL;
+ priv->focused_item = NULL;
while (item) {
new_adata = elm_object_item_data_get(item);
if (adata == new_adata) {
- priv->cur_selected_item = item;
+ priv->focused_item = item;
break;
}
adata = elm_object_item_data_get(item);
+ elm_object_item_signal_callback_add(item, SIG_ITEM_FOCUSED,
+ SIG_SOURCE_EDC, _grid_item_focused_cb, data);
elm_object_item_signal_callback_add(item, SIG_ITEM_SELECTED,
SIG_SOURCE_EDC, _grid_item_selected_cb, data);
return;
}
+ elm_object_item_signal_callback_del(item, SIG_ITEM_FOCUSED,
+ SIG_SOURCE_EDC, _grid_item_focused_cb);
elm_object_item_signal_callback_del(item, SIG_ITEM_SELECTED,
SIG_SOURCE_EDC, _grid_item_selected_cb);
}
static input_handler _sort_input_handler = {
.mouse_move = _mouse_move_cb,
.key_down = _sort_key_down_cb,
+ .key_up = _sort_key_up_cb,
.mouse_down = _sort_mouse_down_cb
};
elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN);
elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_RIGHT);
elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(btn, priv->grid, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP);
elm_object_focus_next_object_set(priv->grid, btn, ELM_FOCUS_DOWN);
priv->sort_btn = btn;
elm_object_part_content_set(priv->base, PART_GENGRID, priv->grid);
- priv->cur_selected_item = NULL;
+ priv->focused_item = NULL;
return true;
}