From 5f4f421c3a4631d6fc0a64ce9bc0423def145f2e Mon Sep 17 00:00:00 2001 From: Miguel de Icaza Date: Wed, 16 Dec 1998 02:51:44 +0000 Subject: [PATCH] Mime-type action code --- gnome/gaction.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 gnome/gaction.c diff --git a/gnome/gaction.c b/gnome/gaction.c new file mode 100644 index 000000000..4087635d0 --- /dev/null +++ b/gnome/gaction.c @@ -0,0 +1,110 @@ +#include +#include +#include /* atoi */ +#include "fs.h" +#include "mad.h" +#include "x.h" +#include "dir.h" +#include "command.h" +#include "panel.h" +#define WANT_WIDGETS /* bleah */ +#include "main.h" +#include "color.h" +#include "mouse.h" +#include "layout.h" /* get_panel_widget */ +#include "ext.h" /* regex_command */ +#include "cmd.h" /* copy_cmd, ren_cmd, delete_cmd, ... */ +#include "gscreen.h" +#include "dir.h" +#include "dialog.h" +#include "../vfs/vfs.h" + +static void +gmc_execute (file_entry *fe, char *buf) +{ + exec_extension (fe->fname, buf, NULL, NULL, 0); +} + +int +gmc_open (file_entry *fe) +{ + char *mime_type, *cmd; + char *buf; + int size; + + if (gnome_metadata_get (fe->fname, "fm-open", &size, &buf) == 0){ + gmc_execute (fe, buf); + free (buf); + return 1; + } + + if (gnome_metadata_get (fe->fname, "open", &size, &buf) == 0){ + gmc_execute (fe, buf); + free (buf); + return 1; + } + + mime_type = gnome_mime_type_or_default (fe->fname, NULL); + if (!mime_type) + return 0; + + + cmd = gnome_mime_get_value (mime_type, "fm-open"); + + if (cmd){ + gmc_execute (fe, cmd); + return 1; + } + + cmd = gnome_mime_get_value (mime_type, "open"); + if (cmd){ + gmc_execute (fe, cmd); + return 1; + } + return 0; +} + +static void +gmc_run_view (char *filename, char *buf) +{ + exec_extension (filename, buf, NULL, NULL, 0); +} + +void +gmc_view (char *filename, int start_line) +{ + char *mime_type, *cmd; + char *buf; + int size; + + if (gnome_metadata_get (filename, "fm-view", &size, &buf) == 0){ + gmc_run_view (filename, buf); + free (buf); + return 1; + } + + if (gnome_metadata_get (filename, "view", &size, &buf) == 0){ + gmc_run_view (filename, buf); + free (buf); + return 1; + } + + mime_type = gnome_mime_type_or_default (filename, NULL); + if (!mime_type) + return 0; + + + cmd = gnome_mime_get_value (mime_type, "fm-view"); + + if (cmd){ + gmc_run_view (filename, cmd); + return 1; + } + + cmd = gnome_mime_get_value (mime_type, "view"); + if (cmd){ + gmc_run_view (filename, cmd); + return 1; + } + return 0; +}