From 459cf14f08b32c3c915e789fc272a2af23b73089 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 24 Dec 2015 14:29:09 -0500 Subject: [PATCH] add configure callbacks, hook up clock config --- src/gadgets/Makefile.mk | 1 + src/gadgets/clock/clock.c | 6 +++- src/gadgets/clock/clock.h | 4 ++- src/gadgets/clock/mod.c | 23 +++++--------- src/gadgets/clock/time.c | 18 +++++------ src/gadgets/core.c | 63 ++++++++++++++++++++++++++++++++++----- src/gadgets/demo.c | 2 +- src/gadgets/gadget.h | 4 ++- 8 files changed, 86 insertions(+), 35 deletions(-) diff --git a/src/gadgets/Makefile.mk b/src/gadgets/Makefile.mk index 99b4069..8cc50eb 100644 --- a/src/gadgets/Makefile.mk +++ b/src/gadgets/Makefile.mk @@ -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 diff --git a/src/gadgets/clock/clock.c b/src/gadgets/clock/clock.c index 6f915b7..10ecda1 100644 --- a/src/gadgets/clock/clock.c +++ b/src/gadgets/clock/clock.c @@ -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, diff --git a/src/gadgets/clock/clock.h b/src/gadgets/clock/clock.h index 5daeeab..211af9f 100644 --- a/src/gadgets/clock/clock.h +++ b/src/gadgets/clock/clock.h @@ -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); diff --git a/src/gadgets/clock/mod.c b/src/gadgets/clock/mod.c index 646d1a4..87816b5 100644 --- a/src/gadgets/clock/mod.c +++ b/src/gadgets/clock/mod.c @@ -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 diff --git a/src/gadgets/clock/time.c b/src/gadgets/clock/time.c index d2a9fca..78f6844 100644 --- a/src/gadgets/clock/time.c +++ b/src/gadgets/clock/time.c @@ -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); } diff --git a/src/gadgets/core.c b/src/gadgets/core.c index cf63257..c57e7e0 100644 --- a/src/gadgets/core.c +++ b/src/gadgets/core.c @@ -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 diff --git a/src/gadgets/demo.c b/src/gadgets/demo.c index 66ce561..09b9402 100644 --- a/src/gadgets/demo.c +++ b/src/gadgets/demo.c @@ -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); diff --git a/src/gadgets/gadget.h b/src/gadgets/gadget.h index fe1833b..7f8ba65 100644 --- a/src/gadgets/gadget.h +++ b/src/gadgets/gadget.h @@ -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);