Include a Other Software section in Help file
[geeqie.git] / src / editors.c
index f8e5025..902e736 100644 (file)
@@ -104,33 +104,41 @@ void editor_description_free(EditorDescription *editor)
 
 static GList *editor_mime_types_to_extensions(gchar **mime_types)
 {
-       /* FIXME: this should be rewritten to use the shared mime database, as soon as we switch to gio */
+       /** @FIXME this should be rewritten to use the shared mime database, as soon as we switch to gio */
 
        static const gchar *conv_table[][2] = {
                {"application/x-ufraw", ".ufraw"},
                {"image/*",             "*"},
                {"image/bmp",           ".bmp"},
                {"image/gif",           ".gif"},
-               {"image/jpeg",          ".jpeg;.jpg"},
+               {"image/jpeg",          ".jpeg;.jpg;.mpo"},
                {"image/jpg",           ".jpg;.jpeg"},
+               {"image/webp",          ".webp"},
                {"image/pcx",           ".pcx"},
                {"image/png",           ".png"},
                {"image/svg",           ".svg"},
                {"image/svg+xml",       ".svg"},
                {"image/svg+xml-compressed",    ".svg"},
-               {"image/tiff",          ".tiff;.tif"},
+               {"image/tiff",          ".tiff;.tif;.mef"},
+               {"image/vnd-ms.dds",    ".dds"},
+               {"image/x-adobe-dng",   ".dng"},
                {"image/x-bmp",         ".bmp"},
                {"image/x-canon-crw",   ".crw"},
                {"image/x-canon-cr2",   ".cr2"},
+               {"image/x-canon-cr3",   ".cr3"},
                {"image/x-cr2",         ".cr2"},
-               {"image/x-dcraw",       "%raw"},
+               {"image/x-dcraw",       "%raw;.mos"},
                {"image/x-epson-erf",   "%erf"},
                {"image/x-ico",         ".ico"},
+               {"image/x-kodak-kdc",   ".kdc"},
                {"image/x-mrw",         ".mrw"},
                {"image/x-minolta-mrw", ".mrw"},
                {"image/x-MS-bmp",      ".bmp"},
                {"image/x-nef",         ".nef"},
                {"image/x-nikon-nef",   ".nef"},
+               {"image/x-panasonic-raw",       ".raw"},
+               {"image/x-panasonic-rw2",       ".rw2"},
+               {"image/x-pentax-pef",  ".pef"},
                {"image/x-orf",         ".orf"},
                {"image/x-olympus-orf", ".orf"},
                {"image/x-pcx",         ".pcx"},
@@ -144,11 +152,15 @@ static GList *editor_mime_types_to_extensions(gchar **mime_types)
                {"image/x-raf",         ".raf"},
                {"image/x-fuji-raf",    ".raf"},
                {"image/x-sgi",         ".sgi"},
+               {"image/x-sony-arw",    ".arw"},
+               {"image/x-sony-sr2",    ".sr2"},
+               {"image/x-sony-srf",    ".srf"},
                {"image/x-tga",         ".tga"},
                {"image/x-xbitmap",     ".xbm"},
                {"image/x-xcf",         ".xcf"},
                {"image/x-xpixmap",     ".xpm"},
                {"image/x-x3f",         ".x3f"},
+               {"application/x-navi-animation",                ".ani"},
                {"application/x-ptoptimizer-script",    ".pto"},
                {NULL, NULL}};
 
@@ -174,6 +186,8 @@ gboolean editor_read_desktop_file(const gchar *path)
        gchar *try_exec;
        GtkTreeIter iter;
        gboolean category_geeqie = FALSE;
+       GList *work;
+       gboolean disabled;
 
        if (g_hash_table_lookup(editors, key)) return FALSE; /* the file found earlier wins */
 
@@ -342,9 +356,25 @@ gboolean editor_read_desktop_file(const gchar *path)
 
        if (editor->ignored) return TRUE;
 
+       work = options->disabled_plugins;
+
+       disabled = FALSE;
+       while (work)
+               {
+               if (g_strcmp0(path, work->data) == 0)
+                       {
+                       disabled = TRUE;
+                       break;
+                       }
+               work = work->next;
+               }
+
+       editor->disabled = disabled;
+
        gtk_list_store_append(desktop_file_list, &iter);
        gtk_list_store_set(desktop_file_list, &iter,
                           DESKTOP_FILE_COLUMN_KEY, key,
+                          DESKTOP_FILE_COLUMN_DISABLED, editor->disabled,
                           DESKTOP_FILE_COLUMN_NAME, editor->name,
                           DESKTOP_FILE_COLUMN_HIDDEN, editor->hidden ? _("yes") : _("no"),
                           DESKTOP_FILE_COLUMN_WRITABLE, access_file(path, W_OK),
@@ -373,7 +403,7 @@ void editor_table_clear(void)
                }
        else
                {
-               desktop_file_list = gtk_list_store_new(DESKTOP_FILE_COLUMN_COUNT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING);
+               desktop_file_list = gtk_list_store_new(DESKTOP_FILE_COLUMN_COUNT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING);
                }
        if (editors)
                {
@@ -428,7 +458,7 @@ GList *editor_get_desktop_files(void)
        else
                xdg_data_dirs = g_strdup("/usr/share");
 
-       all_dirs = g_strconcat(get_rc_dir(), ":", GQ_APP_DIR, ":", xdg_data_home_get(), ":", xdg_data_dirs, NULL);
+       all_dirs = g_strconcat(get_rc_dir(), ":", gq_app_dir, ":", xdg_data_home_get(), ":", xdg_data_dirs, NULL);
 
        g_free(xdg_data_dirs);
 
@@ -460,6 +490,11 @@ static void editor_list_add_cb(gpointer key, gpointer value, gpointer data)
            strcmp(editor->key, CMD_DELETE) == 0 ||
            strcmp(editor->key, CMD_FOLDER) == 0) return;
 
+       if (editor->disabled)
+               {
+               return;
+               }
+
        *listp = g_list_prepend(*listp, editor);
 }
 
