forked from enlightenment/enventor
enventor - kill the views after caching time is passed.
This commit is contained in:
parent
5c51752bd1
commit
fb01285232
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue