Get us some nice auto translation scheme
[framework/uifw/elementary.git] / src / lib / els_tooltip.c
index 387ef54..4c083cf 100644 (file)
@@ -67,7 +67,7 @@ _elm_tooltip_content_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __U
    Elm_Tooltip *tt = data;
    tt->content = NULL;
    tt->visible_lock = EINA_FALSE;
-   _elm_tooltip_hide(tt);
+   if (tt->tooltip) _elm_tooltip_hide(tt);
 }
 
 static void
@@ -153,6 +153,7 @@ _elm_tooltip_content_del(Elm_Tooltip *tt)
 static void
 _elm_tooltip_hide(Elm_Tooltip *tt)
 {
+   Evas_Object *del;
    _elm_tooltip_show_timer_stop(tt);
    _elm_tooltip_hide_anim_stop(tt);
    _elm_tooltip_reconfigure_job_stop(tt);
@@ -169,12 +170,12 @@ _elm_tooltip_hide(Elm_Tooltip *tt)
    evas_object_event_callback_del_full
      (tt->eventarea, EVAS_CALLBACK_MOUSE_MOVE, _elm_tooltip_obj_mouse_move_cb, tt);
 
-   if (tt->tt_win) evas_object_del(tt->tt_win);
-   else evas_object_del(tt->tooltip);
+   del = tt->tt_win ?: tt->tooltip;
 
    tt->tt_win = NULL;
    tt->tt_evas = NULL;
    tt->tooltip = NULL;
+   evas_object_del(del);
 }
 
 static void
@@ -564,6 +565,18 @@ _elm_tooltip_label_create(void *data, Evas_Object *obj __UNUSED__, Evas_Object *
    return label;
 }
 
+static Evas_Object *
+_elm_tooltip_trans_label_create(void *data, Evas_Object *obj __UNUSED__, Evas_Object *tooltip)
+{
+   Evas_Object *label = elm_label_add(tooltip);
+   const char **text = data;
+   if (!label)
+     return NULL;
+   elm_object_style_set(label, "tooltip");
+   elm_object_domain_translatable_text_set(label, text[0], text[1]);
+   return label;
+}
+
 static void
 _elm_tooltip_label_del_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
 {
@@ -571,6 +584,15 @@ _elm_tooltip_label_del_cb(void *data, Evas_Object *obj __UNUSED__, void *event_i
 }
 
 static void
+_elm_tooltip_trans_label_del_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   const char **text = data;
+   eina_stringshare_del(text[0]);
+   eina_stringshare_del(text[1]);
+   free(text);
+}
+
+static void
 _elm_tooltip_data_clean(Elm_Tooltip *tt)
 {
    if (tt->del_cb) tt->del_cb((void *)tt->data, tt->owner, NULL);
@@ -763,6 +785,24 @@ elm_object_tooltip_text_set(Evas_Object *obj, const char *text)
 }
 
 /**
+ */
+EAPI void
+elm_object_tooltip_domain_translatable_text_set(Evas_Object *obj, const char *domain, const char *text)
+{
+   const char **data;
+   EINA_SAFETY_ON_NULL_RETURN(obj);
+   EINA_SAFETY_ON_NULL_RETURN(text);
+
+   data = malloc(2 * sizeof(char *));
+   if (!data) return;
+   data[0] = eina_stringshare_add(domain);
+   data[1] = eina_stringshare_add(text);
+   elm_object_tooltip_content_cb_set
+     (obj, _elm_tooltip_trans_label_create, data,
+      _elm_tooltip_trans_label_del_cb);
+}
+
+/**
  * Set the content to be shown in the tooltip object
  *
  * Setup the tooltip to object. The object can have only one tooltip,