add configure callbacks, hook up clock config

This commit is contained in:
Mike Blumenkrantz 2015-12-24 14:29:09 -05:00
parent c62120d935
commit 459cf14f08
8 changed files with 86 additions and 35 deletions

View File

@ -7,6 +7,7 @@ src/gadgets/demo.c \
src/gadgets/gadget.h \
src/gadgets/start/start.c \
src/gadgets/clock/clock.c \
src/gadgets/clock/config.c \
src/gadgets/clock/clock.h \
src/gadgets/clock/mod.c \
src/gadgets/clock/time.c

View File

@ -398,7 +398,10 @@ _conf_item_get(unsigned int *id)
static void
_clock_gadget_added_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
_eval_instance_size(data);
Instance *inst = data;
_eval_instance_size(inst);
z_gadget_configure_cb_set(inst->o_clock, config_clock);
evas_object_smart_callback_del_full(obj, "gadget_added", _clock_gadget_added_cb, data);
}
@ -458,6 +461,7 @@ clock_create(Evas_Object *parent, unsigned int *id, Z_Gadget_Site_Orient orient)
inst->o_clock = o;
evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, clock_del, inst);
evas_object_smart_callback_add(parent, "gadget_added", _clock_gadget_added_cb, inst);
evas_object_data_set(o, "clock", inst);
evas_object_event_callback_add(inst->o_clock,
EVAS_CALLBACK_MOUSE_DOWN,

View File

@ -60,12 +60,14 @@ struct _Instance
Config_Item *cfg;
};
void e_int_config_clock_module(Evas_Object *parent, Config_Item *ci);
EINTERN Evas_Object *config_clock(Evas_Object *g);
void e_int_clock_instances_redo(Eina_Bool all);
EINTERN void time_daynames_clear(Instance *inst);
EINTERN void time_string_format(Instance *inst, char *buf, int bufsz);
EINTERN void time_instance_update(Instance *inst);
EINTERN void time_init(void);
EINTERN void time_shutdown(void);
EINTERN Evas_Object *clock_create(Evas_Object *parent, unsigned int *id, Z_Gadget_Site_Orient orient);
EINTERN void clock_popup_new(Instance *inst);

View File

@ -5,7 +5,7 @@ static E_Config_DD *conf_item_edd = NULL;
static E_Action *act = NULL;
static void
_e_mod_action(const char *params)
_e_mod_action_cb(E_Object *obj EINA_UNUSED, const char *params, ...)
{
Eina_List *l;
Instance *inst;
@ -19,12 +19,6 @@ _e_mod_action(const char *params)
clock_popup_new(inst);
}
static void
_e_mod_action_cb(E_Object *obj EINA_UNUSED, const char *params)
{
_e_mod_action(params);
}
EINTERN void
clock_init(void)
{
@ -57,15 +51,16 @@ clock_init(void)
act = e_action_add("clock");
if (act)
{
act->func.go = _e_mod_action_cb;
act->func.go_key = _e_mod_action_cb;
act->func.go_mouse = _e_mod_action_cb;
act->func.go_edge = _e_mod_action_cb;
act->func.go = (void*)_e_mod_action_cb;
act->func.go_key = (void*)_e_mod_action_cb;
act->func.go_mouse = (void*)_e_mod_action_cb;
act->func.go_edge = (void*)_e_mod_action_cb;
e_action_predef_name_set(N_("Clock"), N_("Toggle calendar"), "clock", "show_calendar", NULL, 0);
}
z_gadget_type_add("Clock", clock_create);
time_init();
}
EINTERN void
@ -85,10 +80,7 @@ clock_shutdown(void)
e_object_del(E_OBJECT(clock_config->config_dialog));
EINA_LIST_FREE(clock_config->items, ci)
{
eina_stringshare_del(ci->id);
free(ci);
}
free(ci);
free(clock_config);
clock_config = NULL;
@ -99,6 +91,7 @@ clock_shutdown(void)
conf_edd = NULL;
z_gadget_type_del("Clock");
time_shutdown();
}
#if 0

View File

