diff --git a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop.c b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop.c index b425a6aa02..43909b61e7 100644 --- a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop.c +++ b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop.c @@ -23,11 +23,11 @@ static int init_count = 0; static Ecore_Hash *desktop_cache; Ecore_Desktop *_ecore_desktop_get(const char *file, const char *lang); -void _ecore_desktop_destroy(Ecore_Desktop * desktop); +void _ecore_desktop_destroy(Ecore_Desktop * desktop); + #define IFGETDUP(src, key, dst) src = (char *)ecore_hash_get(result->group, key); if (src) dst = strdup(src); else dst = NULL; #define IFFREE(src) if (src) free(src); src = NULL; - /** * @defgroup Ecore_Desktop_Main_Group .desktop file Functions * @@ -106,8 +106,8 @@ ecore_desktop_ini_get(const char *file) } else if (current) /* key=value pair of current group. */ { - char *tv; - + char *tv; + key = c; /* Find trailing blanks or =. */ while ((*c != '=') && (*c != ' ') && (*c != '\t') @@ -133,9 +133,10 @@ ecore_desktop_ini_get(const char *file) *c++ = '\0'; /* FIXME: should strip space at end, then unescape value. */ tv = ecore_hash_remove(current, key); - if (tv) free(tv); + if (tv) + free(tv); if (value[0] != '\0') - ecore_hash_set(current, strdup(key), strdup(value)); + ecore_hash_set(current, strdup(key), strdup(value)); #ifdef DEBUG fprintf(stdout, " %s=%s\n", key, value); #endif @@ -167,16 +168,16 @@ ecore_desktop_get(const char *file, const char *lang) result = _ecore_desktop_get(file, lang); if (result) - { - /* Kill the hash, it takes up way too much memory. */ - if (result->data) - { - ecore_hash_destroy(result->data); - result->data = NULL; - } - result->group = NULL; - } - + { + /* Kill the hash, it takes up way too much memory. */ + if (result->data) + { + ecore_hash_destroy(result->data); + result->data = NULL; + } + result->group = NULL; + } + return result; } @@ -188,20 +189,20 @@ _ecore_desktop_get(const char *file, const char *lang) char *value; int stated = 0; - result = (Ecore_Desktop *) ecore_hash_get(desktop_cache, (char *) file); + result = (Ecore_Desktop *) ecore_hash_get(desktop_cache, (char *)file); /* Check if the cache is still valid. */ if (result) - { - if (stat(result->original_path, &st) >= 0) - { - if(st.st_mtime > result->mtime) - { - ecore_hash_remove(desktop_cache, result->original_path); - result = NULL; - stated = 1; - } - } - } + { + if (stat(result->original_path, &st) >= 0) + { + if (st.st_mtime > result->mtime) + { + ecore_hash_remove(desktop_cache, result->original_path); + result = NULL; + stated = 1; + } + } + } if (!result) { result = calloc(1, sizeof(Ecore_Desktop)); @@ -210,14 +211,14 @@ _ecore_desktop_get(const char *file, const char *lang) result->ondisk = 1; result->original_path = strdup(file); if (lang) - result->original_lang = strdup(lang); + result->original_lang = strdup(lang); result->data = ecore_desktop_ini_get(result->original_path); /* Timestamp the cache, and no need to stat the file twice if the cache was stale. */ - if ((stated) || (stat(result->original_path, &st) >= 0)) - { - result->mtime = st.st_mtime; - stated = 1; - } + if ((stated) || (stat(result->original_path, &st) >= 0)) + { + result->mtime = st.st_mtime; + stated = 1; + } if (result->data) { result->group = @@ -234,106 +235,120 @@ _ecore_desktop_get(const char *file, const char *lang) char *categories = NULL; int size = 0; - value = (char *) ecore_file_get_file(result->original_path); + value = + (char *)ecore_file_get_file(result->original_path); if (value) - { - char *temp = strrchr(value, '.'); - if (temp) - *temp = '\0'; - result->eap_name = malloc(strlen(value) + 5); - if (result->eap_name) - sprintf(result->eap_name, "%s.edj", value); - if (temp) - *temp = '.'; - } + { + char *temp = strrchr(value, '.'); + + if (temp) + *temp = '\0'; + result->eap_name = malloc(strlen(value) + 5); + if (result->eap_name) + sprintf(result->eap_name, "%s.edj", value); + if (temp) + *temp = '.'; + } eap_name = result->eap_name; - IFGETDUP(value, "Name", result->name); - IFGETDUP(value, "GenericName", result->generic); - IFGETDUP(value, "Comment", result->comment); - IFGETDUP(value, "Type", result->type); + IFGETDUP(value, "Name", result->name); + IFGETDUP(value, "GenericName", result->generic); + IFGETDUP(value, "Comment", result->comment); + IFGETDUP(value, "Type", result->type); - IFGETDUP(value, "Path", result->path); - IFGETDUP(value, "URL", result->URL); - IFGETDUP(value, "File", result->file); + IFGETDUP(value, "Path", result->path); + IFGETDUP(value, "URL", result->URL); + IFGETDUP(value, "File", result->file); - IFGETDUP(value, "Exec", result->exec); + IFGETDUP(value, "Exec", result->exec); if (result->exec) - { - exe = strchr(result->exec, ' '); - if (exe) - { - *exe = '\0'; - result->exec_params = ++exe; - } - exe = result->exec; - } + { + exe = strchr(result->exec, ' '); + if (exe) + { + *exe = '\0'; + result->exec_params = ++exe; + } + exe = result->exec; + } - IFGETDUP(value, "StartupWMClass", result->window_class); + IFGETDUP(value, "StartupWMClass", result->window_class); if ((!value) && (result->exec)) - { - char *tmp; + { + char *tmp; - /* Guess - exe name with first letter capitalized. */ - tmp = strdup(result->exec); - if (tmp) - { - char *p; + /* Guess - exe name with first letter capitalized. */ + tmp = strdup(result->exec); + if (tmp) + { + char *p; - value = (char *) ecore_file_get_file(tmp); /* In case the exe included a path. */ - p = value; - while ((*p != '\0') && (*p != ' ')) - { - *p = tolower(*p); - p++; - } - *p = '\0'; - *value = toupper(*value); - result->window_class = strdup(value); - free(tmp); - } - } - IFGETDUP(value, "X-Enlightenment-WindowName", result->window_name); - IFGETDUP(value, "X-Enlightenment-WindowTitle", result->window_title); - IFGETDUP(value, "X-Enlightenment-WindowRole", result->window_role); + value = (char *)ecore_file_get_file(tmp); /* In case the exe included a path. */ + p = value; + while ((*p != '\0') && (*p != ' ')) + { + *p = tolower(*p); + p++; + } + *p = '\0'; + *value = toupper(*value); + result->window_class = strdup(value); + free(tmp); + } + } + IFGETDUP(value, "X-Enlightenment-WindowName", + result->window_name); + IFGETDUP(value, "X-Enlightenment-WindowTitle", + result->window_title); + IFGETDUP(value, "X-Enlightenment-WindowRole", + result->window_role); - IFGETDUP(value, "Icon", result->icon); + IFGETDUP(value, "Icon", result->icon); if (result->icon) - result->original_icon = strdup(result->icon); - IFGETDUP(value, "X-Enlightenment-IconClass", result->icon_class); - IFGETDUP(value, "X-Enlightenment-IconPath", result->icon_path); + result->original_icon = strdup(result->icon); + IFGETDUP(value, "X-Enlightenment-IconClass", + result->icon_class); + IFGETDUP(value, "X-Enlightenment-IconPath", + result->icon_path); - if ((result->icon != NULL) && (result->icon_path == NULL) && (strchr(result->icon, '/') != NULL)) - { - if(result->icon[0] == '/') - { - result->icon_path = strdup(result->icon); - result->icon = NULL; - } - else /* It's a relative path. */ - { - char *temp; + if ((result->icon != NULL) && (result->icon_path == NULL) + && (strchr(result->icon, '/') != NULL)) + { + if (result->icon[0] == '/') + { + result->icon_path = strdup(result->icon); + result->icon = NULL; + } + else /* It's a relative path. */ + { + char *temp; - size = strlen(result->original_path) + strlen(result->icon) + 2; - temp = malloc(size); - if (temp) - { - char *dir; + size = + strlen(result->original_path) + + strlen(result->icon) + 2; + temp = malloc(size); + if (temp) + { + char *dir; - dir = ecore_file_get_dir(result->original_path); - if (dir) - { - sprintf(temp, "%s/%s", dir, result->icon); - result->icon_path = ecore_file_realpath(temp); - result->icon = NULL; - free(dir); - } - free(temp); - } - } - } + dir = + ecore_file_get_dir(result-> + original_path); + if (dir) + { + sprintf(temp, "%s/%s", dir, + result->icon); + result->icon_path = + ecore_file_realpath(temp); + result->icon = NULL; + free(dir); + } + free(temp); + } + } + } - IFGETDUP(value, "Categories", result->categories); + IFGETDUP(value, "Categories", result->categories); if (result->categories) result->Categories = ecore_desktop_paths_to_hash(result->categories); @@ -365,13 +380,10 @@ _ecore_desktop_get(const char *file, const char *lang) if (value) result->wait_exit = (strcmp(value, "true") == 0); value = - (char *)ecore_hash_get(result->group, - "NoDisplay"); + (char *)ecore_hash_get(result->group, "NoDisplay"); if (value) result->no_display = (strcmp(value, "true") == 0); - value = - (char *)ecore_hash_get(result->group, - "Hidden"); + value = (char *)ecore_hash_get(result->group, "Hidden"); if (value) result->hidden = (strcmp(value, "true") == 0); @@ -381,82 +393,86 @@ _ecore_desktop_get(const char *file, const char *lang) * It should be most specific to most generic. firefox,browser,internet for instance */ - /* If the icon in the file is not a full path, just put it first in the class, greatly simplifies things. - * Otherwise, put that full path into the icon_path member. - */ - if (!result->icon_class) - { - size = 0; - if ((result->icon) && (result->icon[0] != '/')) - size += strlen(result->icon) + 1; - if (eap_name) size += strlen(eap_name) + 1; - if (exe) size += strlen(exe) + 1; - if (categories) size += strlen(categories) + 1; - result->icon_class = malloc(size + 1); - if (result->icon_class) - { - char *p; - int done = 0; + /* If the icon in the file is not a full path, just put it first in the class, greatly simplifies things. + * Otherwise, put that full path into the icon_path member. + */ + if (!result->icon_class) + { + size = 0; + if ((result->icon) && (result->icon[0] != '/')) + size += strlen(result->icon) + 1; + if (eap_name) + size += strlen(eap_name) + 1; + if (exe) + size += strlen(exe) + 1; + if (categories) + size += strlen(categories) + 1; + result->icon_class = malloc(size + 1); + if (result->icon_class) + { + char *p; + int done = 0; - result->icon_class[0] = '\0'; - if ((result->icon) && (result->icon[0] != '/') && (result->icon[0] != '\0')) - { - strcat(result->icon_class, result->icon); - done = 1; - result->icon = NULL; - } - /* We do this here coz we don't want to lower case the result->icon part later. */ - p = result->icon_class; - p += strlen(result->icon_class); - if ((eap_name) && (eap_name[0] != '\0')) - { - if (done) - strcat(result->icon_class, ","); - strcat(result->icon_class, eap_name); - done = 1; - } - if ((exe) && (exe[0] != '\0')) - { - char *tmp; + result->icon_class[0] = '\0'; + if ((result->icon) && (result->icon[0] != '/') + && (result->icon[0] != '\0')) + { + strcat(result->icon_class, result->icon); + done = 1; + result->icon = NULL; + } + /* We do this here coz we don't want to lower case the result->icon part later. */ + p = result->icon_class; + p += strlen(result->icon_class); + if ((eap_name) && (eap_name[0] != '\0')) + { + if (done) + strcat(result->icon_class, ","); + strcat(result->icon_class, eap_name); + done = 1; + } + if ((exe) && (exe[0] != '\0')) + { + char *tmp; - tmp = strdup(ecore_file_get_file(exe)); - if (tmp) - { - char *p2; - - p2 = tmp; - while (*p2 != '\0') - { - if (*p2 == ' ') - { - *p2 = '\0'; - break; - } - p2++; - } - if (done) - strcat(result->icon_class, ","); - strcat(result->icon_class, tmp); - done = 1; - free(tmp); - } - } - if ((categories) && (categories[0] != '\0')) - { - if (done) - strcat(result->icon_class, ","); - strcat(result->icon_class, categories); - done = 1; - } - while (*p != '\0') - { - if (*p == ';') - *p = ','; - else - *p = tolower(*p); - p++; - } - } + tmp = strdup(ecore_file_get_file(exe)); + if (tmp) + { + char *p2; + + p2 = tmp; + while (*p2 != '\0') + { + if (*p2 == ' ') + { + *p2 = '\0'; + break; + } + p2++; + } + if (done) + strcat(result->icon_class, ","); + strcat(result->icon_class, tmp); + done = 1; + free(tmp); + } + } + if ((categories) && (categories[0] != '\0')) + { + if (done) + strcat(result->icon_class, ","); + strcat(result->icon_class, categories); + done = 1; + } + while (*p != '\0') + { + if (*p == ';') + *p = ','; + else + *p = tolower(*p); + p++; + } + } } } else @@ -467,12 +483,14 @@ _ecore_desktop_get(const char *file, const char *lang) "Trash Info"); if (result->group) { - IFGETDUP(value, "Path", result->path); - IFGETDUP(value, "DeletionDate", result->deletiondate); + IFGETDUP(value, "Path", result->path); + IFGETDUP(value, "DeletionDate", + result->deletiondate); } } - ecore_hash_set(desktop_cache, strdup(result->original_path), result); + ecore_hash_set(desktop_cache, strdup(result->original_path), + result); } else { @@ -487,130 +505,168 @@ _ecore_desktop_get(const char *file, const char *lang) void ecore_desktop_save(Ecore_Desktop * desktop) { - char *temp; - int trash = 0; + char *temp; + int trash = 0; if (!desktop->group) - { - if ((desktop->ondisk) && (desktop->original_path)) - { - desktop->data = ecore_desktop_ini_get(desktop->original_path); - desktop->group = (Ecore_Hash *) ecore_hash_get(desktop->data, "Desktop Entry"); - if (!desktop->group) - desktop->group = (Ecore_Hash *) ecore_hash_get(desktop->data, "KDE Desktop Entry"); - if (!desktop->group) - { - trash = 1; - desktop->group = (Ecore_Hash *) ecore_hash_get(desktop->data, "Trash Info"); - } - } - else - { - desktop->group = ecore_hash_new(ecore_str_hash, ecore_str_compare); - if (desktop->group) - { - ecore_hash_set_free_key(desktop->group, free); - ecore_hash_set_free_value(desktop->group, free); - } - } - } + { + if ((desktop->ondisk) && (desktop->original_path)) + { + desktop->data = ecore_desktop_ini_get(desktop->original_path); + desktop->group = + (Ecore_Hash *) ecore_hash_get(desktop->data, "Desktop Entry"); + if (!desktop->group) + desktop->group = + (Ecore_Hash *) ecore_hash_get(desktop->data, + "KDE Desktop Entry"); + if (!desktop->group) + { + trash = 1; + desktop->group = + (Ecore_Hash *) ecore_hash_get(desktop->data, "Trash Info"); + } + } + else + { + desktop->group = ecore_hash_new(ecore_str_hash, ecore_str_compare); + if (desktop->group) + { + ecore_hash_set_free_key(desktop->group, free); + ecore_hash_set_free_value(desktop->group, free); + } + } + } if (desktop->group) - { - if (desktop->original_path) - { - struct stat st; + { + if (desktop->original_path) + { + struct stat st; - if (stat(desktop->original_path, &st) >= 0) - { - char *real; + if (stat(desktop->original_path, &st) >= 0) + { + char *real; - real = ecore_file_readlink(desktop->original_path); - if (real) - ecore_hash_set(desktop->group, strdup("X-Enlightenment-OriginalPath"), real); - } - } + real = ecore_file_readlink(desktop->original_path); + if (real) + ecore_hash_set(desktop->group, + strdup("X-Enlightenment-OriginalPath"), + real); + } + } - temp = ecore_desktop_get_command(desktop, NULL, 0); - if (temp) - ecore_hash_set(desktop->group, strdup("Exec"), temp); - if (desktop->name) ecore_hash_set(desktop->group, strdup("Name"), strdup(desktop->name)); - if (desktop->generic) ecore_hash_set(desktop->group, strdup("GenericName"), strdup(desktop->generic)); - if (desktop->comment) ecore_hash_set(desktop->group, strdup("Comment"), strdup(desktop->comment)); - if (desktop->type) ecore_hash_set(desktop->group, strdup("Type"), strdup(desktop->type)); - if (desktop->URL) ecore_hash_set(desktop->group, strdup("URL"), strdup(desktop->URL)); - if (desktop->file) ecore_hash_set(desktop->group, strdup("File"), strdup(desktop->file)); - if (desktop->icon) ecore_hash_set(desktop->group, strdup("Icon"), strdup(desktop->icon)); - if (desktop->icon_class) ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconClass"), strdup(desktop->icon_class)); - if (desktop->icon_path) ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconPath"), strdup(desktop->icon_path)); - if (desktop->window_class) ecore_hash_set(desktop->group, strdup("StartupWMClass"), strdup(desktop->window_class)); - if (desktop->categories) ecore_hash_set(desktop->group, strdup("Categories"), strdup(desktop->categories)); - if (desktop->window_name) ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowName"), strdup(desktop->window_name)); - if (desktop->window_title) ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowTitle"), strdup(desktop->window_title)); - if (desktop->window_role) ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowRole"), strdup(desktop->window_role)); - ecore_hash_remove(desktop->group, "X-KDE-StartupNotify"); - if (desktop->wait_exit) - ecore_hash_set(desktop->group, strdup("X-Enlightenment-WaitExit"), strdup("true")); - else - ecore_hash_remove(desktop->group, "X-Enlightenment-WaitExit"); - if (desktop->startup) - ecore_hash_set(desktop->group, strdup("StartupNotify"), strdup("true")); - else - ecore_hash_remove(desktop->group, "StartupNotify"); - if (desktop->no_display) - ecore_hash_set(desktop->group, strdup("NoDisplay"), strdup("true")); - else - ecore_hash_remove(desktop->group, "NoDisplay"); - if (desktop->hidden) - ecore_hash_set(desktop->group, strdup("Hidden"), strdup("true")); - else - ecore_hash_remove(desktop->group, "Hidden"); + temp = ecore_desktop_get_command(desktop, NULL, 0); + if (temp) + ecore_hash_set(desktop->group, strdup("Exec"), temp); + if (desktop->name) + ecore_hash_set(desktop->group, strdup("Name"), + strdup(desktop->name)); + if (desktop->generic) + ecore_hash_set(desktop->group, strdup("GenericName"), + strdup(desktop->generic)); + if (desktop->comment) + ecore_hash_set(desktop->group, strdup("Comment"), + strdup(desktop->comment)); + if (desktop->type) + ecore_hash_set(desktop->group, strdup("Type"), + strdup(desktop->type)); + if (desktop->URL) + ecore_hash_set(desktop->group, strdup("URL"), strdup(desktop->URL)); + if (desktop->file) + ecore_hash_set(desktop->group, strdup("File"), + strdup(desktop->file)); + if (desktop->icon) + ecore_hash_set(desktop->group, strdup("Icon"), + strdup(desktop->icon)); + if (desktop->icon_class) + ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconClass"), + strdup(desktop->icon_class)); + if (desktop->icon_path) + ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconPath"), + strdup(desktop->icon_path)); + if (desktop->window_class) + ecore_hash_set(desktop->group, strdup("StartupWMClass"), + strdup(desktop->window_class)); + if (desktop->categories) + ecore_hash_set(desktop->group, strdup("Categories"), + strdup(desktop->categories)); + if (desktop->window_name) + ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowName"), + strdup(desktop->window_name)); + if (desktop->window_title) + ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowTitle"), + strdup(desktop->window_title)); + if (desktop->window_role) + ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowRole"), + strdup(desktop->window_role)); + ecore_hash_remove(desktop->group, "X-KDE-StartupNotify"); + if (desktop->wait_exit) + ecore_hash_set(desktop->group, strdup("X-Enlightenment-WaitExit"), + strdup("true")); + else + ecore_hash_remove(desktop->group, "X-Enlightenment-WaitExit"); + if (desktop->startup) + ecore_hash_set(desktop->group, strdup("StartupNotify"), + strdup("true")); + else + ecore_hash_remove(desktop->group, "StartupNotify"); + if (desktop->no_display) + ecore_hash_set(desktop->group, strdup("NoDisplay"), strdup("true")); + else + ecore_hash_remove(desktop->group, "NoDisplay"); + if (desktop->hidden) + ecore_hash_set(desktop->group, strdup("Hidden"), strdup("true")); + else + ecore_hash_remove(desktop->group, "Hidden"); - /* FIXME: deal with the ShowIn's. */ + /* FIXME: deal with the ShowIn's. */ - if (desktop->path) ecore_hash_set(desktop->group, strdup("Path"), strdup(desktop->path)); - if (desktop->deletiondate) ecore_hash_set(desktop->group, strdup("DeletionDate"), strdup(desktop->deletiondate)); + if (desktop->path) + ecore_hash_set(desktop->group, strdup("Path"), + strdup(desktop->path)); + if (desktop->deletiondate) + ecore_hash_set(desktop->group, strdup("DeletionDate"), + strdup(desktop->deletiondate)); - if (desktop->original_path) - { - FILE *f; - Ecore_List *list; - char *key; + if (desktop->original_path) + { + FILE *f; + Ecore_List *list; + char *key; - ecore_file_unlink(desktop->original_path); - f = fopen(desktop->original_path, "wb"); - list = ecore_hash_keys(desktop->group); - if ((!f) || (!list)) return; + ecore_file_unlink(desktop->original_path); + f = fopen(desktop->original_path, "wb"); + list = ecore_hash_keys(desktop->group); + if ((!f) || (!list)) + return; - if (trash) - fprintf(f, "[Trash Info]\n"); - else - fprintf(f, "[Desktop Entry]\n"); - ecore_list_goto_first(list); - while ((key = (char *) ecore_list_next(list))) - { - char *value; + if (trash) + fprintf(f, "[Trash Info]\n"); + else + fprintf(f, "[Desktop Entry]\n"); + ecore_list_goto_first(list); + while ((key = (char *)ecore_list_next(list))) + { + char *value; - value = (char *) ecore_hash_get(desktop->group, key); - if ((value) && (value[0] != '\0')) - fprintf(f, "%s=%s\n", key, value); - } - fclose(f); - } + value = (char *)ecore_hash_get(desktop->group, key); + if ((value) && (value[0] != '\0')) + fprintf(f, "%s=%s\n", key, value); + } + fclose(f); + } - if (desktop->data) - { - ecore_hash_destroy(desktop->data); - desktop->data = NULL; - } - else - ecore_hash_destroy(desktop->group); - desktop->group = NULL; - } + if (desktop->data) + { + ecore_hash_destroy(desktop->data); + desktop->data = NULL; + } + else + ecore_hash_destroy(desktop->group); + desktop->group = NULL; + } } - - /** * Setup what ever needs to be setup to support Ecore_Desktop. * @@ -622,9 +678,11 @@ ecore_desktop_save(Ecore_Desktop * desktop) EAPI int ecore_desktop_init() { - if (++init_count != 1) return init_count; + if (++init_count != 1) + return init_count; - if (!ecore_desktop_paths_init()) return --init_count; + if (!ecore_desktop_paths_init()) + return --init_count; if (!desktop_cache) { @@ -637,9 +695,10 @@ ecore_desktop_init() } } - if (!ecore_desktop_icon_init()) return --init_count; + if (!ecore_desktop_icon_init()) + return --init_count; - return init_count; + return init_count; } /** @@ -653,7 +712,8 @@ ecore_desktop_init() EAPI int ecore_desktop_shutdown() { - if (--init_count != 0) return init_count; + if (--init_count != 0) + return init_count; ecore_desktop_icon_shutdown(); @@ -665,7 +725,7 @@ ecore_desktop_shutdown() ecore_desktop_paths_shutdown(); - return init_count; + return init_count; } /** @@ -680,43 +740,41 @@ ecore_desktop_shutdown() void ecore_desktop_destroy(Ecore_Desktop * desktop) { - /* This is just a dummy, because these structures are cached. */ - /* Later versions of the cache may reference count, then this will be useful. */ + /* This is just a dummy, because these structures are cached. */ + /* Later versions of the cache may reference count, then this will be useful. */ } void _ecore_desktop_destroy(Ecore_Desktop * desktop) { IFFREE(desktop->original_path) - IFFREE(desktop->original_lang) - IFFREE(desktop->eap_name) - IFFREE(desktop->name) - IFFREE(desktop->generic) - IFFREE(desktop->comment) - IFFREE(desktop->type) - IFFREE(desktop->exec) - IFFREE(desktop->exec_params) - IFFREE(desktop->categories) - IFFREE(desktop->icon) - IFFREE(desktop->original_icon) - IFFREE(desktop->icon_class) - IFFREE(desktop->icon_path) - IFFREE(desktop->path) - IFFREE(desktop->URL) - IFFREE(desktop->file) - IFFREE(desktop->deletiondate) - IFFREE(desktop->window_class) - IFFREE(desktop->window_name) - IFFREE(desktop->window_title) - IFFREE(desktop->window_role) - IFFREE(desktop->NotShowIn) - IFFREE(desktop->OnlyShowIn) - IFFREE(desktop->Categories) - if (desktop->data) - { - ecore_hash_destroy(desktop->data); - desktop->data = NULL; - } + IFFREE(desktop->original_lang) + IFFREE(desktop->eap_name) + IFFREE(desktop->name) + IFFREE(desktop->generic) + IFFREE(desktop->comment) + IFFREE(desktop->type) + IFFREE(desktop->exec) + IFFREE(desktop->exec_params) + IFFREE(desktop->categories) + IFFREE(desktop->icon) + IFFREE(desktop->original_icon) + IFFREE(desktop->icon_class) + IFFREE(desktop->icon_path) + IFFREE(desktop->path) + IFFREE(desktop->URL) + IFFREE(desktop->file) + IFFREE(desktop->deletiondate) + IFFREE(desktop->window_class) + IFFREE(desktop->window_name) + IFFREE(desktop->window_title) + IFFREE(desktop->window_role) + IFFREE(desktop->NotShowIn) + IFFREE(desktop->OnlyShowIn) IFFREE(desktop->Categories) if (desktop->data) + { + ecore_hash_destroy(desktop->data); + desktop->data = NULL; + } desktop->group = NULL; free(desktop); } @@ -729,17 +787,17 @@ _ecore_desktop_destroy(Ecore_Desktop * desktop) * @return The users howe directory. * @ingroup Ecore_Desktop_Main_Group */ -char * +char * ecore_desktop_home_get() { - char home[PATH_MAX]; - int len; + char home[PATH_MAX]; + int len; /* Get Home Dir, check for trailing '/', strip it */ if (getenv("HOME")) - strncpy(home, getenv("HOME"), PATH_MAX); + strncpy(home, getenv("HOME"), PATH_MAX); else - strcpy(home, "/"); + strcpy(home, "/"); len = strlen(home) - 1; while ((len >= 0) && (home[len] == '/')) { @@ -750,129 +808,130 @@ ecore_desktop_home_get() return strdup(home); } -EAPI char * -ecore_desktop_get_command(Ecore_Desktop *desktop, Ecore_List *files, int fill) +EAPI char * +ecore_desktop_get_command(Ecore_Desktop * desktop, Ecore_List * files, int fill) { - char *result = NULL, *params = NULL; + char *result = NULL, *params = NULL; if (fill && (desktop->exec_params)) - { - params = strdup(desktop->exec_params); - if (params) - { - Ecore_DList *command; + { + params = strdup(desktop->exec_params); + if (params) + { + Ecore_DList *command; - command = ecore_dlist_new(); - if (command) - { - char *p, *t, buf[PATH_MAX + 10]; - int len = 0; + command = ecore_dlist_new(); + if (command) + { + char *p, *t, buf[PATH_MAX + 10]; + int len = 0; - ecore_dlist_set_free_cb(command, free); - t = params; - for (p = params; *p; p++) - { - if (*p == '%') - { - *p = '\0'; - ecore_dlist_append(command, strdup(t)); - *p = '%'; - t = p; - } - } - if (t < p) - { - ecore_dlist_append(command, strdup(t)); - } - if (!ecore_dlist_is_empty(command)) - { - ecore_dlist_goto_first(command); - while ((p = ecore_dlist_next(command)) != NULL) - { - t = NULL; - /* FIXME: implement the rest of these when EFM can pass us files. */ - if (p[0] == '%') - switch (p[1]) - { - case 'f' : /* Single file name, multiple invokations if multiple files. If the file is on the net, download first and point to temp file. */ - break; + ecore_dlist_set_free_cb(command, free); + t = params; + for (p = params; *p; p++) + { + if (*p == '%') + { + *p = '\0'; + ecore_dlist_append(command, strdup(t)); + *p = '%'; + t = p; + } + } + if (t < p) + { + ecore_dlist_append(command, strdup(t)); + } + if (!ecore_dlist_is_empty(command)) + { + ecore_dlist_goto_first(command); + while ((p = ecore_dlist_next(command)) != NULL) + { + t = NULL; + /* FIXME: implement the rest of these when EFM can pass us files. */ + if (p[0] == '%') + switch (p[1]) + { + case 'f': /* Single file name, multiple invokations if multiple files. If the file is on the net, download first and point to temp file. */ + break; - case 'u' : /* Single URL, multiple invokations if multiple URLs. */ - break; + case 'u': /* Single URL, multiple invokations if multiple URLs. */ + break; - case 'c' : /* Translated Name field frem .desktop file. */ - t = desktop->name; - break; + case 'c': /* Translated Name field frem .desktop file. */ + t = desktop->name; + break; - case 'k' : /* Location of the .desktop file, may be a URL, or empty. */ - t = desktop->original_path; - break; + case 'k': /* Location of the .desktop file, may be a URL, or empty. */ + t = desktop->original_path; + break; - case 'F' : /* Multiple file names. If the files are on the net, download first and point to temp files. */ - break; + case 'F': /* Multiple file names. If the files are on the net, download first and point to temp files. */ + break; - case 'U' : /* Multiple URLs. */ - break; + case 'U': /* Multiple URLs. */ + break; - case 'd' : /* Directory of the file in %f. */ - break; + case 'd': /* Directory of the file in %f. */ + break; - case 'D' : /* Directories of the files in %F. */ - break; + case 'D': /* Directories of the files in %F. */ + break; - case 'n' : /* Single filename without path. */ - break; + case 'n': /* Single filename without path. */ + break; - case 'N' : /* Multiple filenames without paths. */ - break; + case 'N': /* Multiple filenames without paths. */ + break; - case 'i' : /* "--icon Icon" field from .desktop file, or empty. */ - if (desktop->original_icon) - { - snprintf(buf, sizeof(buf), "--icon %s", desktop->original_icon); - t = buf; - } - break; + case 'i': /* "--icon Icon" field from .desktop file, or empty. */ + if (desktop->original_icon) + { + snprintf(buf, sizeof(buf), "--icon %s", + desktop->original_icon); + t = buf; + } + break; - case 'v' : /* Device field from .desktop file. */ - break; + case 'v': /* Device field from .desktop file. */ + break; - case '%' : /* A '%' character. */ - t = "%"; - break; + case '%': /* A '%' character. */ + t = "%"; + break; - default : - break; - } - if (t) - { - len += strlen(t); - ecore_dlist_previous(command); - ecore_dlist_insert(command, strdup(t)); - ecore_dlist_next(command); - ecore_dlist_next(command); - } - len += strlen(p); - } - free(params); - params = malloc(len + 1); - if (params) + default: + break; + } + if (t) { - params[0] = '\0'; - ecore_dlist_goto_first(command); - while ((p = ecore_dlist_next(command)) != NULL) - { - if (p[0] == '%') - strcat(params, &p[2]); - else - strcat(params, p); - } + len += strlen(t); + ecore_dlist_previous(command); + ecore_dlist_insert(command, strdup(t)); + ecore_dlist_next(command); + ecore_dlist_next(command); } - } - ecore_list_destroy(command); - } - } - } + len += strlen(p); + } + free(params); + params = malloc(len + 1); + if (params) + { + params[0] = '\0'; + ecore_dlist_goto_first(command); + while ((p = ecore_dlist_next(command)) != NULL) + { + if (p[0] == '%') + strcat(params, &p[2]); + else + strcat(params, p); + } + } + } + ecore_list_destroy(command); + } + } + } else if (desktop->exec_params) params = strdup(desktop->exec_params); @@ -883,32 +942,31 @@ ecore_desktop_get_command(Ecore_Desktop *desktop, Ecore_List *files, int fill) return result; } - -EAPI char * +EAPI char * ecore_desktop_merge_command(char *exec, char *params) { - int size; - char *end, *result = NULL; + int size; + char *end, *result = NULL; if ((exec) && (params)) - { - size = strlen(exec); - end = exec + size; - /* Two possibilities, it was just split at the space, or it was setup seperatly. */ - if (params == (end + 1)) - { - *end = ' '; - result = strdup(exec); - *end = '\0'; - } - else - { - size += strlen(params) + 2; - result = malloc(size); - if (result) - sprintf(result, "%s %s", exec, params); - } - } + { + size = strlen(exec); + end = exec + size; + /* Two possibilities, it was just split at the space, or it was setup seperatly. */ + if (params == (end + 1)) + { + *end = ' '; + result = strdup(exec); + *end = '\0'; + } + else + { + size += strlen(params) + 2; + result = malloc(size); + if (result) + sprintf(result, "%s %s", exec, params); + } + } else if (exec) result = strdup(exec); diff --git a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c index d90370bf8f..a9ea1ae292 100644 --- a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c +++ b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c @@ -55,58 +55,61 @@ struct _ecore_desktop_menu_legacy_data int length, menu_length, level; }; -static int _ecore_desktop_menu_make_apps(const void *data, Ecore_Desktop_Tree * tree, int element, int level); -static Ecore_Desktop_Tree *_ecore_desktop_menu_get0(char *file, Ecore_Desktop_Tree * merge_stack, int level); -static Ecore_Desktop_Tree *_ecore_desktop_menu_create_menu(); -static int _ecore_desktop_menu_unxml(const void *data, - Ecore_Desktop_Tree * tree, - int element, int level); -static int _ecore_desktop_menu_check_directory(void *data, - const char *path); -static int _ecore_desktop_menu_check_menu(void *data, - const char *path); -static int _ecore_desktop_menu_legacy_menu_dir(void *data, - const char *path); -static int _ecore_desktop_menu_legacy_menu(void *data, - const char *path); -static void _ecore_desktop_menu_unxml_rules(Ecore_Desktop_Tree * rules, - Ecore_Desktop_Tree * tree, - char type, char sub_type); -static void _ecore_desktop_menu_unxml_moves(Ecore_Desktop_Tree * menu, - Ecore_Desktop_Tree * tree); -static void _ecore_desktop_menu_add_dirs(Ecore_Desktop_Tree * tree, - Ecore_List * paths, char *pre, - char *post, char *extra, - int element); -static int _ecore_desktop_menu_expand_apps(struct - _ecore_desktop_menu_unxml_data - *unxml_data, char *app_dir, - Ecore_Hash * pool); -static int _ecore_desktop_menu_check_app(void *data, - const char *path); - -static int _ecore_desktop_menu_merge(const void *data, - Ecore_Desktop_Tree * tree, - int element, int level); -static int _ecore_desktop_menu_expand_default_dirs(const void *data, - Ecore_Desktop_Tree - * tree, - int element, - int level); - -static int _ecore_desktop_menu_generate(const void *data, +static int _ecore_desktop_menu_make_apps(const void *data, Ecore_Desktop_Tree * tree, int element, int level); +static Ecore_Desktop_Tree *_ecore_desktop_menu_get0(char *file, + Ecore_Desktop_Tree * + merge_stack, int level); +static Ecore_Desktop_Tree *_ecore_desktop_menu_create_menu(); +static int _ecore_desktop_menu_unxml(const void *data, + Ecore_Desktop_Tree * tree, + int element, int level); +static int _ecore_desktop_menu_check_directory(void *data, + const char *path); +static int _ecore_desktop_menu_check_menu(void *data, + const char *path); +static int _ecore_desktop_menu_legacy_menu_dir(void *data, + const char *path); +static int _ecore_desktop_menu_legacy_menu(void *data, + const char *path); +static void _ecore_desktop_menu_unxml_rules(Ecore_Desktop_Tree * rules, + Ecore_Desktop_Tree * tree, + char type, char sub_type); +static void _ecore_desktop_menu_unxml_moves(Ecore_Desktop_Tree * menu, + Ecore_Desktop_Tree * tree); +static void _ecore_desktop_menu_add_dirs(Ecore_Desktop_Tree * tree, + Ecore_List * paths, char *pre, + char *post, char *extra, + int element); +static int _ecore_desktop_menu_expand_apps(struct + _ecore_desktop_menu_unxml_data + *unxml_data, char *app_dir, + Ecore_Hash * pool); +static int _ecore_desktop_menu_check_app(void *data, const char *path); + +static int _ecore_desktop_menu_merge(const void *data, + Ecore_Desktop_Tree * tree, + int element, int level); +static int _ecore_desktop_menu_expand_default_dirs(const void *data, + Ecore_Desktop_Tree + * tree, + int element, + int level); + +static int _ecore_desktop_menu_generate(const void *data, + Ecore_Desktop_Tree * tree, + int element, int level); static void _ecore_desktop_menu_inherit_apps(void *value, - void *user_data); + void *user_data); static void _ecore_desktop_menu_select_app(void *value, - void *user_data); + void *user_data); static int _ecore_desktop_menu_apply_rules(struct - _ecore_desktop_menu_generate_data - *generate_data, - Ecore_Desktop_Tree * rule, - char *key, - Ecore_Desktop * desktop); + _ecore_desktop_menu_generate_data + *generate_data, + Ecore_Desktop_Tree * rule, + char *key, + Ecore_Desktop * desktop); /** * @defgroup Ecore_Desktop_Menu_Group menu Functions @@ -114,70 +117,74 @@ static int _ecore_desktop_menu_apply_rules(struct * Functions that deal with freedesktop.org menus. */ - EAPI void -ecore_desktop_menu_for_each(void (*func)(char *name, char *path, Ecore_Hash *apps)) +ecore_desktop_menu_for_each(void (*func) + (char *name, char *path, Ecore_Hash * apps)) { - char *menu_file; - + char *menu_file; + /* Find the main menu file. */ - menu_file = ecore_desktop_paths_file_find(ecore_desktop_paths_menus, - "applications.menu", -1, NULL, NULL); + menu_file = ecore_desktop_paths_file_find(ecore_desktop_paths_menus, + "applications.menu", -1, NULL, + NULL); if (!menu_file) - { - /* Try various quirks of various systems. */ - menu_file = ecore_desktop_paths_file_find(ecore_desktop_paths_menus, - "debian-menu.menu", -1, NULL, NULL); - /* FIXME: If all else fails, run debians funky menu generator shit. */ - } + { + /* Try various quirks of various systems. */ + menu_file = ecore_desktop_paths_file_find(ecore_desktop_paths_menus, + "debian-menu.menu", -1, NULL, + NULL); + /* FIXME: If all else fails, run debians funky menu generator shit. */ + } if (menu_file) - { - Ecore_Desktop_Tree *menus; - - /* convert the xml into menus */ - menus = ecore_desktop_menu_get(menu_file); - if (menus) - { - /* create the .desktop and order files from the menu */ - ecore_desktop_tree_foreach(menus, 0, _ecore_desktop_menu_make_apps, func); + { + Ecore_Desktop_Tree *menus; + + /* convert the xml into menus */ + menus = ecore_desktop_menu_get(menu_file); + if (menus) + { + /* create the .desktop and order files from the menu */ + ecore_desktop_tree_foreach(menus, 0, _ecore_desktop_menu_make_apps, + func); // FIXME: Can't free this just yet, causes major memory corruption. -// ecore_desktop_tree_del(menus); - } - free(menu_file); - } +// ecore_desktop_tree_del(menus); + } + free(menu_file); + } } static int -_ecore_desktop_menu_make_apps(const void *data, Ecore_Desktop_Tree * tree, int element, int level) +_ecore_desktop_menu_make_apps(const void *data, Ecore_Desktop_Tree * tree, + int element, int level) { if (tree->elements[element].type == ECORE_DESKTOP_TREE_ELEMENT_TYPE_STRING) { - if (strncmp((char *)tree->elements[element].element, "