2005-10-25 [colin] 1.9.15cvs106
[claws.git] / src / mimeview.c
index c188e0d20593743ce4ec392bd2f2d99304020245..57e53c7f9006c5018c64de5775bd228b7bf5354b 100644 (file)
@@ -118,7 +118,8 @@ static void mimeview_launch         (MimeView       *mimeview);
 static void mimeview_open_with         (MimeView       *mimeview);
 static void mimeview_view_file         (const gchar    *filename,
                                         MimeInfo       *partinfo,
-                                        const gchar    *cmdline);
+                                        const gchar    *cmdline,
+                                        MimeView       *mimeview);
 static gboolean icon_clicked_cb                (GtkWidget      *button, 
                                         GdkEventButton *event, 
                                         MimeView       *mimeview);
@@ -442,7 +443,7 @@ static GtkCTreeNode *mimeview_append_part(MimeView *mimeview,
        else
                str[COL_NAME] = (gchar *) get_part_name(partinfo);
 
-       node = gtk_ctree_insert_node(ctree, parent, NULL, str, 0,
+       node = gtk_sctree_insert_node(ctree, parent, NULL, str, 0,
                                     NULL, NULL, NULL, NULL,
                                     FALSE, TRUE);
        gtk_ctree_node_set_row_data(ctree, node, partinfo);
@@ -669,7 +670,7 @@ static void update_signature_noticeview(MimeView *mimeview, MimeInfo *mimeinfo)
        if (privacy_mimeinfo_get_sig_status(mimeinfo) == SIGNATURE_UNCHECKED) {
                gchar *tmp = privacy_mimeinfo_sig_info_short(mimeinfo);
                text = g_strdup_printf("%s %s",
-                       tmp, _("Click the icon to check it."));
+                       tmp, _("Click the icon or hit 'C' to check it."));
                g_free(tmp);
        } else
                text = privacy_mimeinfo_sig_info_short(mimeinfo);
@@ -692,6 +693,8 @@ static void check_signature_cb(GtkWidget *widget, gpointer user_data)
        if (mimeinfo == NULL)
                return;
 
+       noticeview_set_text(mimeview->siginfoview, _("Checking signature..."));
+       GTK_EVENTS_FLUSH();
        privacy_mimeinfo_check_signature(mimeinfo);
        update_signature_noticeview(mimeview, mimeview->siginfo);
        icon_list_clear(mimeview);
@@ -1055,7 +1058,9 @@ gchar *mimeview_get_filename_for_part(MimeInfo *partinfo,
                 ? &filename[1] : filename, NULL);
 
        g_free(filename);
-       return fullname;
+       filename = conv_filename_from_utf8(fullname);
+       g_free(fullname);
+       return filename;
 }
 
 /**
@@ -1076,9 +1081,16 @@ static gboolean mimeview_write_part(const gchar *filename,
        if (is_file_exist(filename)) {
                AlertValue aval;
                gchar *res;
+               gchar *tmp;
+               
+               if (!g_utf8_validate(filename, -1, NULL))
+                       tmp = conv_filename_to_utf8(filename);
+               else 
+                       tmp = g_strdup(filename);
                
                res = g_strdup_printf(_("Overwrite existing file '%s'?"),
-                                     filename);
+                                     tmp);
+               g_free(tmp);
                aval = alertpanel(_("Overwrite"), res, GTK_STOCK_OK, 
                                  GTK_STOCK_CANCEL, NULL);
                g_free(res);                                      
@@ -1268,7 +1280,7 @@ static void mimeview_launch(MimeView *mimeview)
                alertpanel_error
                        (_("Can't save the part of multipart message."));
        else
-               mimeview_view_file(filename, partinfo, NULL);
+               mimeview_view_file(filename, partinfo, NULL, mimeview);
 
        g_free(filename);
 }
@@ -1281,6 +1293,7 @@ static void mimeview_open_with(MimeView *mimeview)
        gchar *mime_command = NULL;
        gchar *content_type = NULL;
 
+       if (!mimeview) return;
        if (!mimeview->opened) return;
        if (!mimeview->file) return;
 
@@ -1320,7 +1333,7 @@ static void mimeview_open_with(MimeView *mimeview)
                 TRUE);
        g_free(mime_command);
        if (cmd) {
-               mimeview_view_file(filename, partinfo, cmd);
+               mimeview_view_file(filename, partinfo, cmd, mimeview);
                g_free(prefs_common.mime_open_cmd);
                prefs_common.mime_open_cmd = cmd;
                prefs_common.mime_open_cmd_history =
@@ -1331,7 +1344,7 @@ static void mimeview_open_with(MimeView *mimeview)
 }
 
 static void mimeview_view_file(const gchar *filename, MimeInfo *partinfo,
-                              const gchar *cmdline)
+                              const gchar *cmdline, MimeView *mimeview)
 {
        static gchar *default_image_cmdline = DEFAULT_IMAGE_VIEWER_CMD;
        static gchar *default_audio_cmdline = DEFAULT_AUDIO_PLAYER_CMD;
@@ -1348,6 +1361,7 @@ static void mimeview_view_file(const gchar *filename, MimeInfo *partinfo,
                def_cmd = NULL;
        } else if (MIMETYPE_APPLICATION == partinfo->type &&
                   !g_ascii_strcasecmp(partinfo->subtype, "octet-stream")) {
+               mimeview_open_with(mimeview);
                return;
        } else if (MIMETYPE_IMAGE == partinfo->type) {
                cmd = prefs_common.mime_image_viewer;
@@ -1377,11 +1391,14 @@ static void mimeview_view_file(const gchar *filename, MimeInfo *partinfo,
                        g_warning("MIME viewer command line is invalid: '%s'", cmd);
                if (def_cmd)
                        g_snprintf(buf, sizeof(buf), def_cmd, filename);
-               else
+               else {
+                       mimeview_open_with(mimeview);
                        return;
+               }
        }
 
-       execute_command_line(buf, TRUE);
+       if (execute_command_line(buf, TRUE) != 0)
+               mimeview_open_with(mimeview);
 }
 
 void mimeview_register_viewer_factory(MimeViewerFactory *factory)