GtkWidget *scrolledwin;
GtkWidget *ctree;
GtkWidget *hbox;
+ GtkWidget *hbox_l;
GtkWidget *statlabel_folder;
GtkWidget *statlabel_select;
GtkWidget *statlabel_msgs;
+ GtkWidget *hbox_spc;
GtkWidget *toggle_view_btn;
GtkWidget *toggle_view_arrow;
GtkWidget *popupmenu;
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+ hbox_l = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), hbox_l, TRUE, TRUE, 0);
+
statlabel_folder = gtk_label_new("");
- gtk_box_pack_start(GTK_BOX(hbox), statlabel_folder, FALSE, FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(hbox_l), statlabel_folder, FALSE, FALSE, 2);
statlabel_select = gtk_label_new("");
- gtk_box_pack_start(GTK_BOX(hbox), statlabel_select, FALSE, FALSE, 16);
+ gtk_box_pack_start(GTK_BOX(hbox_l), statlabel_select, FALSE, FALSE, 12);
/* toggle view buttons */
toggle_view_btn = gtk_button_new();
statlabel_msgs = gtk_label_new("");
gtk_box_pack_end(GTK_BOX(hbox), statlabel_msgs, FALSE, FALSE, 4);
+ hbox_spc = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(hbox), hbox_spc, FALSE, FALSE, 6);
+
/* create popup menu */
n_entries = sizeof(summary_popup_entries) /
sizeof(summary_popup_entries[0]);
summaryview->scrolledwin = scrolledwin;
summaryview->ctree = ctree;
summaryview->hbox = hbox;
+ summaryview->hbox_l = hbox_l;
summaryview->statlabel_folder = statlabel_folder;
summaryview->statlabel_select = statlabel_select;
summaryview->statlabel_msgs = statlabel_msgs;
gtk_widget_set_style(summaryview->statlabel_select, style);
gtk_widget_set_style(summaryview->statlabel_msgs, style);
- pixmap = stock_pixmap_widget(summaryview->hbox, STOCK_PIXMAP_DIR_OPEN);
- gtk_box_pack_start(GTK_BOX(summaryview->hbox), pixmap, FALSE, FALSE, 4);
- gtk_box_reorder_child(GTK_BOX(summaryview->hbox), pixmap, 0);
+ pixmap = stock_pixmap_widget(summaryview->hbox_l, STOCK_PIXMAP_DIR_OPEN);
+ gtk_box_pack_start(GTK_BOX(summaryview->hbox_l), pixmap, FALSE, FALSE, 4);
+ gtk_box_reorder_child(GTK_BOX(summaryview->hbox_l), pixmap, 0);
gtk_widget_show(pixmap);
summaryview->folder_pixmap = pixmap;
val = alertpanel(_("Process mark"),
_("Some marks are left. Process it?"),
_("Yes"), _("No"), _("Cancel"));
- if (G_ALERTDEFAULT == val)
+ if (G_ALERTDEFAULT == val) {
+ summary_unlock(summaryview);
summary_execute(summaryview);
- else if (G_ALERTALTERNATE == val)
+ summary_lock(summaryview);
+ } else if (G_ALERTALTERNATE == val)
summary_write_cache(summaryview);
else {
summary_unlock(summaryview);
g_free(buf);
summaryview->folder_item = item;
+ item->opened = TRUE;
gtk_signal_handler_block_by_data(GTK_OBJECT(ctree), summaryview);
gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree),
NULL, summary_free_msginfo_func, NULL);
- summaryview->folder_item = NULL;
+ if (summaryview->folder_item) {
+ summaryview->folder_item->opened = FALSE;
+ summaryview->folder_item = NULL;
+ }
summaryview->display_msg = FALSE;
gtk_ctree_pre_recursive(ctree, NULL, summary_write_cache_func, &fps);
- for(cur = summaryview->killed_messages ; cur != NULL ;
- cur = g_slist_next(cur)) {
- MsgInfo *msginfo = (MsgInfo *) cur->data;
-
- procmsg_write_cache(msginfo, fps.cache_fp);
- procmsg_write_flags(msginfo, fps.mark_fp);
- }
+ procmsg_flush_mark_queue(summaryview->folder_item, fps.mark_fp);
fclose(fps.cache_fp);
fclose(fps.mark_fp);
procmsg_write_flags(msginfo, fps->mark_fp);
}
+static gchar *summary_complete_address(const gchar *addr)
+{
+ gint count;
+ gchar *res, *tmp, *email_addr;
+
+ Xstrdup_a(email_addr, addr, return NULL);
+ extract_address(email_addr);
+ g_return_val_if_fail(*email_addr, NULL);
+
+ /*
+ * completion stuff must be already initialized
+ */
+ res = NULL;
+ if (1 < (count = complete_address(email_addr))) {
+ tmp = get_complete_address(1);
+ res = procheader_get_fromname(tmp);
+ g_free(tmp);
+ }
+
+ return res;
+}
+
static void summary_set_header(SummaryView *summaryview, gchar *text[],
MsgInfo *msginfo)
{
_("(No From)");
if (prefs_common.swap_from && msginfo->from && msginfo->to &&
!MSG_IS_NEWS(msginfo->flags)) {
- gchar *from;
+ gchar *addr = NULL;
- Xstrdup_a(from, msginfo->from, return);
- extract_address(from);
- if (account_find_from_address(from)) {
+ if (prefs_common.use_addr_book) {
+ Xstrdup_a(addr, msginfo->from, return);
+ extract_address(addr);
+ }
+
+ if (account_find_from_address(addr)) {
+ addr = summary_complete_address(msginfo->to);
g_free(to);
- to = g_strconcat("-->", msginfo->to, NULL);
+ to = g_strconcat("-->", addr == NULL ? msginfo->to : addr, NULL);
text[col_pos[S_COL_FROM]] = to;
}
}
- if ((text[col_pos[S_COL_FROM]] != to) && prefs_common.use_addr_book &&
- msginfo->from) {
- gint count;
+ /*
+ * CLAWS: note that the "text[col_pos[S_COL_FROM]] != to" is really a hack,
+ * checking whether the above block (which handles the special case of
+ * the --> in sent boxes) was executed.
+ */
+ if (text[col_pos[S_COL_FROM]] != to && prefs_common.use_addr_book && msginfo->from) {
gchar *from;
-
- Xstrdup_a(from, msginfo->from, return);
- extract_address(from);
- if (*from) {
- count = complete_address(from);
- if (count > 1) {
- g_free(from_name);
- from = get_complete_address(1);
- from_name = procheader_get_fromname(from);
- g_free(from);
- text[col_pos[S_COL_FROM]] = from_name;
- }
- }
+ from = summary_complete_address(msginfo->from);
+ if (from) {
+ /*
+ * FIXME: this text[col_pos[S_COL_FROM]] should be freed
+ * but may have been assigned _("No From"). Should be
+ * freed???
+ */
+ text[col_pos[S_COL_FROM]] = from;
+ }
}
if (prefs->enable_simplify_subject
break;
}
+ /*
+ * NOTE: key may be allocated on the stack, so
+ * prefs_filter[ing]_open() should have completed
+ * and have set entries. Otherwise we're hosed.
+ */
+
if (global_processing)
prefs_filtering_open(NULL, header, key);
else
folderview_select(summaryview->folderview, summaryview->folder_item);
}
+/*
+ * Harvest addresses for selected messages in summary view.
+ */
+void summary_harvest_address( SummaryView *summaryview ) {
+ GtkCTree *ctree = GTK_CTREE( summaryview->ctree );
+ GList *cur;
+ GList *msgList;
+ MsgInfo *msginfo;
+
+ msgList = NULL;
+ for( cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next ) {
+ msginfo = gtk_ctree_node_get_row_data( ctree, GTK_CTREE_NODE(cur->data) );
+ msgList = g_list_append( msgList, GUINT_TO_POINTER( msginfo->msgnum ) );
+ }
+ addressbook_harvest( summaryview->folder_item, TRUE, msgList );
+ g_list_free( msgList );
+}
/*
* End of Source.