*Idle icon scanning, but it's nsot ready yet, so it's #if'ed out.

*Minor cache tweaks.

*Bit more instrumentation so I can see what the cache code is doing.


SVN revision: 26281
This commit is contained in:
David Walter Seikel 2006-10-01 18:34:54 +00:00
parent f3b950112d
commit d34318fae3
2 changed files with 91 additions and 20 deletions

View File

@ -15,6 +15,7 @@
#define DEBUG 0 #define DEBUG 0
#define NO_APP_LIST 1 #define NO_APP_LIST 1
#define IDLE_ICONS 0
/* local subsystem functions */ /* local subsystem functions */
typedef struct _E_App_Change_Info E_App_Change_Info; typedef struct _E_App_Change_Info E_App_Change_Info;
typedef struct _E_App_Callback E_App_Callback; typedef struct _E_App_Callback E_App_Callback;
@ -35,7 +36,6 @@ struct _E_App_Callback
struct _E_App_Hash_Idler struct _E_App_Hash_Idler
{ {
Ecore_Idler *idler; Ecore_Idler *idler;
Evas *evas;
int all_done; int all_done;
double begin; double begin;
}; };
@ -43,6 +43,7 @@ struct _E_App_Hash_Idler
static Evas_Bool _e_apps_hash_cb_init (Evas_Hash *hash, const char *key, void *data, void *fdata); static Evas_Bool _e_apps_hash_cb_init (Evas_Hash *hash, const char *key, void *data, void *fdata);
static int _e_apps_hash_idler_cb (void *data); static int _e_apps_hash_idler_cb (void *data);
static Evas_Bool _e_apps_hash_idler_cb_init(Evas_Hash *hash, const char *key, void *data, void *fdata); static Evas_Bool _e_apps_hash_idler_cb_init(Evas_Hash *hash, const char *key, void *data, void *fdata);
static void _e_app_fdo_icon_search (E_App *a);
static void _e_app_free (E_App *a); static void _e_app_free (E_App *a);
static E_App *_e_app_subapp_file_find (E_App *a, const char *file); static E_App *_e_app_subapp_file_find (E_App *a, const char *file);
static int _e_app_new_save (E_App *a); static int _e_app_new_save (E_App *a);
@ -167,9 +168,8 @@ e_app_init(void)
} }
printf("INITIAL APP SCAN %3.3f\n", ecore_time_get() - begin); printf("INITIAL APP SCAN %3.3f\n", ecore_time_get() - begin);
ecore_desktop_instrumentation_print(); ecore_desktop_instrumentation_print();
ecore_desktop_instrumentation_reset();
_e_apps_hash_idler.all_done = 0; _e_apps_hash_idler.all_done = 0;
/* FIXME: I need a fake evas here so that the icon searching will work. */
_e_apps_hash_idler.evas = NULL;
_e_apps_hash_idler.begin = ecore_time_get(); _e_apps_hash_idler.begin = ecore_time_get();
_e_apps_hash_idler.idler = ecore_idler_add(_e_apps_hash_idler_cb, &_e_apps_hash_idler); _e_apps_hash_idler.idler = ecore_idler_add(_e_apps_hash_idler_cb, &_e_apps_hash_idler);
return 1; return 1;
@ -188,6 +188,7 @@ _e_apps_hash_idler_cb(void *data)
{ {
printf("IDLE APP FILLING SCAN %3.3f\n", ecore_time_get() - idler->begin); printf("IDLE APP FILLING SCAN %3.3f\n", ecore_time_get() - idler->begin);
idler->idler = NULL; idler->idler = NULL;
ecore_desktop_instrumentation_print();
return 0; return 0;
} }
return 1; return 1;
@ -205,26 +206,72 @@ _e_apps_hash_idler_cb_init(Evas_Hash *hash, const char *key, void *data, void *f
E_OBJECT_TYPE_CHECK(a, E_APP_TYPE); E_OBJECT_TYPE_CHECK(a, E_APP_TYPE);
/* Either fill an E_App, or look for an icon of an already filled E_App. /* Either fill an E_App, or look for an icon of an already filled E_App.
* Icon searching can take a long time, so don't do both at once. */ * Icon searching can take a long time, so don't do both at once. */
if (!a->filled) if ((!a->idle_fill) && (!a->filled))
{ {
struct stat st;
a->idle_fill = 1;
if (stat(a->path, &st) >= 0)
a->mtime = st.st_mtime;
e_app_fields_fill(a, a->path); e_app_fields_fill(a, a->path);
if (!a->filled) return 1; if (!a->filled) return 1;
idler->all_done = 0; idler->all_done = 0;
return 0; return 0;
} }
else if ((!a->found_icon) && (!a->no_icon)) #if IDLE_ICONS
else if ((!a->idle_icon) && (!a->found_icon) && (!a->no_icon))
{ {
Evas_Object *o = NULL; int theme_match = 0;
if (idler->evas) a->idle_icon = 1;
o = e_app_icon_add(idler->evas, a); /* If the icon was hard coded into the .desktop files Icon field, then theming doesn't matter. */
if (o) if (a->hard_icon)
evas_object_del(o); theme_match = 1;
else else if ((e_config->icon_theme == NULL) && (a->icon_theme == NULL)) /* Check to see if the icon theme is different. */
a->found_icon = 1; /* Seems strange, but this stops it from looping infinitely. */ theme_match = 1;
else if ((e_config->icon_theme) && (a->icon_theme) && (strcmp(e_config->icon_theme, a->icon_theme) == 0))
theme_match = 1;
/* Check if we already know the icon path. */
if ((theme_match) && (a->icon_path) && (a->icon_path[0] != 0))
{
a->found_icon = 1;
printf("P");
}
else
{
/* Check the theme for icons. */
if (e_util_edje_icon_list_check(a->icon_class))
{
a->found_icon = 1;
printf("C");
}
else
{
if (edje_file_group_exists(a->path, "icon"))
{
a->found_icon = 1;
printf("G");
}
else /* If that fails, then this might be an FDO icon. */
_e_app_fdo_icon_search(a);
if (a->icon_path)
{
a->found_icon = 1;
printf("F");
}
else
printf("N");
}
}
a->found_icon = 1; /* Seems strange, but this stops it from looping infinitely. */
if ((!a->found_icon) && (!a->no_icon)) return 1;
idler->all_done = 0; idler->all_done = 0;
return 0; return 0;
} }
#endif
return 1; return 1;
} }
@ -348,7 +395,12 @@ e_app_new(const char *path, int scan_subdirs)
{ {
stated = 1; stated = 1;
if (st.st_mtime > a->mtime) if (st.st_mtime > a->mtime)
e_app_fields_empty(a); {
e_app_fields_empty(a);
printf("n");
}
else
printf("o");
} }
e_object_ref(E_OBJECT(a)); e_object_ref(E_OBJECT(a));
} }
@ -358,6 +410,7 @@ e_app_new(const char *path, int scan_subdirs)
/* Create it. */ /* Create it. */
a = e_app_empty_new(path); a = e_app_empty_new(path);
new_app = 1; new_app = 1;
printf("+");
} }
if ((a) && (a->path)) if ((a) && (a->path))
@ -476,7 +529,7 @@ e_app_empty_new(const char *path)
snprintf(buf, sizeof(buf), "%s/_new_app_%1.1f.desktop", _e_apps_path_all, ecore_time_get()); snprintf(buf, sizeof(buf), "%s/_new_app_%1.1f.desktop", _e_apps_path_all, ecore_time_get());
a->path = evas_stringshare_add(buf); a->path = evas_stringshare_add(buf);
} }
printf("NEW APP %p %s\n", a, a->path); // printf("NEW APP %p %s\n", a, a->path);
return a; return a;
} }
@ -1445,6 +1498,7 @@ e_app_fields_fill(E_App *a, const char *path)
{ {
a->desktop = desktop; a->desktop = desktop;
printf(".");
if (desktop->name) a->name = evas_stringshare_add(desktop->name); if (desktop->name) a->name = evas_stringshare_add(desktop->name);
if (desktop->generic) a->generic = evas_stringshare_add(desktop->generic); if (desktop->generic) a->generic = evas_stringshare_add(desktop->generic);
if (desktop->comment) a->comment = evas_stringshare_add(desktop->comment); if (desktop->comment) a->comment = evas_stringshare_add(desktop->comment);
@ -1491,6 +1545,7 @@ e_app_fields_fill(E_App *a, const char *path)
free(v); \ free(v); \
} }
printf("e");
ef = eet_open(path, EET_FILE_MODE_READ); ef = eet_open(path, EET_FILE_MODE_READ);
if (!ef) return; if (!ef) return;
@ -1793,6 +1848,7 @@ _e_app_fields_save_others(E_App *a)
EAPI void EAPI void
e_app_fields_empty(E_App *a) e_app_fields_empty(E_App *a)
{ {
printf("-");
if (a->name) evas_stringshare_del(a->name); if (a->name) evas_stringshare_del(a->name);
if (a->generic) evas_stringshare_del(a->generic); if (a->generic) evas_stringshare_del(a->generic);
if (a->comment) evas_stringshare_del(a->comment); if (a->comment) evas_stringshare_del(a->comment);
@ -1985,6 +2041,9 @@ e_app_icon_add(Evas *evas, E_App *a)
Evas_Object *o = NULL; Evas_Object *o = NULL;
int theme_match = 0; int theme_match = 0;
if (a->orig)
a = a->orig;
#if DEBUG #if DEBUG
printf("e_app_icon_add(%s) %s %s %s\n", a->path, a->icon_class, e_config->icon_theme, a->icon_path); printf("e_app_icon_add(%s) %s %s %s\n", a->path, a->icon_class, e_config->icon_theme, a->icon_path);
#endif #endif
@ -2045,6 +2104,9 @@ e_app_icon_add_to_menu_item(E_Menu_Item *mi, E_App *a)
{ {
int theme_match = 0; int theme_match = 0;
if (a->orig)
a = a->orig;
mi->app = a; mi->app = a;
/* e_menu_item_icon_edje_set() just tucks away the params, the actual call to edje_object_file_set() happens later. */ /* e_menu_item_icon_edje_set() just tucks away the params, the actual call to edje_object_file_set() happens later. */
/* e_menu_item_icon_file_set() just tucks away the params, the actual call to e_icon_add() happens later. */ /* e_menu_item_icon_file_set() just tucks away the params, the actual call to e_icon_add() happens later. */
@ -2070,6 +2132,7 @@ printf("e_app_icon_add_to_menu_item(%s) %s %s %s\n", a->path, a->icon_clas
{ {
_e_app_icon_path_add_to_menu_item(mi, a); _e_app_icon_path_add_to_menu_item(mi, a);
a->found_icon = 1; a->found_icon = 1;
printf("P");
} }
else else
{ {
@ -2077,6 +2140,7 @@ printf("e_app_icon_add_to_menu_item(%s) %s %s %s\n", a->path, a->icon_clas
if (e_util_menu_item_edje_icon_list_set(mi, a->icon_class)) if (e_util_menu_item_edje_icon_list_set(mi, a->icon_class))
{ {
a->found_icon = 1; a->found_icon = 1;
printf("C");
} }
else else
{ {
@ -2084,6 +2148,7 @@ printf("e_app_icon_add_to_menu_item(%s) %s %s %s\n", a->path, a->icon_clas
{ {
e_menu_item_icon_edje_set(mi, a->path, "icon"); e_menu_item_icon_edje_set(mi, a->path, "icon");
a->found_icon = 1; a->found_icon = 1;
printf("G");
} }
else /* If that fails, then this might be an FDO icon. */ else /* If that fails, then this might be an FDO icon. */
_e_app_fdo_icon_search(a); _e_app_fdo_icon_search(a);
@ -2092,7 +2157,10 @@ printf("e_app_icon_add_to_menu_item(%s) %s %s %s\n", a->path, a->icon_clas
{ {
_e_app_icon_path_add_to_menu_item(mi, a); _e_app_icon_path_add_to_menu_item(mi, a);
a->found_icon = 1; a->found_icon = 1;
printf("F");
} }
else
printf("N");
} }
} }
} }
@ -2311,12 +2379,12 @@ _e_app_change(E_App *a, E_App_Change ch)
{ {
Evas_List *l; Evas_List *l;
if (ch == E_APP_DEL) // if (ch == E_APP_DEL)
printf("APP_DEL %s\n", a->path); // printf("APP_DEL %s\n", a->path);
if (ch == E_APP_CHANGE) // if (ch == E_APP_CHANGE)
printf("APP_CHANGE %p %s\n", a, a->path); // printf("APP_CHANGE %p %s\n", a, a->path);
if (ch == E_APP_ADD) // if (ch == E_APP_ADD)
printf("APP_ADD %s\n", a->path); // printf("APP_ADD %s\n", a->path);
_e_apps_callbacks_walking = 1; _e_apps_callbacks_walking = 1;
for (l = _e_apps_change_callbacks; l; l = l->next) for (l = _e_apps_change_callbacks; l; l = l->next)
{ {

View File

@ -74,6 +74,9 @@ struct _E_App
unsigned char dirty_icon : 1; /* this app's icon has been found, and the on disk cache needs to be updated. */ unsigned char dirty_icon : 1; /* this app's icon has been found, and the on disk cache needs to be updated. */
unsigned char hard_icon : 1; /* this app's icon was hard coded into the .desktop files Icon field. */ unsigned char hard_icon : 1; /* this app's icon was hard coded into the .desktop files Icon field. */
unsigned char idle_fill : 1;
unsigned char idle_icon : 1;
/* Actually calling this st_mtime causes compile issues, must be some strange macros at work. */ /* Actually calling this st_mtime causes compile issues, must be some strange macros at work. */
time_t mtime; /* For checking if the cache is valid. */ time_t mtime; /* For checking if the cache is valid. */