@ -241,15 +241,6 @@ _clock_eio_error(void *d EINA_UNUSED, int type EINA_UNUSED, void *event)
clock_tzetc_monitor = eio_monitor_add("/etc");
}
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_ERROR, _clock_eio_error, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_CREATED, _clock_eio_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_MODIFIED, _clock_eio_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_DELETED, _clock_eio_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_SELF_DELETED, _clock_eio_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_SELF_RENAME, _clock_eio_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, E_EVENT_SYS_RESUME, _clock_time_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, ECORE_EVENT_SYSTEM_TIMEDATE_CHANGED, _clock_time_update, NULL);
return ECORE_CALLBACK_PASS_ON;
}
@ -262,6 +253,15 @@ time_init(void)
clock_tz2_monitor = eio_monitor_add("/etc/timezone");
if (ecore_file_is_dir("/etc"))
clock_tzetc_monitor = eio_monitor_add("/etc");
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_ERROR, _clock_eio_error, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_CREATED, _clock_eio_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_MODIFIED, _clock_eio_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_FILE_DELETED, _clock_eio_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_SELF_DELETED, _clock_eio_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, EIO_MONITOR_SELF_RENAME, _clock_eio_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, E_EVENT_SYS_RESUME, _clock_time_update, NULL);
E_LIST_HANDLER_APPEND(clock_eio_handlers, ECORE_EVENT_SYSTEM_TIMEDATE_CHANGED, _clock_time_update, NULL);
_update_today_timer(NULL);
}

View File

