update ibar icon to match shelf size
authorSebastian Dransfeld <sd@tango.flipp.net>
Mon, 25 Oct 2010 10:21:14 +0000 (10:21 +0000)
committerSebastian Dransfeld <sd@tango.flipp.net>
Mon, 25 Oct 2010 10:21:14 +0000 (10:21 +0000)
SVN revision: 53852

src/bin/e_utils.c
src/bin/e_utils.h
src/modules/ibar/e_mod_main.c

index 3256d4c..6b9b92e 100644 (file)
@@ -978,6 +978,26 @@ e_util_icon_add(const char *path, Evas *evas)
    return o;
 }
 
+EAPI void
+e_util_icon_file_set(Evas_Object *icon, const char *path)
+{
+   const char *ext;
+
+   if (!path) return;
+   if (!ecore_file_exists(path)) return;
+
+   ext = strrchr(path, '.');
+   if (ext)
+     {
+       if (!strcmp(ext, ".edj"))
+         e_icon_file_edje_set(icon, path, "icon");
+       else
+         e_icon_file_set(icon, path);
+     }
+   else
+     e_icon_file_set(icon, path);
+}
+
 EAPI Evas_Object *
 e_util_desktop_icon_add(Efreet_Desktop *desktop, unsigned int size, Evas *evas)
 {
@@ -985,6 +1005,13 @@ e_util_desktop_icon_add(Efreet_Desktop *desktop, unsigned int size, Evas *evas)
    return e_util_icon_theme_icon_add(desktop->icon, size, evas);
 }
 
+EAPI void
+e_util_desktop_icon_file_set(Evas_Object *icon, Efreet_Desktop *desktop, unsigned int size)
+{
+   if ((!desktop) || (!desktop->icon)) return;
+   return e_util_icon_theme_icon_file_set(icon, desktop->icon, size);
+}
+
 EAPI Evas_Object *
 e_util_icon_theme_icon_add(const char *icon_name, unsigned int size, Evas *evas)
 {
@@ -1007,6 +1034,27 @@ e_util_icon_theme_icon_add(const char *icon_name, unsigned int size, Evas *evas)
 }
 
 EAPI void
+e_util_icon_theme_icon_file_set(Evas_Object *icon, const char *icon_name, unsigned int size)
+{
+   if (!icon_name) return;
+   if (icon_name[0] == '/')
+     {
+       e_util_icon_file_set(icon, icon_name);
+     }
+   else
+     {
+       char *path;
+
+       path = efreet_icon_path_find(e_config->icon_theme, icon_name, size);
+       if (path)
+         {
+            e_util_icon_file_set(icon, path);
+            free(path);
+         }
+     }
+}
+
+EAPI void
 e_util_desktop_menu_item_icon_add(Efreet_Desktop *desktop, unsigned int size, E_Menu_Item *mi)
 {
    char *path = NULL;
index 2e96fab..65b308a 100644 (file)
@@ -61,8 +61,11 @@ EAPI char        *e_util_file_time_get(time_t ftime);
 EAPI void         e_util_library_path_strip(void);
 EAPI void         e_util_library_path_restore(void);
 EAPI Evas_Object *e_util_icon_add(const char *path, Evas *evas);
+EAPI void         e_util_icon_file_set(Evas_Object *icon, const char *path);
 EAPI Evas_Object *e_util_desktop_icon_add(Efreet_Desktop *desktop, unsigned int size, Evas *evas);
+EAPI void         e_util_desktop_icon_file_set(Evas_Object *icon, Efreet_Desktop *desktop, unsigned int size);
 EAPI Evas_Object *e_util_icon_theme_icon_add(const char *icon_name, unsigned int size, Evas *evas);
+EAPI void         e_util_icon_theme_icon_file_set(Evas_Object *icon, const char *icon_name, unsigned int size);
 EAPI void         e_util_desktop_menu_item_icon_add(Efreet_Desktop *desktop, unsigned int size, E_Menu_Item *mi);
 EAPI int          e_util_dir_check(const char *dir);
 EAPI void         e_util_defer_object_del(E_Object *obj);
index 4a2d266..231934a 100644 (file)
@@ -413,6 +413,15 @@ _ibar_resize_handle(IBar *b)
    e_box_freeze(b->o_box);
    EINA_LIST_FOREACH(b->icons, l, ic)
      {
+       if ((w > 0) && (h > 0))
+          {
+             int size;
+
+             size = MAX(w, h);
+            /* TODO: Check icon padding */
+             if (ic->o_icon) e_util_desktop_icon_file_set(ic->o_icon, ic->app, size);
+             if (ic->o_icon2) e_util_desktop_icon_file_set(ic->o_icon2, ic->app, size);
+          }
        e_box_pack_options_set(ic->o_holder,
                               1, 1, /* fill */
                               0, 0, /* expand */
@@ -589,7 +598,6 @@ _ibar_icon_free(IBar_Icon *ic)
 static void
 _ibar_icon_fill(IBar_Icon *ic)
 {
-   /* TODO: Correct icon size! */
    if (ic->o_icon) evas_object_del(ic->o_icon);
    ic->o_icon = e_util_desktop_icon_add(ic->app, 48, 
                                         evas_object_evas_get(ic->ibar->o_box));