billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=2568c50a40f2a737217d56653298c5b7fe01f649

commit 2568c50a40f2a737217d56653298c5b7fe01f649
Author: Boris Faure <bill...@gmail.com>
Date:   Thu Oct 9 00:12:34 2014 +0200

    set media type as an enum
---
 src/bin/gravatar.c          |  36 ++++++---
 src/bin/gravatar.h          |   4 +-
 src/bin/main.c              | 124 ++++++++++++++++-------------
 src/bin/media.c             | 184 ++++++++++++++++++++++++++------------------
 src/bin/media.h             |  23 +++---
 src/bin/options_wallpaper.c |   8 +-
 src/bin/termio.c            |  53 ++++++-------
 7 files changed, 252 insertions(+), 180 deletions(-)

diff --git a/src/bin/gravatar.c b/src/bin/gravatar.c
index f266c36..5f2e8a5 100644
--- a/src/bin/gravatar.c
+++ b/src/bin/gravatar.c
@@ -26,20 +26,27 @@ int _gravatar_log_dom = -1;
 #define GRAVATAR_URL_START "http://www.gravatar.com/avatar/";
 #define GRAVATAR_URL_END ""
 
+typedef struct _Gravatar {
+     const char *url;
+     Config *config;
+} Gravatar;
+
 static Evas_Object *
 _tooltip_content(void *data,
                  Evas_Object *obj,
                  Evas_Object *tt EINA_UNUSED)
 {
-   const char *url = data;
+   Gravatar *g = data;
    Evas_Object *o;
+   int type;
 
-   o = elm_label_add(obj);
-   elm_object_text_set(o, url);
-   DBG("url:%s", url);
+   //o = elm_label_add(obj);
+   //elm_object_text_set(o, url);
+   DBG("url:%s", g->url);
    /* TODO */
-   //o = media_add(obj, url, config, MEDIA_TOOLTIP, &type);
+   o = media_add(obj, g->url, g->config, MEDIA_TOOLTIP, &type);
 
+   /* TODO: handle Gravatar leak */
    return o;
 }
 
@@ -48,13 +55,14 @@ _tooltip_del(void            *data,
              Evas_Object *obj EINA_UNUSED,
              void            *event_info EINA_UNUSED)
 {
-   const char *url = data;
-   DBG("url:%s", url);
-   eina_stringshare_del(data);
+   Gravatar *g = data;
+   DBG("url:%s", g->url);
+   eina_stringshare_del(g->url);
+   free(g);
 }
 
 void
-gravatar_tooltip(Evas_Object *obj, char *email)
+gravatar_tooltip(Evas_Object *obj, Config *config, char *email)
 {
    int n;
    MD5_CTX ctx;
@@ -62,8 +70,11 @@ gravatar_tooltip(Evas_Object *obj, char *email)
    unsigned char hash[MD5_HASHBYTES];
    static const char hex[] = "0123456789abcdef";
    const char *url;
-   //int type;
-   //Config *config = termio_config_get(obj);
+   Gravatar *g;
+
+   g = calloc(sizeof(Gravatar), 1);
+   if (!g) return;
+   g->config = config;
 
    DBG("need to show tooltip for email:%s", email);
    eina_str_tolower(&email);
@@ -87,8 +98,9 @@ gravatar_tooltip(Evas_Object *obj, char *email)
 
    DBG("url:%s", url);
 
+   g->url = url;
    elm_object_tooltip_content_cb_set(obj, _tooltip_content,
-                                     (void *) url,
+                                     g,
                                      _tooltip_del);
 }
 
diff --git a/src/bin/gravatar.h b/src/bin/gravatar.h
index 3336777..fb5ea14 100644
--- a/src/bin/gravatar.h
+++ b/src/bin/gravatar.h
@@ -1,8 +1,10 @@
 #ifndef _GRAVATAR_H__
 #define _GRAVATAR_H__ 1
 
+#include "config.h"
+
 void
-gravatar_tooltip(Evas_Object *obj, char *email);
+gravatar_tooltip(Evas_Object *obj, Config *config, char *email);
 
 void gravatar_init(void);
 void gravatar_shutdown(void);
diff --git a/src/bin/main.c b/src/bin/main.c
index fb3b474..12e653a 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -60,7 +60,7 @@ struct _Term
    Evas_Object *sel;
    Evas_Object *tabcount_spacer;
    Eina_List   *popmedia_queue;
-   int          poptype, mediatype;
+   Media_Type   poptype, mediatype;
    int          step_x, step_y, min_w, min_h, req_w, req_h;
    struct {
       int       x, y;
@@ -1135,7 +1135,7 @@ _popmedia_show(Term *term, const char *src)
 {
    Evas_Object *o;
    Config *config = termio_config_get(term->term);
-   int type = 0;
+   Media_Type type;
 
    if (!config) return;
    ty_dbus_link_hide();
@@ -1153,7 +1153,8 @@ _popmedia_show(Term *term, const char *src)
         return;
      }
    termio_mouseover_suspend_pushpop(term->term, 1);
-   term->popmedia = o = media_add(term->wn->win, src, config, MEDIA_POP, 
&type);
+   type = media_src_type_get(src);
+   term->popmedia = o = media_add(term->wn->win, src, config, MEDIA_POP, type);
    term->popmedia_deleted = EINA_FALSE;
    evas_object_smart_callback_add(o, "loop", _cb_media_loop, term);
    evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _cb_popmedia_del, 
term);
@@ -1162,18 +1163,21 @@ _popmedia_show(Term *term, const char *src)
    term->poptype = type;
    switch (type)
      {
-      case TYPE_IMG:
+      case MEDIA_TYPE_IMG:
          edje_object_signal_emit(term->bg, "popmedia,image", "terminology");
          break;
-      case TYPE_SCALE:
+      case MEDIA_TYPE_SCALE:
          edje_object_signal_emit(term->bg, "popmedia,scale", "terminology");
          break;
-      case TYPE_EDJE:
+      case MEDIA_TYPE_EDJE:
          edje_object_signal_emit(term->bg, "popmedia,edje", "terminology");
          break;
-      case TYPE_MOV:
+      case MEDIA_TYPE_MOV:
          edje_object_signal_emit(term->bg, "popmedia,movie", "terminology");
          break;
+      case MEDIA_TYPE_UNKNOWN:
+      default:
+         break;
      }
 }
 