@ -40,6 +40,8 @@ struct Z_Gadget_Config
Evas_Object *gadget; //list?
unsigned int id;
Eina_Stringshare *type;
Z_Gadget_Configure_Cb configure;
Evas_Object *cfg_object;
Z_Gadget_Site *site;
double x, y; //fixed % positioning
@ -53,6 +55,7 @@ static Eina_Hash *gadget_types;
static Eina_List *sites;
static E_Action *move_act;
static E_Action *configure_act;
static Z_Gadget_Config *
_gadget_at_xy(Z_Gadget_Site *zgs, int x, int y, Z_Gadget_Config *exclude)
@ -160,6 +163,7 @@ _gadget_object_free(E_Object *eobj)
zgc = evas_object_data_get(g, "__z_gadget");
evas_object_smart_callback_call(zgc->site->layout, "gadget_removed", zgc->gadget);
E_FREE_FUNC(zgc->gadget, evas_object_del);
evas_object_del(zgc->cfg_object);
E_FREE(zgc->e_obj_inherit);
}
@ -649,6 +653,36 @@ _gadget_act_modify(E_Object *obj, const char *params EINA_UNUSED, E_Binding_Even
zgc->site->move_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, (Ecore_Event_Handler_Cb)_gadget_mouse_move, zgc);
}
static void
_gadget_act_configure_object_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Z_Gadget_Config *zgc = data;
zgc->cfg_object = NULL;
}
static void
_gadget_act_configure(E_Object *obj, const char *params EINA_UNUSED, E_Binding_Event_Mouse_Button *ev EINA_UNUSED)
{
Z_Gadget_Config *zgc;
Evas_Object *g;
if (obj->type != Z_GADGET_TYPE) return;
g = e_object_data_get(obj);
zgc = evas_object_data_get(g, "__z_gadget");
if (!zgc->configure) return;
if (zgc->cfg_object)
{
evas_object_raise(zgc->cfg_object);
evas_object_show(zgc->cfg_object);
return;
}
zgc->cfg_object = zgc->configure(zgc->gadget);
if (!zgc->cfg_object) return;
evas_object_event_callback_add(zgc->cfg_object, EVAS_CALLBACK_DEL, _gadget_act_configure_object_del, zgc);
}
static Eina_Bool
_site_mouse_up(Z_Gadget_Site *zgs, int t EINA_UNUSED, Ecore_Event_Mouse_Button *ev)
{
@ -724,10 +758,14 @@ z_gadget_site_add(Evas_Object *parent, Z_Gadget_Site_Orient orient)
if (!move_act)
{
move_act = e_action_add("gadget_modify");
e_action_predef_name_set(D_("Gadgets"), D_("Move gadget"), "gadget_modify", NULL, NULL, 0);
move_act = e_action_add("gadget_move");
e_action_predef_name_set(D_("Gadgets"), D_("Move gadget"), "gadget_move", NULL, NULL, 0);
move_act->func.go_mouse = _gadget_act_modify;
move_act->func.end_mouse = _gadget_act_modify_end;
configure_act = e_action_add("gadget_configure");
e_action_predef_name_set(D_("Gadgets"), D_("Configure gadget"), "gadget_configure", NULL, NULL, 0);
configure_act->func.go_mouse = _gadget_act_configure;
}
return zgs->layout;
@ -742,7 +780,7 @@ z_gadget_site_anchor_get(Evas_Object *obj)
}
Z_API void
z_gadget_site_anchor(Evas_Object *obj, Z_Gadget_Site_Anchor an)
z_gadget_site_anchor_set(Evas_Object *obj, Z_Gadget_Site_Anchor an)
{
ZGS_GET(obj);
@ -812,12 +850,23 @@ z_gadget_site_gadget_add(Evas_Object *obj, const char *type)
Z_API Evas_Object *
z_gadget_site_get(Evas_Object *g)
{
Z_Gadget_Site *zgs;
Z_Gadget_Config *zgc;
EINA_SAFETY_ON_NULL_RETURN_VAL(g, NULL);
zgs = evas_object_data_get(g, "__z_gadget");
EINA_SAFETY_ON_NULL_RETURN_VAL(zgs, NULL);
return zgs->layout;
zgc = evas_object_data_get(g, "__z_gadget");
EINA_SAFETY_ON_NULL_RETURN_VAL(zgc, NULL);
return zgc->site->layout;
}
Z_API void
z_gadget_configure_cb_set(Evas_Object *g, Z_Gadget_Configure_Cb cb)
{
Z_Gadget_Config *zgc;
EINA_SAFETY_ON_NULL_RETURN(g);
zgc = evas_object_data_get(g, "__z_gadget");
EINA_SAFETY_ON_NULL_RETURN(zgc);
zgc->configure = cb;
}
Z_API void

View File

@ -23,7 +23,7 @@ gadget_demo(void)
e_theme_edje_object_set(ly, NULL, "e/shelf/default/base");
site = z_gadget_site_add(ly, Z_GADGET_SITE_ORIENT_VERTICAL);
z_gadget_site_anchor(site, Z_GADGET_SITE_ANCHOR_LEFT);
z_gadget_site_anchor_set(site, Z_GADGET_SITE_ANCHOR_LEFT);
elm_object_part_content_set(ly, "e.swallow.content", site);
elm_layout_signal_emit(ly, "e,state,orientation,left", "e");
evas_object_geometry_set(ly, 0, 0, 48, e_comp->h);

View File

@ -33,13 +33,15 @@ typedef enum
} Z_Gadget_Site_Anchor;
typedef Evas_Object *(*Z_Gadget_Create_Cb)(Evas_Object *parent, unsigned int *id, Z_Gadget_Site_Orient orient);
typedef Evas_Object *(*Z_Gadget_Configure_Cb)(Evas_Object *gadget);
Z_API Evas_Object *z_gadget_site_add(Evas_Object *parent, Z_Gadget_Site_Orient orient);
Z_API Z_Gadget_Site_Anchor z_gadget_site_anchor_get(Evas_Object *obj);
Z_API void z_gadget_site_anchor(Evas_Object *obj, Z_Gadget_Site_Anchor an);
Z_API void z_gadget_site_anchor_set(Evas_Object *obj, Z_Gadget_Site_Anchor an);
Z_API Z_Gadget_Site_Orient z_gadget_site_orient_get(Evas_Object *obj);
Z_API Z_Gadget_Site_Gravity z_gadget_site_gravity_get(Evas_Object *obj);
Z_API void z_gadget_site_gadget_add(Evas_Object *obj, const char *type);
Z_API void z_gadget_configure_cb_set(Evas_Object *g, Z_Gadget_Configure_Cb cb);
Z_API Evas_Object *z_gadget_site_get(Evas_Object *g);
Z_API void z_gadget_type_add(const char *type, Z_Gadget_Create_Cb callback);
Z_API void z_gadget_type_del(const char *type);