2007-01-12 [paul] 2.7.0cvs14
[claws.git] / src / mimeview.c
index da4a9d0e5900d4a8da770414ddfb8903480313df..d0c4cadb07dae822c140343db4d4c918b39f2e7f 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2006 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -339,6 +339,17 @@ void mimeview_init(MimeView *mimeview)
                GTK_WIDGET_PTR(mimeview->textview));
 }
 
+static gboolean any_part_is_signed(MimeInfo *mimeinfo)
+{
+       while (mimeinfo) {
+               if (privacy_mimeinfo_is_signed(mimeinfo))
+                       return TRUE;
+               mimeinfo = procmime_mimeinfo_next(mimeinfo);
+       }
+
+       return FALSE;
+}
+
 void mimeview_show_message(MimeView *mimeview, MimeInfo *mimeinfo,
                           const gchar *file)
 {
@@ -357,7 +368,13 @@ void mimeview_show_message(MimeView *mimeview, MimeInfo *mimeinfo,
        g_signal_handlers_block_by_func(G_OBJECT(ctree), mimeview_selected,
                                        mimeview);
 
+       /* check if the mail's signed - it can change the mail structure */
+       
+       if (any_part_is_signed(mimeinfo))
+               debug_print("signed mail\n");
+
        mimeview_set_multipart_tree(mimeview, mimeinfo, NULL);
+       icon_list_clear(mimeview);
        icon_list_create(mimeview, mimeinfo);
 
        g_signal_handlers_unblock_by_func(G_OBJECT(ctree),
@@ -427,6 +444,28 @@ MimeInfo *mimeview_get_selected_part(MimeView *mimeview)
                (GTK_CTREE(mimeview->ctree), mimeview->opened);
 }
 
+gint mimeview_get_selected_part_num(MimeView *mimeview)
+{
+       gint i = 0;
+       GList *rows = GTK_CLIST(mimeview->ctree)->row_list;
+       while (rows) {
+               if (mimeview->opened == GTK_CTREE_NODE(rows))
+                       return i;
+               i++;
+               rows = rows->next;
+       }
+       return -1;
+}
+
+void mimeview_select_part_num(MimeView *mimeview, gint i)
+{
+       if (i < 0)
+               return;
+       gtk_clist_unselect_all(GTK_CLIST(mimeview->ctree));
+       gtk_clist_select_row(GTK_CLIST(mimeview->ctree), i, -1);
+       gtkut_clist_set_focus_row(GTK_CLIST(mimeview->ctree), i);
+}
+
 static void mimeview_set_multipart_tree(MimeView *mimeview,
                                        MimeInfo *mimeinfo,
                                        GtkCTreeNode *parent)
@@ -1494,7 +1533,8 @@ static void mimeview_save_all(MimeView *mimeview)
 
        g_free(prefs_common.attach_save_dir);
        g_free(startdir);
-       prefs_common.attach_save_dir = g_strdup(dirname);
+       prefs_common.attach_save_dir = g_filename_to_utf8(dirname,
+                                       -1, NULL, NULL, NULL);
 }
 
 static MimeInfo *mimeview_get_part_to_use(MimeView *mimeview)
@@ -1567,7 +1607,7 @@ static void mimeview_save_as(MimeView *mimeview)
        filedir = g_path_get_dirname(filename);
        if (filedir && strcmp(filedir, ".")) {
                g_free(prefs_common.attach_save_dir);
-               prefs_common.attach_save_dir = g_strdup(filedir);
+               prefs_common.attach_save_dir = g_filename_to_utf8(filedir, -1, NULL, NULL, NULL);
        }
 
        g_free(filedir);
@@ -1790,6 +1830,7 @@ static void icon_selected (MimeView *mimeview, gint num, MimeInfo *partinfo)
 {
        GtkCTreeNode *node;
        node = gtk_ctree_find_by_row_data(GTK_CTREE(mimeview->ctree), NULL, partinfo);
+
        if (node)
                gtk_ctree_select(GTK_CTREE(mimeview->ctree), node);
 }              
@@ -1942,7 +1983,7 @@ static void icon_list_append_icon (MimeView *mimeview, MimeInfo *mimeinfo)
                          GINT_TO_POINTER(mimeview->icon_count));
        g_object_set_data(G_OBJECT(button), "partinfo", 
                          mimeinfo);
-       
+
        switch (mimeinfo->type) {
                
        case MIMETYPE_TEXT:
@@ -2065,7 +2106,7 @@ static void icon_list_clear (MimeView *mimeview)
 {
        GList     *child;
        GtkAdjustment *adj;
-       
+               
        child = gtk_container_children(GTK_CONTAINER(mimeview->icon_vbox));
        for (; child != NULL; child = g_list_next(child)) {
                gtkut_container_remove(GTK_CONTAINER(mimeview->icon_vbox),