@@ -1903,8 +1907,8 @@ _term_media_update(Term *term, const Config *config)
    if ((config->background) && (config->background[0]))
      {
         Evas_Object *o;
-        int type = 0;
-        
+        Media_Type type;
+
         if (term->media)
           {
              evas_object_event_callback_del(term->media,
@@ -1912,33 +1916,36 @@ _term_media_update(Term *term, const Config *config)
                                             _cb_media_del);
              evas_object_del(term->media);
           }
+        type = media_src_type_get(config->background);
         term->media = o = media_add(term->wn->win,
                                     config->background, config,
-                                    MEDIA_BG, &type);
+                                    MEDIA_BG, type);
         evas_object_event_callback_add(o, EVAS_CALLBACK_DEL,
                                        _cb_media_del, term);
         edje_object_part_swallow(term->base, "terminology.background", o);
         evas_object_show(o);
         term->mediatype = type;
-        if (type == TYPE_IMG)
-          {
-             edje_object_signal_emit(term->bg, "media,image", "terminology");
-             edje_object_signal_emit(term->base, "media,image", "terminology");
-          }
-        else if (type == TYPE_SCALE)
-          {
-             edje_object_signal_emit(term->bg, "media,scale", "terminology");
-             edje_object_signal_emit(term->base, "media,scale", "terminology");
-          }
-        else if (type == TYPE_EDJE)
-          {
-             edje_object_signal_emit(term->bg, "media,edje", "terminology");
-             edje_object_signal_emit(term->base, "media,edje", "terminology");
-          }
-        else if (type == TYPE_MOV)
-          {
-             edje_object_signal_emit(term->bg, "media,movie", "terminology");
-             edje_object_signal_emit(term->base, "media,movie", "terminology");
+        switch (type)
+          {
+           case MEDIA_TYPE_IMG:
+              edje_object_signal_emit(term->bg, "media,image", "terminology");
+              edje_object_signal_emit(term->base, "media,image", 
"terminology");
+              break;
+           case MEDIA_TYPE_SCALE:
+              edje_object_signal_emit(term->bg, "media,scale", "terminology");
+              edje_object_signal_emit(term->base, "media,scale", 
"terminology");
+              break;
+           case MEDIA_TYPE_EDJE:
+              edje_object_signal_emit(term->bg, "media,edje", "terminology");
+              edje_object_signal_emit(term->base, "media,edje", "terminology");
+              break;
+           case MEDIA_TYPE_MOV:
+              edje_object_signal_emit(term->bg, "media,movie", "terminology");
+              edje_object_signal_emit(term->base, "media,movie", 
"terminology");
+              break;
+           case MEDIA_TYPE_UNKNOWN:
+           default:
+              break;
           }
      }
    else
