return strcmp(get_app_name(adata2), get_app_name(adata1));
}
+static void _recent_list_foreach(gpointer data, gpointer user_data)
+{
+ struct _priv *priv;
+ struct recent_data *rdata;
+ struct app_data *adata;
+ Eina_List *l = NULL;
+
+ if (!data || !user_data) {
+ _ERR("Data is NULL.");
+ return;
+ }
+ priv = user_data;
+ rdata = data;
+
+ if (!priv->app_list || !rdata->id)
+ return;
+
+ EINA_LIST_FOREACH(priv->app_list, l, adata) {
+ if (adata && get_app_id(adata) &&
+ !strcmp(get_app_id(adata), rdata->id)) {
+ priv->app_list =
+ eina_list_promote_list(priv->app_list, l);
+ break;
+ }
+ }
+}
+
+static void _sort_by_recently_used(struct _priv *priv)
+{
+ GList *recent_l = NULL;
+ struct app_data *adata;
+ Eina_List *l = NULL;
+ int r;
+
+ if (!priv || !priv->app_list) {
+ _ERR("Invalid argument.");
+ return;
+ }
+
+ r = app_contents_get_recent_list(CONTENTS_APP, -1, &recent_l);
+ if (r != APP_CONTENTS_ERROR_NONE) {
+ _ERR("Get recent list failed.");
+ return;
+ }
+
+ if (!recent_l)
+ return;
+
+ recent_l = g_list_reverse(recent_l);
+ g_list_foreach(recent_l, _recent_list_foreach, priv);
+
+ /* The 'Web Browser' should be at first when 'Recent' option selected */
+ EINA_LIST_FOREACH(priv->app_list, l, adata) {
+ if (adata && get_app_id(adata) &&
+ !strcmp(get_app_id(adata), STR_BROWSER_ID)) {
+ priv->app_list =
+ eina_list_promote_list(priv->app_list, l);
+ break;
+ }
+ }
+}
+
static void _option_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
Evas_Event_Key_Down *ev)
{
} else if (!strcmp(ev->key, KEY_ENTER)) {
switch (id) {
case SORT_RECENT:
- /* It should be implemented later. */
+ _sort_by_recently_used(priv);
+ priv->sort_type = SORT_RECENT;
+
break;
case SORT_A_TO_Z:
return true;
}
+ _sort_by_recently_used(priv);
+
if (!gridmgr_append_list(priv->gmgr, STR_MYAPPS, priv->app_list)) {
_ERR("Gridmgr append list failed.");
return false;