edj_viewer - recover the live view feature.
Since the edje has been lost the edj file watching, enventor implement it by it's own way.
This commit is contained in:
parent
302ad65f7d
commit
5b6785e252
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <Elementary.h>
|
||||
#include <Edje_Edit.h>
|
||||
#include <Eio.h>
|
||||
#include "common.h"
|
||||
|
||||
struct viewer_s
|
||||
|
@ -18,6 +19,8 @@ struct viewer_s
|
|||
|
||||
Ecore_Idler *idler;
|
||||
Ecore_Timer *timer;
|
||||
Eio_Monitor *edj_monitor;
|
||||
Ecore_Event_Handler *monitor_event;
|
||||
|
||||
void (*del_cb)(void *data);
|
||||
void *data;
|
||||
|
@ -47,6 +50,9 @@ file_set_timer_cb(void *data)
|
|||
if (edje_object_file_set(vd->layout, config_edj_path_get(),
|
||||
vd->group_name))
|
||||
{
|
||||
eio_monitor_del(vd->edj_monitor);
|
||||
vd->edj_monitor = eio_monitor_add(config_edj_path_get());
|
||||
if (!vd->edj_monitor) EINA_LOG_ERR("Failed to add Eio_Monitor");
|
||||
vd->timer = NULL;
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
@ -129,21 +135,33 @@ view_scroller_create(Evas_Object *parent)
|
|||
return scroller;
|
||||
}
|
||||
|
||||
static void
|
||||
edje_change_file_cb(void *data, Evas_Object *obj,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
static Eina_Bool
|
||||
edj_changed_cb(void *data, int type EINA_UNUSED, void *event)
|
||||
{
|
||||
view_data *vd = data;
|
||||
Eio_Monitor_Event *ev = event;
|
||||
|
||||
if (vd->edj_monitor != ev->monitor) return ECORE_CALLBACK_PASS_ON;
|
||||
|
||||
eio_monitor_del(vd->edj_monitor);
|
||||
|
||||
if (!edje_object_file_set(vd->layout, config_edj_path_get(),
|
||||
vd->group_name))
|
||||
{
|
||||
vd->del_cb(vd->data);
|
||||
view_term(vd);
|
||||
return;
|
||||
vd->edj_monitor = NULL;
|
||||
EINA_LOG_ERR("Failed to load edj file \"%s\"", config_edj_path_get());
|
||||
return ECORE_CALLBACK_DONE;
|
||||
}
|
||||
view_obj_min_update(obj);
|
||||
|
||||
vd->edj_monitor = eio_monitor_add(config_edj_path_get());
|
||||
if (!vd->edj_monitor) EINA_LOG_ERR("Failed to add Eio_Monitor");
|
||||
|
||||
view_obj_min_update(vd->layout);
|
||||
view_part_highlight_set(vd, vd->part_name);
|
||||
|
||||
return ECORE_CALLBACK_DONE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -193,13 +211,17 @@ view_obj_create(view_data *vd, const char *file_path, const char *group)
|
|||
//FIXME: more optimized way?
|
||||
vd->timer = ecore_timer_add(1, file_set_timer_cb, vd);
|
||||
}
|
||||
else
|
||||
{
|
||||
eio_monitor_del(vd->edj_monitor);
|
||||
vd->edj_monitor = eio_monitor_add(file_path);
|
||||
if (!vd->edj_monitor) EINA_LOG_ERR("Failed to add Eio_Monitor");
|
||||
}
|
||||
|
||||
evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
|
||||
EVAS_HINT_EXPAND);
|
||||
evas_object_event_callback_add(layout, EVAS_CALLBACK_RESIZE,
|
||||
layout_resize_cb, vd);
|
||||
edje_object_signal_callback_add(layout,
|
||||
"edje,change,file", "edje",
|
||||
edje_change_file_cb, vd);
|
||||
view_obj_min_update(layout);
|
||||
|
||||
return layout;
|
||||
|
@ -258,6 +280,10 @@ view_init(Evas_Object *parent, const char *group,
|
|||
vd->del_cb = del_cb;
|
||||
vd->data = data;
|
||||
view_part_highlight_set(vd, NULL);
|
||||
|
||||
vd->monitor_event =
|
||||
ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, edj_changed_cb, vd);
|
||||
|
||||
return vd;
|
||||
}
|
||||
|
||||
|
@ -273,9 +299,10 @@ view_term(view_data *vd)
|
|||
evas_object_event_callback_del(vd->part_obj, EVAS_CALLBACK_DEL,
|
||||
part_obj_del_cb);
|
||||
evas_object_del(vd->scroller);
|
||||
|
||||
ecore_idler_del(vd->idler);
|
||||
ecore_timer_del(vd->timer);
|
||||
eio_monitor_del(vd->edj_monitor);
|
||||
ecore_event_handler_del(vd->monitor_event);
|
||||
|
||||
free(vd);
|
||||
}
|
||||
|
|
|
@ -22,15 +22,16 @@ edc_changed_cb(void *data, int type EINA_UNUSED, void *event)
|
|||
Eio_Monitor_Event *ev = event;
|
||||
app_data *ad = data;
|
||||
|
||||
if (!edit_changed_get(ad->ed)) return ECORE_CALLBACK_RENEW;
|
||||
if (ev->monitor != ad->edc_monitor) return ECORE_CALLBACK_PASS_ON;
|
||||
|
||||
if (!edit_changed_get(ad->ed)) return ECORE_CALLBACK_DONE;
|
||||
|
||||
if (strcmp(ev->filename, config_edc_path_get()))
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
|
||||
return ECORE_CALLBACK_DONE;
|
||||
build_edc();
|
||||
edit_changed_set(ad->ed, EINA_FALSE);
|
||||
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
return ECORE_CALLBACK_DONE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
|
@ -386,8 +387,9 @@ config_update_cb(void *data)
|
|||
edit_changed_set(ad->ed, EINA_FALSE);
|
||||
edj_mgr_clear();
|
||||
edc_view_set(stats_group_name_get());
|
||||
if (ad->edc_monitor) eio_monitor_del(ad->edc_monitor);
|
||||
eio_monitor_del(ad->edc_monitor);
|
||||
ad->edc_monitor = eio_monitor_add(config_edc_path_get());
|
||||
if (!ad->edc_monitor) EINA_LOG_ERR("Failed to add Eio_Monitor");
|
||||
}
|
||||
//If the edc is reloaded, then rebuild it!
|
||||
else if (edit_changed_get(ad->ed))
|
||||
|
@ -532,6 +534,8 @@ init(app_data *ad, int argc, char **argv)
|
|||
base_gui_show();
|
||||
|
||||
ad->edc_monitor = eio_monitor_add(config_edc_path_get());
|
||||
if (!ad->edc_monitor) EINA_LOG_ERR("Failed to add Eio_Monitor");
|
||||
|
||||
ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, edc_changed_cb, ad);
|
||||
|
||||
return EINA_TRUE;
|
||||
|
|
Loading…
Reference in New Issue