Hallo, in this patch is the e_fm_file_has_mime() function and it now gets used instead of the bunch of strcmps. Probably e_fm_file_is_regular() shouldn Âīt be exported. file->mime is now always lower case, so the programs gets shown in open-with even if the extension has upper case.
regards, jeff
Index: e_fileman_file.c =================================================================== RCS file: /root/e17/apps/e/src/bin/e_fileman_file.c,v retrieving revision 1.1.1.5 diff -r1.1.1.5 e_fileman_file.c 77,83c77,87 < ext = strrchr(file->name, '.'); < if (ext) < { < file->mime = ext; < } < else < file->mime = "unknown"; --- > ext = strrchr(file->name, '.'); > if (ext) > { > char *ext2; > ext = strdup(ext); > ext2 = ext; > for (; *ext2; ext2++) *ext2 = tolower(*ext2); > file->mime = ext; > } > else > file->mime = "unknown"; 108,113c112,117 < free(file->path); < file->path = strdup(path); < free(file->name); < file->name = strdup(name); < D(("e_fm_file_rename: ok (%p) (%s)\n", file, name)); < return 1; --- > free(file->path); > file->path = strdup(path); > free(file->name); > file->name = strdup(name); > D(("e_fm_file_rename: ok (%p) (%s)\n", file, name)); > return 1; 117,118c121,122 < D(("e_fm_file_rename: fail (%p) (%s)\n", file, name)); < return 0; --- > D(("e_fm_file_rename: fail (%p) (%s)\n", file, name)); > return 0; 127,132c131,136 < free(file->path); < file->path = NULL; < free(file->name); < file->name = NULL; < D(("e_fm_file_delete: ok (%p) (%s)\n", file, file->name)); < return 1; --- > free(file->path); > file->path = NULL; > free(file->name); > file->name = NULL; > D(("e_fm_file_delete: ok (%p) (%s)\n", file, file->name)); > return 1; 136,137c140,141 < D(("e_fm_file_delete: fail (%p) (%s)\n", file, file->name)); < return 0; --- > D(("e_fm_file_delete: fail (%p) (%s)\n", file, file->name)); > return 0; 148,153c152,157 < free(file->path); < file->path = strdup(name); < free(file->name); < file->name = strdup(ecore_file_get_file(name)); < D(("e_fm_file_copy: ok (%p) (%s)\n", file, name)); < return 1; --- > free(file->path); > file->path = strdup(name); > free(file->name); > file->name = strdup(ecore_file_get_file(name)); > D(("e_fm_file_copy: ok (%p) (%s)\n", file, name)); > return 1; 157,158c161,162 < D(("e_fm_file_copy: fail (%p) (%s)\n", file, name)); < return 0; --- > D(("e_fm_file_copy: fail (%p) (%s)\n", file, name)); > return 0; 161a166,181 > int > e_fm_file_is_regular(E_Fm_File *file) /* TODO: find better name */ > { > return ((file->type == E_FM_FILE_TYPE_FILE) > || (file->type == E_FM_FILE_TYPE_SYMLINK)); > } > > EAPI int > e_fm_file_has_mime(E_Fm_File *file, char* mime) > { > if (!file->mime) return 0; > > D(("e_fm_file_has_mime: (%p) : %s\n", file,file->mime)); > return (!strcasecmp(file->mime, mime)); > } > 170c190 < E_Fm_File_Preview_Function func; --- > E_Fm_File_Preview_Function func; 172,174c192,194 < func = file->preview_funcs[i]; < if (func(file)) < return 1; --- > func = file->preview_funcs[i]; > if (func(file)) > return 1; 186,195c206,212 < char *ext; < < if ((file->type != E_FM_FILE_TYPE_FILE) && (file->type != E_FM_FILE_TYPE_SYMLINK)) return 0; < < ext = strrchr(file->name, '.'); < if (!ext) return 0; < < D(("e_fm_file_is_image: (%p)\n", file)); < return (!strcasecmp(ext, ".jpg")) || (!strcasecmp(ext, ".png")) || < (!strcasecmp(ext, ".jpeg")); --- > > //D(("e_fm_file_is_image: (%p)\n", file)); > > return e_fm_file_is_regular(file) > &&(e_fm_file_has_mime(file,".jpg") > || e_fm_file_has_mime(file,".jpeg") > || e_fm_file_has_mime(file,".png")); 202d218 < char *ext; 205,210c221 < if ((file->type != E_FM_FILE_TYPE_FILE) && (file->type != E_FM_FILE_TYPE_SYMLINK)) return 0; < < ext = strrchr(file->name, '.'); < if (!ext) return 0; < < if (strcasecmp(ext, ".edj")) --- > if (!e_fm_file_is_regular(file) && !e_fm_file_has_mime(file,".edj")) 219,225c230,236 < { < if (!strcmp(l->data, "widgets/border/default/border")) < { < val = 1; < break; < } < } --- > { > if (!strcmp(l->data, "widgets/border/default/border")) > { > val = 1; > break; > } > } 234d244 < char *ext; 237,242c247 < if ((file->type != E_FM_FILE_TYPE_FILE) && (file->type != E_FM_FILE_TYPE_SYMLINK)) return 0; < < ext = strrchr(file->name, '.'); < if (!ext) return 0; < < if (strcasecmp(ext, ".edj")) --- > if (!e_fm_file_is_regular(file) && !e_fm_file_has_mime(file,".edj")) 244c249 < --- > 251,257c256,262 < { < if (!strcmp(l->data, "desktop/background")) < { < val = 1; < break; < } < } --- > { > if (!strcmp(l->data, "desktop/background")) > { > val = 1; > break; > } > } 265,268d269 < char *ext; < E_App *app; < < if ((file->type != E_FM_FILE_TYPE_FILE) && (file->type != E_FM_FILE_TYPE_SYMLINK)) return 0; 270,271c271 < ext = strrchr(file->name, '.'); < if (!ext) return 0; --- > E_App *app; 273c273 < if (strcasecmp(ext, ".eap")) --- > if (!e_fm_file_is_regular(file) || !e_fm_file_has_mime(file,".eap")) 275c275 < --- > 278,281c278,281 < { < e_object_unref(E_OBJECT(app)); < return 0; < } --- > { > e_object_unref(E_OBJECT(app)); > return 0; > } 289,299c289,293 < char *ext; < < ext = strrchr(file->name, '.'); < if (ext) < { < if (!strcasecmp(ext, ".eap")) < { < D(("e_fm_file_can_exec: true (%p) (%s)\n", file, file->name)); < return 1; < } < } --- > if (e_fm_file_has_mime(file,".eap")) > { > D(("e_fm_file_can_exec: true (%p) (%s)\n", file, file->name)); > return 1; > } 302,305c296,299 < { < D(("e_fm_file_can_exec: true (%p) (%s)\n", file, file->name)); < return 1; < } --- > { > D(("e_fm_file_can_exec: true (%p) (%s)\n", file, file->name)); > return 1; > } 315d308 < char *ext; 317,335c310,324 < ext = strrchr(file->name, '.'); < if (ext) < { < if (!strcasecmp(ext, ".eap")) < { < E_App *e_app; < Ecore_Exe *exe; < < e_app = e_app_new(file->path, 0); < < if (!e_app) return 0; < < exe = ecore_exe_run(e_app->exe, NULL); < if (exe) ecore_exe_free(exe); < e_object_unref(E_OBJECT(e_app)); < D(("e_fm_file_exec: eap (%p) (%s)\n", file, file->name)); < return 1; < } < } --- > if(e_fm_file_has_mime(file,".eap")) > { > E_App *e_app; > Ecore_Exe *exe; > > e_app = e_app_new(file->path, 0); > > if (!e_app) return 0; > > exe = ecore_exe_run(e_app->exe, NULL); > if (exe) ecore_exe_free(exe); > e_object_unref(E_OBJECT(e_app)); > D(("e_fm_file_exec: eap (%p) (%s)\n", file, file->name)); > return 1; > } 339,348c328,337 < { < e_error_dialog_show(_("Run Error"), < _("Enlightenment was unable to fork a child process:\n" < "\n" < "%s\n" < "\n"), < file->path); < D(("e_fm_file_exec: fail (%p) (%s)\n", file, file->name)); < return 0; < } --- > { > e_error_dialog_show(_("Run Error"), > _("Enlightenment was unable to fork a child process:\n" > "\n" > "%s\n" > "\n"), > file->path); > D(("e_fm_file_exec: fail (%p) (%s)\n", file, file->name)); > return 0; > } 374,382c363,368 < { < char *ext; < < assoc = l->data; < ext = strrchr(file->path, '.'); < if ((ext) && (!strcasecmp(ext, assoc->mime))) < break; < assoc = NULL; < } --- > { > assoc = l->data; > if (e_fm_file_has_mime(file,assoc->mime)) > break; > assoc = NULL; > } 390,399c376,385 < { < e_error_dialog_show(_("Run Error"), < _("Enlightenment was unable to fork a child process:\n" < "\n" < "%s\n" < "\n"), < app); < D(("e_fm_assoc_exec: fail (%s)\n", app)); < return 0; < } --- > { > e_error_dialog_show(_("Run Error"), > _("Enlightenment was unable to fork a child process:\n" > "\n" > "%s\n" > "\n"), > app); > D(("e_fm_assoc_exec: fail (%s)\n", app)); > return 0; > } 418,426c404,412 < { < e_error_dialog_show(_("Run Error"), < _("3 Enlightenment was unable to fork a child process:\n" < "\n" < "%s\n" < "\n"), < app); < return 0; < } --- > { > e_error_dialog_show(_("Run Error"), > _("3 Enlightenment was unable to fork a child process:\n" > "\n" > "%s\n" > "\n"), > app); > return 0; > } 438c424 < ///??? if (file->mime) free(file->mime); --- > ///??? if (file->mime) free(file->mime); Index: e_fileman_file.h =================================================================== RCS file: /root/e17/apps/e/src/bin/e_fileman_file.h,v retrieving revision 1.1.1.2 diff -r1.1.1.2 e_fileman_file.h 40c40 < char *mime; /* mimetype (just the extension) */ --- > char *mime; /* mimetype (just the extension, beginning with dot) */ 70,71c70,72 < EAPI int e_fm_file_exec_with (E_Fm_File *file, char* exec_with); < --- > EAPI int e_fm_file_exec_with (E_Fm_File *file, char* exec_with); > EAPI int e_fm_file_has_mime (E_Fm_File *file, char* mime); > EAPI int e_fm_file_is_regular (E_Fm_File *file); Index: e_fileman_icon.c =================================================================== RCS file: /root/e17/apps/e/src/bin/e_fileman_icon.c,v retrieving revision 1.1.1.17 diff -r1.1.1.17 e_fileman_icon.c 499,518c499,512 < sd->image_object = edje_object_add(sd->evas); < if (sd->file->type == E_FM_FILE_TYPE_DIRECTORY) < e_theme_edje_object_set(sd->image_object, "base/theme/fileman", < "icons/fileman/folder"); < else < { < char *ext; < < ext = strrchr(sd->file->name, '.'); < if (ext) < { < char part[PATH_MAX]; < char *ext2; < < ext = strdup(ext); < ext2 = ext; < for (; *ext2; ext2++) *ext2 = tolower(*ext2); < < snprintf(part, PATH_MAX, "icons/fileman/%s", (ext + 1)); < if (!e_theme_edje_object_set(sd->image_object, "base/theme/fileman", part)) --- > char part[PATH_MAX]; > > sd->image_object = edje_object_add(sd->evas); > > // since a mime is set with every creation of an E_Fm_File its existence isnīt checked here > if(sd->file->type == E_FM_FILE_TYPE_DIRECTORY) > e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "icons/fileman/folder"); > > else if(e_fm_file_has_mime(sd->file,"unknown")) > e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "icons/fileman/file"); > else > { > snprintf(part, PATH_MAX, "icons/fileman/%s", (sd->file->mime + 1)); > if (!e_theme_edje_object_set(sd->image_object, "base/theme/fileman", part)) 520,524c514 < free(ext); < } < else < e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "icons/fileman/file"); < } --- > } 531a522,523 > > 536d527 < char *ext; 540,544c531 < ext = strrchr(sd->file->name, '.'); < if ((ext) && (strcasecmp(ext, ".eap"))) < ext = NULL; < < if ((ext) || (ecore_file_exists(sd->thumb_path))) --- > if (e_fm_file_has_mime(sd->file,".eap") || (ecore_file_exists(sd->thumb_path))) Index: e_fileman_smart.c =================================================================== RCS file: /root/e17/apps/e/src/bin/e_fileman_smart.c,v retrieving revision 1.1.1.44 diff -r1.1.1.44 e_fileman_smart.c 1214c1214 < snprintf(text, 512, "%s", "An Image"); --- > snprintf(text, 512, "%s", icon->file->mime); 2123c2123 < if (!strcmp(icon->file->name, ".")) return; --- > if (!strcmp(icon->file->name, ".")) return; /* this case cant happen!? */ 2218c2218 < if (strcmp(icon->file->mime, assoc->mime) == 0) --- > if (e_fm_file_has_mime(icon->file, assoc->mime))