#include "Elementary.h"
#include "private.h"
-int _elm_log_dom = -1;
+int _elm_ext_log_dom = -1;
static int init_count = 0;
char **argv = NULL;
init_count++;
- printf("elm_real_init\n");
+ DBG("elm_real_init\n");
if (init_count > 1) return;
ecore_app_args_get(&argc, &argv);
elm_init(argc, argv);
external_elm_shutdown(void)
{
init_count--;
- printf("elm_real_shutdown\n");
- if (init_count > 1) return;
+ DBG("elm_real_shutdown\n");
+ if (init_count > 0) return;
elm_shutdown();
}
static void
_external_obj_del(void *data __UNUSED__, Evas *evas __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
{
- evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL,
+ evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL,
_external_obj_del);
external_elm_shutdown();
}
void
-external_signal(void *data __UNUSED__, Evas_Object *obj, const char *signal, const char *source)
+external_signal(void *data __UNUSED__, Evas_Object *obj, const char *sig, const char *source)
{
- char *_signal = strdup(signal);
- char *p = _signal;
- Evas_Object *content;
-
- while((*p!='\0') && (*p!=']'))
- p++;
-
-
- if((*p=='\0') || (*(p+1)!=':'))
- {
- ERR("Invalid External Signal received: '%s' '%s'\n", signal, source);
- free(_signal);
- return ;
- }
-
- *p = '\0';
- p+=2; //jump ']' and ':'
-
- Edje_External_Type *type = evas_object_data_get(obj, "Edje_External_Type");
- if (!type->content_get)
- {
- ERR("external type '%s' from module '%s' does not provide content_get()",
- type->module_name, type->module);
- free(_signal);
- return ;
- }
-
- content = type->content_get(type->data, obj, _signal);
- free(_signal);
- if(content)
- edje_object_signal_emit(content, signal + (p - _signal), source);
+ char *_signal = strdup(sig);
+ char *p = _signal;
+ Evas_Object *content;
+
+ while ((*p!='\0') && (*p!=']'))
+ p++;
+
+
+ if ((*p=='\0') || (*(p+1)!=':'))
+ {
+ ERR("Invalid External Signal received: '%s' '%s'\n", sig, source);
+ free(_signal);
+ return ;
+ }
+
+ *p = '\0';
+ p+=2; //jump ']' and ':'
+
+ Edje_External_Type *type = evas_object_data_get(obj, "Edje_External_Type");
+ if (!type->content_get)
+ {
+ ERR("external type '%s' from module '%s' does not provide content_get()",
+ type->module_name, type->module);
+ free(_signal);
+ return ;
+ }
+
+ content = type->content_get(type->data, obj, _signal);
+ free(_signal);
+ if (content)
+ edje_object_signal_emit(content, sig + (p - _signal), source);
}
const char *
edje_object_signal_emit(ctxt->edje, ctxt->emission, ctxt->source);
}
+Eina_Bool
+external_common_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
+{
+ if (!strcmp(param->name, "style"))
+ {
+ if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
+ {
+ param->s = elm_object_style_get(obj);
+ return EINA_TRUE;
+ }
+ }
+ else if (!strcmp(param->name, "disabled"))
+ {
+ if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+ {
+ param->i = elm_object_disabled_get(obj);
+ return EINA_TRUE;
+ }
+ }
+ return EINA_FALSE;
+}
+
+Eina_Bool
+external_common_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
+{
+ if (!strcmp(param->name, "style"))
+ {
+ if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
+ {
+ elm_object_style_set(obj, param->s);
+ return EINA_TRUE;
+ }
+ }
+ else if (!strcmp(param->name, "disabled"))
+ {
+ if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+ {
+ elm_object_disabled_set(obj, param->i);
+ return EINA_TRUE;
+ }
+ }
+ return EINA_FALSE;
+}
+
void
external_signals_proxy(Evas_Object *obj, Evas_Object *edje, const char *part_name)
{
ctxt = malloc(sizeof(Elm_External_Signals_Proxy_Context) * total);
if (!ctxt) return;
evas_object_event_callback_add
- (obj, EVAS_CALLBACK_DEL, _external_signal_proxy_free_cb, ctxt);
+ (obj, EVAS_CALLBACK_FREE, _external_signal_proxy_free_cb, ctxt);
for (; cls_count > 0; cls_count--, cls_descs++, ctxt++)
{
evas_object_smart_callback_add
(obj, d->name, _external_signal_proxy_cb, ctxt);
}
- evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
_external_obj_del, NULL);
}
-void *
-external_common_params_parse_internal(size_t params_size, void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
+void
+external_common_params_parse(void *mem, void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
{
Elm_Params *p;
const Eina_List *l;
Edje_External_Param *param;
- if (params_size < sizeof(Elm_Params))
- return NULL;
-
- p = calloc(1, params_size);
- if (!p)
- return NULL;
-
+ p = mem;
EINA_LIST_FOREACH(params, l, param)
{
- if (!strcmp(param->name, "label"))
- p->label = param->s;
+ if (!strcmp(param->name, "style"))
+ p->style = eina_stringshare_add(param->s);
+ else if (!strcmp(param->name, "disabled"))
+ {
+ p->disabled = param->i;
+ p->disabled_exists = EINA_TRUE;
+ }
}
- return p;
+}
+
+void
+external_common_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
+{
+ const Elm_Params *p;
+ if (to_params) p = to_params;
+ else if (from_params) p = from_params;
+ else return;
+
+ if (p->style)
+ elm_object_style_set(obj, p->style);
+ if (p->disabled_exists)
+ elm_object_disabled_set(obj, p->disabled);
}
Evas_Object *
external_common_params_free(void *params)
{
Elm_Params *p = params;
- free(p);
-};
+ if (p->style)
+ eina_stringshare_del(p->style);
+}
#define DEFINE_TYPE(type_name) \
extern const Edje_External_Type external_##type_name##_type;
static Eina_Bool
elm_mod_init(void)
{
- _elm_log_dom = eina_log_domain_register("elm-externals", EINA_COLOR_LIGHTBLUE);
+ _elm_ext_log_dom = eina_log_domain_register("elm-externals", EINA_COLOR_LIGHTBLUE);
edje_external_type_array_register(elm_external_types);
return EINA_TRUE;
}
elm_mod_shutdown(void)
{
edje_external_type_array_unregister(elm_external_types);
- eina_log_domain_unregister(_elm_log_dom);
- _elm_log_dom = -1;
-
+ if (_elm_ext_log_dom >= 0) eina_log_domain_unregister(_elm_ext_log_dom);
+ _elm_ext_log_dom = -1;
}
EINA_MODULE_INIT(elm_mod_init);