fixed plugin image size problem
[framework/uifw/elementary.git] / src / edje_externals / elm.c
index a9ed058..ced69b8 100644 (file)
@@ -1,7 +1,7 @@
 #include "Elementary.h"
 #include "private.h"
 
-int _elm_log_dom = -1;
+int _elm_ext_log_dom = -1;
 
 static int init_count = 0;
 
@@ -12,7 +12,7 @@ external_elm_init(void)
    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);
@@ -22,53 +22,53 @@ static void
 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 *
@@ -101,6 +101,50 @@ _external_signal_proxy_cb(void *data, Evas_Object *obj __UNUSED__, void *event_i
    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)
 {
@@ -116,7 +160,7 @@ external_signals_proxy(Evas_Object *obj, Evas_Object *edje, const char *part_nam
    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++)
      {
@@ -137,30 +181,42 @@ external_signals_proxy(Evas_Object *obj, Evas_Object *edje, const char *part_nam
        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 *
@@ -225,8 +281,9 @@ void
 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;
@@ -245,7 +302,7 @@ static Edje_External_Type_Info elm_external_types[] =
 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;
 }
@@ -254,9 +311,8 @@ static void
 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);