@@ -2221,40 +2228,51 @@ main_term_bg_config(Term *term)
    if (term->popmedia)
      {
         edje_object_part_swallow(term->bg, "terminology.popmedia", 
term->popmedia);
-        if (term->poptype == TYPE_IMG)
-          edje_object_signal_emit(term->bg, "popmedia,image", "terminology");
-        else if (term->poptype == TYPE_SCALE)
-          edje_object_signal_emit(term->bg, "popmedia,scale", "terminology");
-        else if (term->poptype == TYPE_EDJE)
-          edje_object_signal_emit(term->bg, "popmedia,edje", "terminology");
-        else if (term->poptype == TYPE_MOV)
-          edje_object_signal_emit(term->bg, "popmedia,movie", "terminology");
+        switch (term->poptype)
+          {
+           case MEDIA_TYPE_IMG:
+              edje_object_signal_emit(term->bg, "popmedia,image", 
"terminology");
+              break;
+           case MEDIA_TYPE_SCALE:
+              edje_object_signal_emit(term->bg, "popmedia,scale", 
"terminology");
+              break;
+           case MEDIA_TYPE_EDJE:
+              edje_object_signal_emit(term->bg, "popmedia,edje", 
"terminology");
+              break;
+           case MEDIA_TYPE_MOV:
+              edje_object_signal_emit(term->bg, "popmedia,movie", 
"terminology");
+              break;
+           default:
+              break;
+          }
      }
    if (term->media)
      {
         edje_object_part_swallow(term->base, "terminology.background", 
term->media);
-        if (term->mediatype == TYPE_IMG)
-          {
-             edje_object_signal_emit(term->bg, "media,image", "terminology");
-             edje_object_signal_emit(term->base, "media,image", "terminology");
-          }
-        else if (term->mediatype == TYPE_SCALE)
-          {
-             edje_object_signal_emit(term->bg, "media,scale", "terminology");
-             edje_object_signal_emit(term->base, "media,scale", "terminology");
-          }
-        else if (term->mediatype == TYPE_EDJE)
-          {
+        switch (term->mediatype)
+          {
+           case MEDIA_TYPE_IMG:
+              edje_object_signal_emit(term->bg, "media,image", "terminology");
+              edje_object_signal_emit(term->base, "media,image", 
"terminology");
+              break;
+           case MEDIA_TYPE_SCALE:
+              edje_object_signal_emit(term->bg, "media,scale", "terminology");
+              edje_object_signal_emit(term->base, "media,scale", 
"terminology");
+              break;
+           case MEDIA_TYPE_EDJE:
              edje_object_signal_emit(term->bg, "media,edje", "terminology");
              edje_object_signal_emit(term->base, "media,edje", "terminology");
-          }
-        else if (term->mediatype == TYPE_MOV)
-          {
+             break;
+           case MEDIA_TYPE_MOV:
              edje_object_signal_emit(term->bg, "media,movie", "terminology");
              edje_object_signal_emit(term->base, "media,movie", "terminology");
+             break;
+           case MEDIA_TYPE_UNKNOWN:
+           default:
+             break;
           }
      }
-   
+
    if ((term->focused) && (term->wn->focused))
      {
         edje_object_signal_emit(term->bg, "focus,in", "terminology");
diff --git a/src/bin/media.c b/src/bin/media.c
index 06b7ec6..6a64015 100644
--- a/src/bin/media.c
+++ b/src/bin/media.c
@@ -32,7 +32,8 @@ struct _Media
    int iw, ih;
    int sw, sh;
    int fr, frnum, loops;
-   int mode, type;
+   int mode;
+   Media_Type type;
    int resizes;
    struct {
       Evas_Coord x, y;
@@ -53,7 +54,7 @@ static const char *
 _is_fmt(const char *f, const char **extn)
 {
    int i, len, l;
-   
+
    len = strlen(f);
    for (i = 0; extn[i]; i++)
      {
@@ -89,7 +90,7 @@ _et_connect(void *data EINA_UNUSED, Ethumb_Client *c, 
Eina_Bool ok)
    if (ok)
      {
         Evas_Object *o;
-        
+
         et_connected = EINA_TRUE;
         ethumb_client_on_server_die_callback_set(c, _et_disconnect,
                                                  NULL, NULL);
@@ -123,7 +124,7 @@ _type_thumb_calc(Evas_Object *obj, Evas_Coord x, Evas_Coord 
y, Evas_Coord w, Eva
    else
      {
         int iw = 1, ih = 1;
-        
+
         iw = w;
         ih = (sd->ih * w) / sd->iw;
         if (ih > h)
@@ -165,7 +166,7 @@ _et_done(Ethumb_Client *c EINA_UNUSED, const char *file, 
const char *key, void *
    Evas_Object *obj = data;
    Media *sd = evas_object_smart_data_get(obj);
    if (!sd) return;
-   
+
 //   if (c != et_client) return;
    sd->et_req = NULL;
    evas_object_event_callback_add(sd->o_img, EVAS_CALLBACK_IMAGE_PRELOADED,
@@ -234,7 +235,7 @@ _type_thumb_init(Evas_Object *obj)
    Evas_Object *o;
    Media *sd = evas_object_smart_data_get(obj);
    if (!sd) return;
-   sd->type = TYPE_THUMB;
+   sd->type = MEDIA_TYPE_THUMB;
    _et_init();
    o = sd->o_img = evas_object_image_filled_add(evas_object_evas_get(obj));
    evas_object_image_load_orientation_set(o, EINA_TRUE);
@@ -274,7 +275,7 @@ _cb_img_frame(void *data)
    if ((sd->fr >= sd->frnum) && (fr == 1))
      {
         int loops;
-        
+
         if (evas_object_image_animated_loop_type_get(sd->o_img) ==
             EVAS_IMAGE_ANIMATED_HINT_NONE)
           {
@@ -318,7 +319,6 @@ _type_img_init(Evas_Object *obj)
    Evas_Object *o;
    Media *sd = evas_object_smart_data_get(obj);
    if (!sd) return;
-   sd->type = TYPE_IMG;
    o = sd->o_img = evas_object_image_filled_add(evas_object_evas_get(obj));
    evas_object_smart_member_add(o, obj);
    evas_object_clip_set(o, sd->clip);
@@ -345,7 +345,7 @@ _type_img_calc(Evas_Object *obj, Evas_Coord x, Evas_Coord 
y, Evas_Coord w, Evas_
    else
      {
         int iw = 1, ih = 1;
-        
+
         if ((sd->mode & MEDIA_SIZE_MASK) == MEDIA_BG)
           {
              iw = w;
@@ -414,7 +414,6 @@ _type_scale_init(Evas_Object *obj)
    Evas_Object *o;
    Media *sd = evas_object_smart_data_get(obj);
    if (!sd) return;
-   sd->type = TYPE_SCALE;
    o = sd->o_img = evas_object_image_filled_add(evas_object_evas_get(obj));
    evas_object_smart_member_add(o, obj);
    evas_object_clip_set(o, sd->clip);
@@ -441,7 +440,7 @@ _type_scale_calc(Evas_Object *obj, Evas_Coord x, Evas_Coord 
y, Evas_Coord w, Eva
    else
      {
         int iw = 1, ih = 1;
-        
+
         if ((sd->mode & MEDIA_SIZE_MASK) == MEDIA_BG)
           {
              iw = w;
@@ -477,7 +476,7 @@ _type_scale_calc(Evas_Object *obj, Evas_Coord x, Evas_Coord 
y, Evas_Coord w, Eva
    if (!sd->nosmooth)
      {
         Evas_Coord lw, lh;
-        
+
         lw = w;
         lh = h;
         if (lw < 256) lw = 256;
@@ -530,7 +529,6 @@ _type_edje_init(Evas_Object *obj)
      };
    Media *sd = evas_object_smart_data_get(obj);
    if (!sd) return;
-   sd->type = TYPE_EDJE;
    o = sd->o_img = edje_object_add(evas_object_evas_get(obj));
    evas_object_smart_member_add(o, obj);
    evas_object_clip_set(o, sd->clip);
@@ -712,13 +710,12 @@ _type_mov_init(Evas_Object *obj)
         "gstreamer1"
     };
    char *mod = NULL;
-        
+
    Media *sd = evas_object_smart_data_get(obj);
    if (!sd) return;
-   sd->type = TYPE_MOV;
    emotion_init();
    o = sd->o_img = emotion_object_add(evas_object_evas_get(obj));
-   if ((sd->config->vidmod >= 0) && 
+   if ((sd->config->vidmod >= 0) &&
        (sd->config->vidmod < (int)EINA_C_ARRAY_LENGTH(modules)))
      mod = modules[sd->config->vidmod];
    if (!emotion_object_init(o, mod))
@@ -742,7 +739,7 @@ _type_mov_init(Evas_Object *obj)
                                   _cb_mov_ref, obj);
    emotion_object_file_set(o, sd->realf);
    if (((sd->mode & MEDIA_OPTIONS_MASK) & MEDIA_RECOVER)
-       && (sd->type == TYPE_MOV) && (sd->o_img))
+       && (sd->type == MEDIA_TYPE_MOV) && (sd->o_img))
      emotion_object_last_position_load(sd->o_img);
    else
      media_position_set(obj, 0.0);
@@ -795,7 +792,7 @@ _type_mov_calc(Evas_Object *obj, Evas_Coord x, Evas_Coord 
y, Evas_Coord w, Evas_
      {
         int iw = 1, ih = 1;
         double ratio;
-        
+
         ratio = emotion_object_ratio_get(sd->o_img);
         if (ratio > 0.0) sd->iw = (sd->ih * ratio) + 0.5;
         else ratio = (double)sd->iw / (double)sd->ih;
@@ -862,7 +859,7 @@ _smart_del(Evas_Object *obj)
    Media *sd = evas_object_smart_data_get(obj);
    if (!sd) return;
    if (((sd->mode & MEDIA_OPTIONS_MASK) & MEDIA_SAVE)
-       && (sd->type == TYPE_MOV) && (sd->o_img))
+       && (sd->type == MEDIA_TYPE_MOV) && (sd->o_img))
      emotion_object_last_position_save(sd->o_img);
    if (sd->url)
      {
@@ -921,14 +918,14 @@ _unsmooth_timeout(void *data)
    evas_object_geometry_get(data, &ox, &oy, &ow, &oh);
    sd->smooth_timer = NULL;
    sd->nosmooth = EINA_FALSE;
-   if ((sd->type == TYPE_IMG) || (sd->type == TYPE_SCALE))
+   if ((sd->type == MEDIA_TYPE_IMG) || (sd->type == MEDIA_TYPE_SCALE))
      {
         evas_object_image_smooth_scale_set(sd->o_img, !sd->nosmooth);
         if (sd->o_tmp)
           evas_object_image_smooth_scale_set(sd->o_tmp, !sd->nosmooth);
-        if (sd->type == TYPE_SCALE) _type_scale_calc(data, ox, oy, ow, oh);
+        if (sd->type == MEDIA_TYPE_SCALE) _type_scale_calc(data, ox, oy, ow, 
oh);
      }
-   else if (sd->type == TYPE_MOV)
+   else if (sd->type == MEDIA_TYPE_MOV)
      emotion_object_smooth_scale_set(sd->o_img, !sd->nosmooth);
    return EINA_FALSE;
 }
@@ -938,7 +935,7 @@ _smooth_handler(Evas_Object *obj)
 {
    Media *sd = evas_object_smart_data_get(obj);
    double interval;
-   
+
    if (!sd) return;
    interval = ecore_animator_frametime_get();
    if (interval <= 0.0) interval = 1.0/60.0;
@@ -948,13 +945,13 @@ _smooth_handler(Evas_Object *obj)
           {
              sd->nosmooth = EINA_TRUE;
              sd->resizes = 0;
-             if ((sd->type == TYPE_IMG) || (sd->type == TYPE_SCALE))
+             if ((sd->type == MEDIA_TYPE_IMG) || (sd->type == 
MEDIA_TYPE_SCALE))
                {
                   evas_object_image_smooth_scale_set(sd->o_img, !sd->nosmooth);
                   if (sd->o_tmp)
                     evas_object_image_smooth_scale_set(sd->o_tmp, 
!sd->nosmooth);
                }
-             else if (sd->type == TYPE_MOV)
+             else if (sd->type == MEDIA_TYPE_MOV)
                emotion_object_smooth_scale_set(sd->o_img, !sd->nosmooth);
              if (sd->smooth_timer)
                sd->smooth_timer = ecore_timer_del(sd->smooth_timer);
@@ -984,11 +981,16 @@ _smart_calculate(Evas_Object *obj)
    _smooth_handler(obj);
    sd->w = ow;
    sd->h = oh;
-   if (sd->type == TYPE_IMG) _type_img_calc(obj, ox, oy, ow, oh);
-   else if (sd->type == TYPE_SCALE) _type_scale_calc(obj, ox, oy, ow, oh);
-   else if (sd->type == TYPE_EDJE) _type_edje_calc(obj, ox, oy, ow, oh);
-   else if (sd->type == TYPE_MOV) _type_mov_calc(obj, ox, oy, ow, oh);
-   else if (sd->type == TYPE_THUMB) _type_thumb_calc(obj, ox, oy, ow, oh);
+   switch (sd->type)
+     {
+      case MEDIA_TYPE_IMG: _type_img_calc(obj, ox, oy, ow, oh); break;
+      case MEDIA_TYPE_SCALE: _type_scale_calc(obj, ox, oy, ow, oh); break;
+      case MEDIA_TYPE_EDJE: _type_edje_calc(obj, ox, oy, ow, oh); break;
+      case MEDIA_TYPE_MOV: _type_mov_calc(obj, ox, oy, ow, oh); break;
+      case MEDIA_TYPE_THUMB: _type_thumb_calc(obj, ox, oy, ow, oh); break;
+      case MEDIA_TYPE_UNKNOWN:
+         return;
+     }
    evas_object_move(sd->clip, ox, oy);
    evas_object_resize(sd->clip, ow, oh);
    if (sd->o_busy)
@@ -1022,7 +1024,7 @@ _url_prog_cb(void *data, int type EINA_UNUSED, void 
*event_info)
    if (ev->down.total > 0.0)
      {
         double perc;
-        
+
         if (!sd->downloading)
           edje_object_signal_emit(sd->o_busy, "downloading", "terminology");
         sd->downloading = EINA_TRUE;
@@ -1030,7 +1032,7 @@ _url_prog_cb(void *data, int type EINA_UNUSED, void 
*event_info)
         if (perc != sd->download_perc)
           {
              Edje_Message_Float msg;
-             
+
              sd->download_perc = perc;
              msg.val = perc;
              edje_object_message_send(sd->o_busy, EDJE_MESSAGE_FLOAT, 1, &msg);
@@ -1047,7 +1049,8 @@ _url_compl_cb(void *data, int type EINA_UNUSED, void 
*event_info)
    Media *sd = evas_object_smart_data_get(obj);
    if (!sd) return EINA_TRUE;
    if (ev->url_con != sd->url) return EINA_TRUE;
-   
+
+
    edje_object_signal_emit(sd->o_busy, "done", "terminology");
    ecore_event_handler_del(sd->url_prog_hand);
    ecore_event_handler_del(sd->url_compl_hand);
@@ -1057,18 +1060,24 @@ _url_compl_cb(void *data, int type EINA_UNUSED, void 
*event_info)
    sd->url = NULL;
    sd->url_prog_hand = NULL;
    sd->url_compl_hand = NULL;
-   
-   if      (_is_fmt(sd->src, extn_img))
-     _type_img_init(obj);
-   else if (_is_fmt(sd->src, extn_scale))
-     _type_scale_init(obj);
-   else if (_is_fmt(sd->src, extn_edj))
-     _type_edje_init(obj);
-   // FIXME: handle audio specially
-   else if (_is_fmt(sd->src, extn_aud))
-     _type_mov_init(obj);
-   else if (_is_fmt(sd->src, extn_mov))
-     _type_mov_init(obj);
+
+   switch (sd->type)
+     {
+      case MEDIA_TYPE_IMG:
+         _type_img_init(obj);
+         break;
+      case MEDIA_TYPE_SCALE:
+         _type_scale_init(obj);
+         break;
+      case MEDIA_TYPE_EDJE:
+         _type_edje_init(obj);
+         break;
+      case MEDIA_TYPE_MOV:
+         _type_mov_init(obj);
+         break;
+      default:
+         break;
+     }
    evas_object_raise(sd->o_busy);
    evas_object_raise(sd->o_event);
    _smart_calculate(obj);
@@ -1081,7 +1090,7 @@ _mouse_down_cb(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED, vo
    Evas_Event_Mouse_Down *ev = event;
    Media *sd = evas_object_smart_data_get(data);
    if (!sd) return;
-   
+
    if (sd->down.down) return;
    if (ev->button != 1) return;
    sd->down.x = ev->canvas.x;
@@ -1096,7 +1105,7 @@ _mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED, void
    Media *sd = evas_object_smart_data_get(data);
    Evas_Coord dx, dy;
    if (!sd) return;
-   
+
    if (!sd->down.down) return;
    sd->down.down = EINA_FALSE;
    dx = abs(ev->canvas.x - sd->down.x);
@@ -1124,12 +1133,12 @@ _smart_init(void)
 }
 
 Evas_Object *
-media_add(Evas_Object *parent, const char *src, const Config *config, int 
mode, int *type)
+media_add(Evas_Object *parent, const char *src, const Config *config, int mode,
+          Media_Type type)
 {
    Evas *e;
    Evas_Object *obj = NULL;
    Media *sd = NULL;
-   int t;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
    e = evas_object_evas_get(parent);
@@ -1144,11 +1153,10 @@ media_add(Evas_Object *parent, const char *src, const 
Config *config, int mode,
    sd->config = config;
    sd->mode = mode;
    sd->tmpfd = -1;
+   sd->type = type;
 
-   t = media_src_type_get(sd->src);
-   
 #if HAVE_MKSTEMPS
-   if (link_is_url(sd->src) && (t != TYPE_MOV))
+   if (link_is_url(sd->src) && (type != MEDIA_TYPE_MOV))
      {
         const char *ext = NULL;
         char *tbuf;
@@ -1175,10 +1183,31 @@ media_add(Evas_Object *parent, const char *src, const 
Config *config, int mode,
           sd->ext = ext;
         else if ((ext = _is_fmt(src, extn_mov)))
           sd->ext = ext;
+        else
+          {
+             switch (type)
+               {
+                case MEDIA_TYPE_IMG:
+                   sd->ext = ".png";
+                   break;
+                case MEDIA_TYPE_SCALE:
+                   sd->ext = ".svg";
+                   break;
+                case MEDIA_TYPE_EDJE:
+                   sd->ext = ".edj";
+                   break;
+                case MEDIA_TYPE_MOV:
+                   sd->ext = ".avi";
+                   break;
+                case MEDIA_TYPE_UNKNOWN:
+                case MEDIA_TYPE_THUMB:
+                   break;
+               }
+          }
         if (sd->ext)
           {
              char buf[4096];
-             
+
              snprintf(buf, sizeof(buf), "/tmp/tmngyXXXXXX%s", sd->ext);
              sd->tmpfd = mkstemps(buf, strlen(sd->ext));
              if (sd->tmpfd >= 0)
@@ -1207,13 +1236,13 @@ media_add(Evas_Object *parent, const char *src, const 
Config *config, int mode,
                        else
                          {
                             Evas_Object *o;
-                            
+
                             o = sd->o_busy = 
edje_object_add(evas_object_evas_get(obj));
                             evas_object_smart_member_add(o, obj);
                             theme_apply(o, sd->config, 
"terminology/mediabusy");
                             evas_object_show(o);
                             edje_object_signal_emit(o, "busy", "terminology");
-                            
+
                             sd->realf = eina_stringshare_add(buf);
                             sd->url_prog_hand = ecore_event_handler_add
                               (ECORE_CON_EVENT_URL_PROGRESS, _url_prog_cb, 
obj);
@@ -1222,6 +1251,10 @@ media_add(Evas_Object *parent, const char *src, const 
Config *config, int mode,
                          }
                     }
                }
+             else
+               {
+                  ERR(_("Function %s failed: %s"), "mkstemps()", 
strerror(errno));
+               }
           }
      }
 #endif
@@ -1249,25 +1282,25 @@ media_add(Evas_Object *parent, const char *src, const 
Config *config, int mode,
      }
    else
      {
-        switch (t)
+        switch (type)
           {
-           case TYPE_IMG:
+           case MEDIA_TYPE_IMG:
              if (!sd->url) _type_img_init(obj);
              break;
-           case TYPE_SCALE:
+           case MEDIA_TYPE_SCALE:
              if (!sd->url) _type_scale_init(obj);
              break;
-           case TYPE_EDJE:
+           case MEDIA_TYPE_EDJE:
              if (!sd->url) _type_edje_init(obj);
              break;
-           case TYPE_MOV:
+           case MEDIA_TYPE_MOV:
              if (!sd->url) _type_mov_init(obj);
              break;
            default:
              break;
           }
      }
-   
+
    sd->o_event = evas_object_rectangle_add(e);
    evas_object_color_set(sd->o_event, 0, 0, 0, 0);
    evas_object_repeat_events_set(sd->o_event, EINA_TRUE);
@@ -1278,8 +1311,7 @@ media_add(Evas_Object *parent, const char *src, const 
Config *config, int mode,
                                   _mouse_down_cb, obj);
    evas_object_event_callback_add(sd->o_event, EVAS_CALLBACK_MOUSE_UP,
                                   _mouse_up_cb, obj);
-   
-   if (type) *type = t;
+
    return obj;
 
 err:
@@ -1292,7 +1324,7 @@ void
 media_mute_set(Evas_Object *obj, Eina_Bool mute)
 {
    Media *sd = evas_object_smart_data_get(obj);
-   if ((!sd) || (sd->type != TYPE_MOV)) return;
+   if ((!sd) || (sd->type != MEDIA_TYPE_MOV)) return;
    emotion_object_audio_mute_set(sd->o_img, mute);
    if (mute)
       edje_object_signal_emit(sd->o_ctrl, "mute,set", "terminology");
@@ -1304,7 +1336,7 @@ void
 media_visualize_set(Evas_Object *obj, Eina_Bool visualize)
 {
    Media *sd = evas_object_smart_data_get(obj);
-   if ((!sd) || (sd->type != TYPE_MOV)) return;
+   if ((!sd) || (sd->type != MEDIA_TYPE_MOV)) return;
    if (visualize)
      {
         /*
@@ -1323,7 +1355,7 @@ void
 media_play_set(Evas_Object *obj, Eina_Bool play)
 {
    Media *sd = evas_object_smart_data_get(obj);
-   if ((!sd) || (sd->type != TYPE_MOV)) return;
+   if ((!sd) || (sd->type != MEDIA_TYPE_MOV)) return;
    emotion_object_play_set(sd->o_img, play);
    if (play)
      {
@@ -1341,7 +1373,7 @@ Eina_Bool
 media_play_get(Evas_Object *obj)
 {
    Media *sd = evas_object_smart_data_get(obj);
-   if ((!sd) || (sd->type != TYPE_MOV)) return EINA_FALSE;
+   if ((!sd) || (sd->type != MEDIA_TYPE_MOV)) return EINA_FALSE;
    return emotion_object_play_get(sd->o_img);
 }
 
@@ -1349,7 +1381,7 @@ void
 media_stop(Evas_Object *obj)
 {
    Media *sd = evas_object_smart_data_get(obj);
-   if ((!sd) || (sd->type != TYPE_MOV)) return;
+   if ((!sd) || (sd->type != MEDIA_TYPE_MOV)) return;
    evas_object_smart_callback_call(obj, "stop", NULL);
    evas_object_del(obj);
 }
@@ -1359,7 +1391,7 @@ media_position_set(Evas_Object *obj, double pos)
 {
    double len;
    Media *sd = evas_object_smart_data_get(obj);
-   if ((!sd) || (sd->type != TYPE_MOV)) return;
+   if ((!sd) || (sd->type != MEDIA_TYPE_MOV)) return;
    len = emotion_object_play_length_get(sd->o_img);
    emotion_object_position_set(sd->o_img, len * pos);
 }
@@ -1368,7 +1400,7 @@ void
 media_volume_set(Evas_Object *obj, double vol)
 {
    Media *sd = evas_object_smart_data_get(obj);
-   if ((!sd) || (sd->type != TYPE_MOV)) return;
+   if ((!sd) || (sd->type != MEDIA_TYPE_MOV)) return;
    emotion_object_audio_volume_set(sd->o_img, vol);
    edje_object_part_drag_value_set(sd->o_ctrl, "terminology.voldrag", vol, 
vol);
 }
@@ -1381,15 +1413,15 @@ media_get(const Evas_Object *obj)
    return sd->realf;
 }
 
-int
+Media_Type
 media_src_type_get(const char *src)
 {
-   int type = TYPE_UNKNOWN;
+   Media_Type type = MEDIA_TYPE_UNKNOWN;
 
-   if      (_is_fmt(src, extn_img))   type = TYPE_IMG;
-   else if (_is_fmt(src, extn_scale)) type = TYPE_SCALE;
-   else if (_is_fmt(src, extn_edj))   type = TYPE_EDJE;
-   else if (_is_fmt(src, extn_mov))   type = TYPE_MOV;
+   if      (_is_fmt(src, extn_img))   type = MEDIA_TYPE_IMG;
+   else if (_is_fmt(src, extn_scale)) type = MEDIA_TYPE_SCALE;
+   else if (_is_fmt(src, extn_edj))   type = MEDIA_TYPE_EDJE;
+   else if (_is_fmt(src, extn_mov))   type = MEDIA_TYPE_MOV;
    return type;
 }
 
diff --git a/src/bin/media.h b/src/bin/media.h
index a49532a..8b5d082 100644
--- a/src/bin/media.h
+++ b/src/bin/media.h
@@ -8,21 +8,26 @@
 #define MEDIA_POP          0x0001
 #define MEDIA_STRETCH      0x0002
 #define MEDIA_THUMB        0x0003
+#define MEDIA_TOOLTIP      0x0004
 // bitmask for options - on or off
 #define MEDIA_RECOVER      0x0010
 #define MEDIA_SAVE         0x0020
 
-#define TYPE_UNKNOWN -1
-#define TYPE_IMG      0
-#define TYPE_SCALE    1
-#define TYPE_EDJE     2
-#define TYPE_MOV      3
-#define TYPE_THUMB    4
-#define TYPE_ICON     5
+
+typedef enum _Media_Type Media_Type;
+
+enum _Media_Type {
+     MEDIA_TYPE_UNKNOWN,
+     MEDIA_TYPE_IMG,
+     MEDIA_TYPE_SCALE,
+     MEDIA_TYPE_EDJE,
+     MEDIA_TYPE_MOV,
+     MEDIA_TYPE_THUMB,
+};
 
 #include "config.h"
 
-Evas_Object *media_add(Evas_Object *parent, const char *src, const Config 
*config, int mode, int *type);
+Evas_Object *media_add(Evas_Object *parent, const char *src, const Config 
*config, int mode, Media_Type type);
 void media_mute_set(Evas_Object *obj, Eina_Bool mute);
 void media_play_set(Evas_Object *obj, Eina_Bool play);
 Eina_Bool media_play_get(Evas_Object *obj);
@@ -31,7 +36,7 @@ void media_volume_set(Evas_Object *obj, double vol);
 void media_visualize_set(Evas_Object *obj, Eina_Bool visualize);
 void media_stop(Evas_Object *obj);
 const char *media_get(const Evas_Object *obj);
-int media_src_type_get(const char *src);
+Media_Type media_src_type_get(const char *src);
 Evas_Object *media_control_get(Evas_Object *obj);
 
 #endif
diff --git a/src/bin/options_wallpaper.c b/src/bin/options_wallpaper.c
index 31c395c..c9eec9f 100644
--- a/src/bin/options_wallpaper.c
+++ b/src/bin/options_wallpaper.c
@@ -114,14 +114,16 @@ _grid_content_get(void *data, Evas_Object *obj, const 
char *part)
      {
         if (item->path)
           {
-             int i, ret = 0;
+             int i;
+             Media_Type type;
              for (i = 0; extn_edj[i]; i++)
                {
                   if (eina_str_has_extension(item->path, extn_edj[i]))
                     return media_add(obj, item->path, config,
-                                     MEDIA_BG, &ret);
+                                     MEDIA_BG, MEDIA_TYPE_EDJE);
                }
-             return media_add(obj, item->path, config, MEDIA_THUMB, &ret);
+             type = media_src_type_get(item->path);
+             return media_add(obj, item->path, config, MEDIA_THUMB, type);
           }
         else
           {
diff --git a/src/bin/termio.c b/src/bin/termio.c
index 22ade0e..0c92195 100644
--- a/src/bin/termio.c
+++ b/src/bin/termio.c
@@ -771,14 +771,14 @@ _activate_link(Evas_Object *obj, Eina_Bool may_inline)
              type = media_src_type_get(sd->link.string);
              if (may_inline && _should_inline(obj))
                {
-                  if ((type == TYPE_IMG) ||
-                      (type == TYPE_SCALE) ||
-                      (type == TYPE_EDJE))
+                  if ((type == MEDIA_TYPE_IMG) ||
+                      (type == MEDIA_TYPE_SCALE) ||
+                      (type == MEDIA_TYPE_EDJE))
                     {
                        evas_object_smart_callback_call(obj, "popup", NULL);
                        handled = EINA_TRUE;
                     }
-                  else if (type == TYPE_MOV)
+                  else if (type == MEDIA_TYPE_MOV)
                     {
                        evas_object_smart_callback_call(obj, "popup", NULL);
                        handled = EINA_TRUE;
@@ -786,15 +786,15 @@ _activate_link(Evas_Object *obj, Eina_Bool may_inline)
                }
              if (!handled)
                {
-                  if ((type == TYPE_IMG) ||
-                      (type == TYPE_SCALE) ||
-                      (type == TYPE_EDJE))
+                  if ((type == MEDIA_TYPE_IMG) ||
+                      (type == MEDIA_TYPE_SCALE) ||
+                      (type == MEDIA_TYPE_EDJE))
                     {
                        if ((config->helper.local.image) &&
                            (config->helper.local.image[0]))
                          cmd = config->helper.local.image;
                     }
-                  else if (type == TYPE_MOV)
+                  else if (type == MEDIA_TYPE_MOV)
                     {
                        if ((config->helper.local.video) &&
                            (config->helper.local.video[0]))
@@ -822,15 +822,15 @@ _activate_link(Evas_Object *obj, Eina_Bool may_inline)
              type = media_src_type_get(sd->link.string);
              if (may_inline && _should_inline(obj))
                {
-                  if ((type == TYPE_IMG) ||
-                      (type == TYPE_SCALE) ||
-                      (type == TYPE_EDJE))
+                  if ((type == MEDIA_TYPE_IMG) ||
+                      (type == MEDIA_TYPE_SCALE) ||
+                      (type == MEDIA_TYPE_EDJE))
                     {
                        // XXX: begin fetch of url, once done, show
                        evas_object_smart_callback_call(obj, "popup", NULL);
                        handled = EINA_TRUE;
                     }
-                  else if (type == TYPE_MOV)
+                  else if (type == MEDIA_TYPE_MOV)
                     {
                        // XXX: if no http:// add
                        evas_object_smart_callback_call(obj, "popup", NULL);
@@ -839,15 +839,15 @@ _activate_link(Evas_Object *obj, Eina_Bool may_inline)
                }
              if (!handled)
                {
-                  if ((type == TYPE_IMG) ||
-                      (type == TYPE_SCALE) ||
-                      (type == TYPE_EDJE))
+                  if ((type == MEDIA_TYPE_IMG) ||
+                      (type == MEDIA_TYPE_SCALE) ||
+                      (type == MEDIA_TYPE_EDJE))
                     {
                        if ((config->helper.url.image) &&
                            (config->helper.url.image[0]))
                          cmd = config->helper.url.image;
                     }
-                  else if (type == TYPE_MOV)
+                  else if (type == MEDIA_TYPE_MOV)
                     {
                        if ((config->helper.url.video) &&
                            (config->helper.url.video[0]))
@@ -939,10 +939,10 @@ _cb_link_down(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED, voi
           {
              int type = media_src_type_get(sd->link.string);
 
-             if ((type == TYPE_IMG) ||
-                 (type == TYPE_SCALE) ||
-                 (type == TYPE_EDJE) ||
-                 (type == TYPE_MOV))
+             if ((type == MEDIA_TYPE_IMG) ||
+                 (type == MEDIA_TYPE_SCALE) ||
+                 (type == MEDIA_TYPE_EDJE) ||
+                 (type == MEDIA_TYPE_MOV))
                elm_ctxpopup_item_append(ctxp, _("Preview"), NULL,
                                         _cb_ctxp_link_preview, sd->self);
           }
@@ -1193,7 +1193,7 @@ _update_link(Evas_Object *obj, Termio *sd,
                                        _cb_link_move, obj);
         if ((!popup_exists) && link_is_email(sd->link.string))
           {
-             gravatar_tooltip(o, sd->link.string);
+             gravatar_tooltip(o, sd->config, sd->link.string);
           }
      }
 }
@@ -1257,8 +1257,8 @@ _smart_media_clicked(void *data, Evas_Object *obj, void 
*info EINA_UNUSED)
              if (config)
                {
                   if ((!config->helper.inline_please) ||
-                      (!((type == TYPE_IMG) || (type == TYPE_SCALE) ||
-                         (type == TYPE_EDJE) || (type == TYPE_MOV))))
+                      (!((type == MEDIA_TYPE_IMG)  || (type == 
MEDIA_TYPE_SCALE) ||
+                         (type == MEDIA_TYPE_EDJE) || (type == 
MEDIA_TYPE_MOV))))
                     {
                        const char *cmd = NULL;
 
@@ -1807,7 +1807,7 @@ static void
 _block_media_activate(Evas_Object *obj, Termblock *blk)
 {
    Termio *sd = evas_object_smart_data_get(obj);
-   int type = 0;
+   Media_Type type;
    int media = MEDIA_STRETCH;
    Evas_Object *mctrl;
 
@@ -1821,8 +1821,9 @@ _block_media_activate(Evas_Object *obj, Termblock *blk)
      media |= MEDIA_SAVE;
    else
      media |= MEDIA_RECOVER | MEDIA_SAVE;
-   blk->obj = media_add(obj, blk->path, sd->config, media, &type);
-   if (type == TYPE_MOV)
+   type = media_src_type_get(blk->path);
+   blk->obj = media_add(obj, blk->path, sd->config, media, type);
+   if (type == MEDIA_TYPE_MOV)
      media_play_set(blk->obj, blk->mov_state == MOVIE_STATE_PLAY);
    evas_object_event_callback_add
      (blk->obj, EVAS_CALLBACK_DEL, _smart_media_del, blk);

-- 


Reply via email to