1 #include "Elementary.h"
7 external_signal(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *signal, const char *source)
9 printf("External Signal received: '%s' '%s'\n", signal, source);
13 external_translate(void *data __UNUSED__, const char *orig)
15 // in future, mark all params as translatable and use dgettext()
16 // with "elementary" text domain here.
24 } Elm_External_Signals_Proxy_Context;
27 _external_signal_proxy_free_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
29 Elm_External_Signals_Proxy_Context *ctxt = data;
34 _external_signal_proxy_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
36 Elm_External_Signals_Proxy_Context *ctxt = data;
37 // TODO: Is it worth to check Evas_Smart_Cb_Description and do something
38 // TODO: with event_info given its description?
39 edje_object_signal_emit(ctxt->edje, ctxt->emission, ctxt->source);
43 external_signals_proxy(Evas_Object *obj, Evas_Object *edje, const char *part_name)
45 const Evas_Smart_Cb_Description **cls_descs, **inst_descs;
46 unsigned int cls_count, inst_count, total;
47 Elm_External_Signals_Proxy_Context *ctxt;
49 evas_object_smart_callbacks_descriptions_get
50 (obj, &cls_descs, &cls_count, &inst_descs, &inst_count);
52 total = cls_count + inst_count;
54 ctxt = malloc(sizeof(Elm_External_Signals_Proxy_Context) * total);
56 evas_object_event_callback_add
57 (obj, EVAS_CALLBACK_DEL, _external_signal_proxy_free_cb, ctxt);
59 for (; cls_count > 0; cls_count--, cls_descs++, ctxt++)
61 const Evas_Smart_Cb_Description *d = *cls_descs;
62 ctxt->emission = d->name;
63 ctxt->source = part_name;
65 evas_object_smart_callback_add
66 (obj, d->name, _external_signal_proxy_cb, ctxt);
69 for (; inst_count > 0; inst_count--, inst_descs++, ctxt++)
71 const Evas_Smart_Cb_Description *d = *inst_descs;
72 ctxt->emission = d->name;
73 ctxt->source = part_name;
75 evas_object_smart_callback_add
76 (obj, d->name, _external_signal_proxy_cb, ctxt);
81 external_common_params_parse_internal(size_t params_size, void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
85 Edje_External_Param *param;
87 if (params_size < sizeof(Elm_Params))
90 p = calloc(1, params_size);
94 EINA_LIST_FOREACH(params, l, param)
96 if (!strcmp(param->name, "label"))
103 external_common_param_icon_get(Evas_Object *obj, const Edje_External_Param *p)
105 Evas_Object *edje, *parent_widget, *icon;
108 if ((!p) || (!p->s) || (p->type != EDJE_EXTERNAL_PARAM_TYPE_STRING))
111 edje = evas_object_smart_parent_get(obj);
112 edje_object_file_get(edje, &file, NULL);
114 parent_widget = elm_widget_parent_widget_get(obj);
116 parent_widget = edje;
117 icon = elm_icon_add(parent_widget);
119 if (elm_icon_file_set(icon, file, p->s))
121 if (elm_icon_standard_set(icon, p->s))
124 evas_object_del(icon);
129 external_common_icon_param_parse(Evas_Object **icon, Evas_Object *obj, const Eina_List *params)
131 Edje_External_Param *p = edje_external_param_find(params, "icon");
132 *icon = external_common_param_icon_get(obj, p);
136 external_common_param_edje_object_get(Evas_Object *obj, const Edje_External_Param *p)
138 Evas_Object *edje, *parent_widget, *ret;
141 if ((!p) || (!p->s) || (p->type != EDJE_EXTERNAL_PARAM_TYPE_STRING))
144 edje = evas_object_smart_parent_get(obj);
145 edje_object_file_get(edje, &file, NULL);
147 parent_widget = elm_widget_parent_widget_get(obj);
149 parent_widget = edje;
151 ret = edje_object_add(evas_object_evas_get(parent_widget));
153 if (edje_object_file_set(ret, file, p->s))
156 evas_object_del(ret);
161 external_common_params_free(void *params)
163 Elm_Params *p = params;
167 #define DEFINE_TYPE(type_name) \
168 extern const Edje_External_Type external_##type_name##_type;
169 #include "modules.inc"
172 static Edje_External_Type_Info elm_external_types[] =
174 #define DEFINE_TYPE(type_name) \
175 {"elm/"#type_name, &external_##type_name##_type},
176 #include "modules.inc"
187 ecore_app_args_get(&argc, &argv);
188 elm_init(argc, argv);
190 _elm_log_dom = eina_log_domain_register("elm-externals", EINA_COLOR_LIGHTBLUE);
191 edje_external_type_array_register(elm_external_types);
196 elm_mod_shutdown(void)
198 edje_external_type_array_unregister(elm_external_types);
200 eina_log_domain_unregister(_elm_log_dom);
206 EINA_MODULE_INIT(elm_mod_init);
207 EINA_MODULE_SHUTDOWN(elm_mod_shutdown);