@@ -467,12 +502,27 @@ static gint editor_sort(gconstpointer a, gconstpointer b)
 {
        const EditorDescription *ea = a;
        const EditorDescription *eb = b;
+       gchar *caseless_name_ea;
+       gchar *caseless_name_eb;
+       gchar *collate_key_ea;
+       gchar *collate_key_eb;
        gint ret;
 
        ret = strcmp(ea->menu_path, eb->menu_path);
        if (ret != 0) return ret;
 
-       return g_utf8_collate(ea->name, eb->name);
+       caseless_name_ea = g_utf8_casefold(ea->name, -1);
+       caseless_name_eb = g_utf8_casefold(eb->name, -1);
+       collate_key_ea = g_utf8_collate_key_for_filename(caseless_name_ea, -1);
+       collate_key_eb = g_utf8_collate_key_for_filename(caseless_name_eb, -1);
+       ret = g_strcmp0(collate_key_ea, collate_key_eb);
+
+       g_free(collate_key_ea);
+       g_free(collate_key_eb);
+       g_free(caseless_name_ea);
+       g_free(caseless_name_eb);
+
+       return ret;
 }
 
 GList *editor_list_get(void)
@@ -543,7 +593,7 @@ static EditorVerboseData *editor_verbose_window(EditorData *ed, const gchar *tex
                                   NULL, FALSE,
                                   NULL, ed);
        buf = g_strdup_printf(_("Output of %s"), text);
-       generic_dialog_add_message(vd->gd, NULL, buf, NULL, TRUE);
+       generic_dialog_add_message(vd->gd, NULL, buf, NULL, FALSE);
        g_free(buf);
        vd->button_stop = generic_dialog_add_button(vd->gd, GTK_STOCK_STOP, NULL,
                                                   editor_verbose_window_stop, FALSE);
@@ -1034,7 +1084,7 @@ static EditorFlags editor_command_one(const EditorDescription *editor, GList *li
                args[n++] = command;
                args[n] = NULL;
 
-               if ((ed->flags & EDITOR_DEST) && fd && fd->change && fd->change->dest) /* FIXME: error handling */
+               if ((ed->flags & EDITOR_DEST) && fd && fd->change && fd->change->dest) /** @FIXME error handling */
                        {
                        g_setenv("GEEQIE_DESTINATION", fd->change->dest, TRUE);
                        }