void mimeview_show_message(MimeView *mimeview, MimeInfo *mimeinfo, const gchar *file) { GtkCTree *ctree = GTK_CTREE(mimeview->ctree); GtkCTreeNode *node; mimeview_clear(mimeview); g_return_if_fail(file != NULL); g_return_if_fail(mimeinfo != NULL); mimeview->mimeinfo = mimeinfo; mimeview->file = g_strdup(file); gtk_signal_handler_block_by_func(GTK_OBJECT(ctree), mimeview_selected, mimeview); mimeview_set_multipart_tree(mimeview, mimeinfo, NULL); icon_list_create(mimeview, mimeinfo); gtk_signal_handler_unblock_by_func(GTK_OBJECT(ctree), mimeview_selected, mimeview); node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); if (node) { gtk_ctree_select(ctree, node); icon_list_toggle_by_mime_info (mimeview, gtk_ctree_node_get_row_data(ctree, node)); gtkut_ctree_set_focus_row(ctree, node); } }
static void mimeview_set_multipart_tree(MimeView *mimeview, MimeInfo *mimeinfo, GtkTreeIter *parent) { GtkTreeIter iter; g_return_if_fail(mimeinfo != NULL); if (mimeinfo->children) mimeinfo = mimeinfo->children; while (mimeinfo != NULL) { mimeview_append_part(mimeview, mimeinfo, &iter, parent); if (mimeinfo->children) mimeview_set_multipart_tree(mimeview, mimeinfo, &iter); else if (mimeinfo->sub && mimeinfo->sub->mime_type != MIME_TEXT && mimeinfo->sub->mime_type != MIME_TEXT_HTML) mimeview_set_multipart_tree(mimeview, mimeinfo->sub, &iter); mimeinfo = mimeinfo->next; } }
static void mimeview_set_multipart_tree(MimeView *mimeview, MimeInfo *mimeinfo, GtkCTreeNode *parent) { GtkCTreeNode *node; g_return_if_fail(mimeinfo != NULL); while (mimeinfo != NULL) { node = mimeview_append_part(mimeview, mimeinfo, parent); if (mimeinfo->node->children) mimeview_set_multipart_tree(mimeview, (MimeInfo *) mimeinfo->node->children->data, node); mimeinfo = mimeinfo->node->next != NULL ? (MimeInfo *) mimeinfo->node->next->data : NULL; } }
void mimeview_show_message(MimeView *mimeview, MimeInfo *mimeinfo, const gchar *file) { GtkTreeModel *model = GTK_TREE_MODEL(mimeview->store); GtkTreeIter iter; gboolean valid; mimeview_clear(mimeview); textview_clear(mimeview->messageview->textview); g_return_if_fail(file != NULL); g_return_if_fail(mimeinfo != NULL); #if USE_GPGME if (rfc2015_is_available() && prefs_common.auto_check_signatures) { FILE *fp; if ((fp = g_fopen(file, "rb")) == NULL) { FILE_OP_ERROR(file, "fopen"); return; } rfc2015_check_signature(mimeinfo, fp); fclose(fp); } else set_unchecked_signature(mimeinfo); #endif g_signal_handlers_block_by_func (G_OBJECT(mimeview->selection), G_CALLBACK(mimeview_selection_changed), mimeview); mimeview_set_multipart_tree(mimeview, mimeinfo, NULL); gtk_tree_view_expand_all(GTK_TREE_VIEW(mimeview->treeview)); g_signal_handlers_unblock_by_func (G_OBJECT(mimeview->selection), G_CALLBACK(mimeview_selection_changed), mimeview); /* search first text part */ for (valid = gtk_tree_model_get_iter_first(model, &iter); valid; valid = gtkut_tree_model_next(model, &iter)) { MimeInfo *partinfo; gtk_tree_model_get(model, &iter, COL_MIME_INFO, &partinfo, -1); if (partinfo && (partinfo->mime_type == MIME_TEXT || partinfo->mime_type == MIME_TEXT_HTML)) break; } textview_show_message(mimeview->messageview->textview, mimeinfo, file); if (!valid) valid = gtk_tree_model_get_iter_first(model, &iter); if (valid) { GtkTreePath *path; path = gtk_tree_model_get_path(model, &iter); gtk_tree_view_set_cursor(GTK_TREE_VIEW(mimeview->treeview), path, NULL, FALSE); gtk_tree_path_free(path); if (mimeview_get_selected_part(mimeview)) gtk_widget_grab_focus(mimeview->treeview); } }