enventor - kill the views after caching time is passed.

This commit is contained in:
ChunEon Park 2013-09-19 18:52:30 +09:00
parent 5c51752bd1
commit fb01285232
6 changed files with 93 additions and 18 deletions

View File

@ -1,6 +1,6 @@
styles {
style { name: "entry_statusbar_style";
base: "font="FN" font_size=11 color=#000000 text_class=entry color=#606060 align=center";
base: "font="FN" font_size=11 color=#000000 text_class=entry color=#606060";
}
}

View File

@ -1,12 +1,20 @@
#include <Elementary.h>
#include "common.h"
const double VIEW_CACHING_TIME = 60 * 30;
static edj_mgr *g_em;
typedef struct edj_data_s
{
view_data *vd;
Ecore_Timer *timer;
} edj_data;
struct edj_mgr_s
{
Eina_List *vds;
view_data *vd;
Eina_List *edjs;
edj_data *edj;
Evas_Object *layout;
};
@ -31,9 +39,13 @@ edj_mgr_get()
void
edj_mgr_term(edj_mgr *em)
{
view_data *vd;
EINA_LIST_FREE(em->vds, vd)
view_term(vd);
edj_data *edj;
EINA_LIST_FREE(em->edjs, edj)
{
if (edj->timer) ecore_timer_del(edj->timer);
view_term(edj->vd);
}
evas_object_del(em->layout);
free(em);
}
@ -42,21 +54,28 @@ view_data *
edj_mgr_view_get(edj_mgr *em, Eina_Stringshare *group)
{
if (!em) em = g_em;
if (!group) return em->vd;
if (!group && em->edj) return em->edj->vd;
view_data *vd;
edj_data *edj;
Eina_List *l;
EINA_LIST_FOREACH(em->vds, l, vd)
EINA_LIST_FOREACH(em->edjs, l, edj)
{
if (view_group_name_get(vd) == group)
{
em->vd = vd;
return vd;
}
if (view_group_name_get(edj->vd) == group)
return edj->vd;
}
return NULL;
}
void
edj_mgr_view_del(edj_mgr *em, view_data *vd)
{
edj_data *edj = view_data_get(vd);
em->edjs = eina_list_remove(em->edjs, edj);
if (edj->timer) ecore_timer_del(edj->timer);
view_term(vd);
free(edj);
}
view_data *
edj_mgr_view_new(edj_mgr *em, const char *group, stats_data *sd,
config_data *cd)
@ -66,20 +85,45 @@ edj_mgr_view_new(edj_mgr *em, const char *group, stats_data *sd,
if (!vd) vd = view_init(em->layout, group, sd, cd);
if (!vd) return NULL;
edj_data *edj = calloc(1, sizeof(edj_data));
if (!edj)
{
view_term(vd);
return NULL;
}
edj->vd = vd;
view_data_set(vd, edj);
edj_mgr_view_switch_to(em, vd);
em->vds = eina_list_append(em->vds, vd);
em->edjs = eina_list_append(em->edjs, edj);
return vd;
}
static Eina_Bool
view_del_timer_cb(void *data)
{
view_data *vd = data;
edj_data *edj = view_data_get(vd);
edj->timer = NULL;
edj_mgr_view_del(g_em, vd);
return ECORE_CALLBACK_CANCEL;
}
view_data *
edj_mgr_view_switch_to(edj_mgr *em, view_data *vd)
{
if (em->edj && (em->edj->vd == vd)) return vd;
//Switch views
Evas_Object *prev =
elm_object_part_content_unset(em->layout, "elm.swallow.content");
elm_object_part_content_set(em->layout, "elm.swallow.content",
view_obj_get(vd));
//Switching effect
if (prev && (prev != view_obj_get(vd)))
{
elm_object_part_content_set(em->layout, "elm.swallow.prev", prev);
@ -90,7 +134,22 @@ edj_mgr_view_switch_to(edj_mgr *em, view_data *vd)
elm_object_signal_emit(em->layout, "elm,view,switch,instant", "");
}
em->vd = vd;
//Reset caching timers
edj_data *cur_edj = view_data_get(vd);
if (cur_edj->timer)
{
ecore_timer_del(cur_edj->timer);
cur_edj->timer = NULL;
}
edj_data *prev_edj = em->edj;
if (prev_edj)
{
if (prev_edj->timer) ecore_timer_del(prev_edj->timer);
prev_edj->timer = ecore_timer_add(VIEW_CACHING_TIME, view_del_timer_cb,
prev_edj->vd);
}
em->edj = view_data_get(vd);
return vd;
}

View File

@ -19,6 +19,8 @@ struct viewer_s
Eina_Stringshare *group_name;
Eina_Stringshare *part_name;
void *data;
Eina_Bool view_reload;
Eina_Bool dummy_on;
};
@ -315,3 +317,15 @@ view_group_name_get(view_data *vd)
{
return vd->group_name;
}
void
view_data_set(view_data *vd, void *data)
{
vd->data = data;
}
void *
view_data_get(view_data *vd)
{
return vd->data;
}

View File

@ -465,7 +465,7 @@ config_update_cb(void *data, config_data *cd)
rebuild_edc();
edit_changed_set(ad->ed, EINA_FALSE);
view_new(VIEW_DATA, stats_group_name_get(ad->sd));
view_sync_cb(VIEW_DATA, NULL, NULL);
view_sync_cb(ad, NULL, NULL);
if (ad->edc_monitor) eio_monitor_del(ad->edc_monitor);
ad->edc_monitor = eio_monitor_add(config_edc_path_get(ad->cd));
}

View File

@ -5,4 +5,4 @@ view_data * edj_mgr_view_new(edj_mgr *em, const char *group, stats_data *sd, con
view_data *edj_mgr_view_get(edj_mgr *em, Eina_Stringshare *group);
Evas_Object * edj_mgr_obj_get(edj_mgr *em);
view_data *edj_mgr_view_switch_to(edj_mgr *em, view_data *vd);
void edj_mgr_view_del(edj_mgr *em, view_data *vd);

View File

@ -8,3 +8,5 @@ void view_reload_need_set(view_data *vd, Eina_Bool reload);
void view_dummy_toggle(view_data *vd, Eina_Bool msg);
void view_program_run(view_data *vd, const char *program);
Eina_Stringshare *view_group_name_get(view_data *vd);
void view_data_set(view_data *vd, void *data);
void *view_data_get(view_data *vd);