2005-08-30 [colin] 1.9.13cvs72
[claws.git] / src / mimeview.c
index 8186fbc859bac0ab3c5b70288d6087d3df8d0758..9faf8056d268ca9ecdbe4a0a707132af5fbe1878 100644 (file)
@@ -459,7 +459,7 @@ static void mimeview_show_message_part(MimeView *mimeview, MimeInfo *partinfo)
        fname = mimeview->file;
        if (!fname) return;
 
-       if ((fp = fopen(fname, "rb")) == NULL) {
+       if ((fp = g_fopen(fname, "rb")) == NULL) {
                FILE_OP_ERROR(fname, "fopen");
                return;
        }
@@ -564,9 +564,10 @@ gboolean mimeview_show_part(MimeView *mimeview, MimeInfo *partinfo)
                return FALSE;
        }
 
+       if (mimeview->mimeviewer != NULL)
+               mimeview->mimeviewer->clear_viewer(mimeview->mimeviewer);
+
        if (mimeview->mimeviewer != viewer) {
-               if (mimeview->mimeviewer != NULL)
-                       mimeview->mimeviewer->clear_viewer(mimeview->mimeviewer);
                mimeview->mimeviewer = viewer;
                mimeview_change_view_type(mimeview, MIMEVIEW_VIEWER);
        }
@@ -991,12 +992,18 @@ gchar *mimeview_get_filename_for_part(MimeInfo *partinfo,
        filename = g_strdup(get_part_name(partinfo));
        if (!filename || !*filename)
                filename = g_strdup_printf("noname.%d", number);
-       subst_for_shellsafe_filename(filename);
+
+       if (!g_utf8_validate(filename, -1, NULL)) {
+               gchar *tmp = conv_filename_to_utf8(filename);
+               g_free(filename);
+               filename = tmp;
+       }
+       
+       subst_for_filename(filename);
 
        fullname = g_strconcat
                (basedir, G_DIR_SEPARATOR_S, (filename[0] == G_DIR_SEPARATOR)
                 ? &filename[1] : filename, NULL);
-       subst_chars(fullname, "/\\", G_DIR_SEPARATOR);
 
        g_free(filename);
        return fullname;
@@ -1058,14 +1065,14 @@ static void mimeview_save_all(MimeView *mimeview)
                startdir = g_strconcat(prefs_common.attach_save_dir,
                                       G_DIR_SEPARATOR_S, NULL);
 
-       dirname = filesel_select_file_open_folder(_("Select destination folder"), startdir);
+       dirname = filesel_select_file_save_folder(_("Select destination folder"), startdir);
        if (!dirname) {
                if (startdir) g_free(startdir);
                return;
        }
 
        if (!is_dir_exist (dirname)) {
-               alertpanel_error(_("`%s' is not a directory."),
+               alertpanel_error(_("'%s' is not a directory."),
                                 dirname);
                if (startdir) g_free(startdir);
                return;
@@ -1114,7 +1121,7 @@ static void mimeview_save_as(MimeView *mimeview)
        gchar *filepath = NULL;
        gchar *filedir = NULL;
        MimeInfo *partinfo;
-       const gchar *partname = NULL;
+       gchar *partname = NULL;
 
        if (!mimeview->opened) return;
        if (!mimeview->file) return;
@@ -1129,16 +1136,27 @@ static void mimeview_save_as(MimeView *mimeview)
        }                        
        g_return_if_fail(partinfo != NULL);
        
-       if ((partname = get_part_name(partinfo)) == NULL) {
+       if (get_part_name(partinfo) == NULL) {
                return;
        }
+       partname = g_strdup(get_part_name(partinfo));
+       
+       if (!g_utf8_validate(partname, -1, NULL)) {
+               gchar *tmp = conv_filename_to_utf8(partname);
+               g_free(partname);
+               partname = tmp;
+       }
 
+       subst_for_filename(partname);
+       
        if (prefs_common.attach_save_dir)
                filepath = g_strconcat(prefs_common.attach_save_dir,
                                       G_DIR_SEPARATOR_S, partname, NULL);
        else
                filepath = g_strdup(partname);
 
+       g_free(partname);
+
        filename = filesel_select_file_save(_("Save as"), filepath);
        if (!filename) {
                g_free(filepath);
@@ -1241,7 +1259,7 @@ static void mimeview_open_with(MimeView *mimeview)
        cmd = input_dialog_combo
                (_("Open with"),
                 _("Enter the command line to open file:\n"
-                  "(`%s' will be replaced with file name)"),
+                  "('%s' will be replaced with file name)"),
                 prefs_common.mime_open_cmd,
                 prefs_common.mime_open_cmd_history,
                 TRUE);
@@ -1259,10 +1277,10 @@ static void mimeview_open_with(MimeView *mimeview)
 static void mimeview_view_file(const gchar *filename, MimeInfo *partinfo,
                               const gchar *cmdline)
 {
-       static gchar *default_image_cmdline = "display '%s'";
-       static gchar *default_audio_cmdline = "play '%s'";
+       static gchar *default_image_cmdline = DEFAULT_IMAGE_VIEWER_CMD;
+       static gchar *default_audio_cmdline = DEFAULT_AUDIO_PLAYER_CMD;
        static gchar *default_html_cmdline = DEFAULT_BROWSER_CMD;
-       static gchar *mime_cmdline = "metamail -d -b -x -c %s '%s'";
+       static gchar *mime_cmdline = DEFAULT_MIME_CMD;
        gchar buf[1024];
        gchar m_buf[1024];
        const gchar *cmd;
@@ -1300,7 +1318,7 @@ static void mimeview_view_file(const gchar *filename, MimeInfo *partinfo,
                g_snprintf(buf, sizeof(buf), cmd, filename);
        else {
                if (cmd)
-                       g_warning("MIME viewer command line is invalid: `%s'", cmd);
+                       g_warning("MIME viewer command line is invalid: '%s'", cmd);
                if (def_cmd)
                        g_snprintf(buf, sizeof(buf), def_cmd, filename);
                else
@@ -1490,7 +1508,7 @@ static void toggle_icon(GtkToggleButton *button, MimeView *mimeview)
 
 static void icon_list_append_icon (MimeView *mimeview, MimeInfo *mimeinfo) 
 {
-       GtkWidget *pixmap;
+       GtkWidget *pixmap = NULL;
        GtkWidget *vbox;
        GtkWidget *button;
        gchar *tip;
@@ -1596,9 +1614,16 @@ static void icon_list_append_icon (MimeView *mimeview, MimeInfo *mimeinfo)
                        to_human_readable(mimeinfo->length), NULL);
        g_free(content_type);
        if (desc && *desc) {
-               tiptmp = g_strjoin("\n", desc, tip, NULL);
+               gchar *tmp = NULL;
+               if (!g_utf8_validate(desc, -1, NULL)) {
+                       tmp = conv_filename_to_utf8(desc);
+               } else {
+                       tmp = g_strdup(desc);
+               }
+               tiptmp = g_strjoin("\n", tmp, tip, NULL);
                g_free(tip);
                tip = tiptmp;
+               g_free(tmp);
        }
        if (sigshort && *sigshort) {
                tiptmp = g_strjoin("\n", tip, sigshort, NULL);