/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2008 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
#define SUMMARY_COL_LOCKED_WIDTH 13
#define SUMMARY_COL_MIME_WIDTH 11
-
+static int normal_row_height = -1;
static GtkStyle *bold_style;
static GtkStyle *bold_marked_style;
static GtkStyle *bold_deleted_style;
static gint summary_toggle_pressed (GtkWidget *eventbox,
GdkEventButton *event,
SummaryView *summaryview);
-#ifdef MAEMO
+#ifdef GENERIC_UMPC
static void summary_toggle_multiple_pressed
(GtkWidget *widget,
SummaryView *summaryview);
static void summary_reply_cb (SummaryView *summaryview,
guint action,
GtkWidget *widget);
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static void summary_show_all_header_cb (SummaryView *summaryview,
guint action,
GtkWidget *widget);
static void summary_create_filter_cb (SummaryView *summaryview,
guint action,
GtkWidget *widget);
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static void summary_create_processing_cb(SummaryView *summaryview,
guint action,
GtkWidget *widget);
static GtkItemFactoryEntry summary_popup_entries[] =
{
{N_("/_Reply"), "<control>R", summary_reply_cb, COMPOSE_REPLY, NULL},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{N_("/Repl_y to"), NULL, NULL, 0, "<Branch>"},
{N_("/Repl_y to/_all"), "<shift><control>R", summary_reply_cb, COMPOSE_REPLY_TO_ALL, NULL},
{N_("/Repl_y to/_sender"), NULL, summary_reply_cb, COMPOSE_REPLY_TO_SENDER, NULL},
{"/---", NULL, NULL, 0, "<Separator>"},
#endif
{N_("/_Forward"), "<control><alt>F", summary_reply_cb, COMPOSE_FORWARD_INLINE, NULL},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{N_("/For_ward as attachment"), NULL, summary_reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL},
{N_("/Redirect"), NULL, summary_reply_cb, COMPOSE_REDIRECT, NULL},
#endif
{N_("/M_ove..."), "<control>O", summary_move_to, 0, NULL},
{N_("/_Copy..."), "<shift><control>O", summary_copy_to, 0, NULL},
{N_("/Move to _trash"), "<control>D", summary_delete_trash, 0, NULL},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{N_("/_Delete..."), NULL, summary_delete, 0, NULL},
#endif
{"/---", NULL, NULL, 0, "<Separator>"},
{N_("/Ta_gs"), NULL, NULL, 0, NULL},
{"/---", NULL, NULL, 0, "<Separator>"},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{N_("/Add sender to address boo_k"),
NULL, summary_add_address_cb, 0, NULL},
#endif
NULL, summary_create_filter_cb, FILTER_BY_TO, NULL},
{N_("/Create f_ilter rule/by _Subject"),
NULL, summary_create_filter_cb, FILTER_BY_SUBJECT, NULL},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{N_("/Create processing rule"), NULL, NULL, 0, "<Branch>"},
{N_("/Create processing rule/_Automatically"),
NULL, summary_create_processing_cb, FILTER_BY_AUTO, NULL},
{N_("/_View/Open in new _window"),
"<control><alt>N", summary_open_msg, 0, NULL},
{N_("/_View/Message _source"), "<control>U", summary_view_source, 0, NULL},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{N_("/_View/All _headers"), "<control>H", summary_show_all_header_cb, 0, "<ToggleItem>"},
#endif
{"/---", NULL, NULL, 0, "<Separator>"},
{N_("/_Save as..."), "<control>S", summary_save_as, 0, NULL},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{N_("/_Print..."), "<control>P", summary_print, 0, NULL},
#endif
}; /* see also list in menu_connect_identical_items() in menu.c if this changes */
GtkWidget *statlabel_msgs;
GtkWidget *hbox_spc;
GtkWidget *toggle_eventbox;
-#ifdef MAEMO
+#ifdef GENERIC_UMPC
GtkWidget *multiple_sel_togbtn;
#endif
GtkWidget *toggle_arrow;
G_CALLBACK(summary_toggle_pressed),
summaryview);
-#ifdef MAEMO
+#ifdef GENERIC_UMPC
multiple_sel_togbtn = gtk_toggle_button_new();
gtk_widget_show(multiple_sel_togbtn);
gtk_box_pack_end(GTK_BOX(hbox), multiple_sel_togbtn, FALSE, FALSE, 4);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
-#ifndef MAEMO
- gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0);
+ summaryview->mainwidget_book = gtk_notebook_new();
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(summaryview->mainwidget_book), FALSE);
+ gtk_notebook_set_show_border(GTK_NOTEBOOK(summaryview->mainwidget_book), FALSE);
+#ifndef GENERIC_UMPC
+ gtk_container_add(GTK_CONTAINER(summaryview->mainwidget_book),
+ scrolledwin);
+ gtk_box_pack_start(GTK_BOX(vbox), summaryview->mainwidget_book, TRUE, TRUE, 0);
#endif
gtk_widget_set_size_request(vbox,
prefs_common.summaryview_width,
quicksearch = quicksearch_new();
gtk_box_pack_start(GTK_BOX(vbox), quicksearch_get_widget(quicksearch), FALSE, FALSE, 0);
-#ifdef MAEMO
- gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0);
+#ifdef GENERIC_UMPC
+ gtk_container_add(GTK_CONTAINER(summaryview->mainwidget_book),
+ scrolledwin);
+ gtk_box_pack_start(GTK_BOX(vbox), summaryview->mainwidget_book, TRUE, TRUE, 0);
#endif
quicksearch_set_execute_callback(quicksearch, quicksearch_execute_cb, summaryview);
summaryview->statlabel_msgs = statlabel_msgs;
summaryview->toggle_eventbox = toggle_eventbox;
summaryview->toggle_arrow = toggle_arrow;
-#ifdef MAEMO
+#ifdef GENERIC_UMPC
summaryview->multiple_sel_togbtn = multiple_sel_togbtn;
#endif
summaryview->toggle_search = toggle_search;
break;
}
+ summary_set_column_order(summaryview);
+
gtk_widget_unref(summaryview->hbox_l);
gtk_widget_unref(summaryview->statlabel_msgs);
quicksearch_relayout(summaryview->quicksearch);
gint size;
font_desc = pango_font_description_from_string(NORMAL_FONT);
- gtk_widget_modify_font(summaryview->ctree, font_desc);
- pango_font_description_free(font_desc);
+ if (font_desc) {
+ gtk_widget_modify_font(summaryview->ctree, font_desc);
+ pango_font_description_free(font_desc);
+ }
if (!bold_style) {
bold_style = gtk_style_copy
(gtk_widget_get_style(summaryview->ctree));
- font_desc = pango_font_description_from_string(NORMAL_FONT);
- if (font_desc) {
- pango_font_description_free(bold_style->font_desc);
- bold_style->font_desc = font_desc;
+
+ if (prefs_common.derive_from_normal_font || !BOLD_FONT) {
+ font_desc = pango_font_description_from_string(NORMAL_FONT);
+ if (font_desc) {
+ pango_font_description_free(bold_style->font_desc);
+ bold_style->font_desc = font_desc;
+ }
+ pango_font_description_set_weight
+ (bold_style->font_desc, PANGO_WEIGHT_BOLD);
+ } else {
+ font_desc = pango_font_description_from_string(BOLD_FONT);
+ if (font_desc) {
+ pango_font_description_free(bold_style->font_desc);
+ bold_style->font_desc = font_desc;
+ }
}
-
- pango_font_description_set_weight
- (bold_style->font_desc, PANGO_WEIGHT_BOLD);
bold_marked_style = gtk_style_copy(bold_style);
bold_marked_style->fg[GTK_STATE_NORMAL] =
summaryview->color_marked;
summaryview->color_dim;
}
- font_desc = pango_font_description_new();
- size = pango_font_description_get_size
- (summaryview->ctree->style->font_desc);
- pango_font_description_set_size(font_desc, size * PANGO_SCALE_SMALL);
- gtk_widget_modify_font(summaryview->statlabel_folder, font_desc);
- gtk_widget_modify_font(summaryview->statlabel_select, font_desc);
- gtk_widget_modify_font(summaryview->statlabel_msgs, font_desc);
- /* ici */
- pango_font_description_free(font_desc);
+ if (prefs_common.derive_from_normal_font || !SMALL_FONT) {
+ font_desc = pango_font_description_new();
+ size = pango_font_description_get_size
+ (summaryview->ctree->style->font_desc);
+ pango_font_description_set_size(font_desc, size * PANGO_SCALE_SMALL);
+ } else {
+ font_desc = pango_font_description_from_string(SMALL_FONT);
+ }
+ if (font_desc) {
+ gtk_widget_modify_font(summaryview->statlabel_folder, font_desc);
+ gtk_widget_modify_font(summaryview->statlabel_select, font_desc);
+ gtk_widget_modify_font(summaryview->statlabel_msgs, font_desc);
+ pango_font_description_free(font_desc);
+ }
+
}
static void summary_set_folder_pixmap(SummaryView *summaryview, StockPixmap icon)
gtk_widget_show(pixmap);
summaryview->quick_search_pixmap = pixmap;
-#ifdef MAEMO
+#ifdef GENERIC_UMPC
pixmap = stock_pixmap_widget(summaryview->hbox, STOCK_PIXMAP_SELECTION);
gtk_container_add(GTK_CONTAINER(summaryview->multiple_sel_togbtn), pixmap);
gtk_widget_show(pixmap);
&& (!g_ascii_strcasecmp(m->folder->name,item->name)) )
#define FOLDER_SHOWS_TO_HDR(i) \
-( folder_has_parent_of_type(i, F_OUTBOX) \
- || folder_has_parent_of_type(i, F_DRAFT) \
- || folder_has_parent_of_type(i, F_QUEUE) )
+( i && (folder_has_parent_of_type(i, F_OUTBOX) \
+ || folder_has_parent_of_type(i, F_DRAFT) \
+ || folder_has_parent_of_type(i, F_QUEUE)) )
static void summary_switch_from_to(SummaryView *summaryview, FolderItem *item)
{
SummaryColumnState *col_state = summaryview->col_state;
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
- if (!item)
+ if (!item || (prefs_common.layout_mode == VERTICAL_LAYOUT && prefs_common.two_line_vert) )
return;
if (FOLDER_SHOWS_TO_HDR(item))
show_to = TRUE;
static gboolean summary_check_consistency(FolderItem *item, GSList *mlist)
{
- int u = 0, n = 0, m = 0, t = 0;
+ int u = 0, n = 0, m = 0, t = 0, r = 0, f = 0, l = 0, i = 0, w = 0;
GSList *cur;
START_TIMING("");
for(cur = mlist ; cur != NULL && cur->data != NULL ; cur = g_slist_next(cur)) {
u++;
if (MSG_IS_MARKED(msginfo->flags))
m++;
+ if (MSG_IS_REPLIED(msginfo->flags))
+ r++;
+ if (MSG_IS_FORWARDED(msginfo->flags))
+ f++;
+ if (MSG_IS_LOCKED(msginfo->flags))
+ l++;
+ if (MSG_IS_IGNORE_THREAD(msginfo->flags))
+ i++;
+ if (MSG_IS_WATCH_THREAD(msginfo->flags))
+ w++;
}
if (t != item->total_msgs
|| n != item->new_msgs
|| u != item->unread_msgs
|| m != item->marked_msgs
+ || r != item->replied_msgs
+ || f != item->forwarded_msgs
+ || l != item->locked_msgs
+ || i != item->ignored_msgs
+ || w != item->watched_msgs
|| (m == 0 && item->unreadmarked_msgs != 0)
|| item->unreadmarked_msgs < 0) {
debug_print("Inconsistency\n");
inc_lock();
summary_lock(summaryview);
+ utils_free_regex();
+
is_refresh = (item == summaryview->folder_item) ? TRUE : FALSE;
+ if (item && item->folder->klass->item_opened) {
+ item->folder->klass->item_opened(item);
+ }
+
if (!is_refresh) {
main_create_mailing_list_menu (summaryview->mainwin, NULL);
if (prefs_common.layout_mode == SMALL_LAYOUT) {
}
if (!prefs_common.summary_quicksearch_sticky
&& (!prefs_common.summary_quicksearch_recurse
- || !quicksearch_is_active(summaryview->quicksearch))
+ || !quicksearch_is_active(summaryview->quicksearch)
+ || (item && !quicksearch_is_in_subfolder(summaryview->quicksearch, item)))
&& !quicksearch_is_running(summaryview->quicksearch)
&& !is_refresh) {
quicksearch_set(summaryview->quicksearch, prefs_common.summary_quicksearch_type, "");
item->sort_type == SORT_DESCENDING
? 0 : GTK_CLIST(ctree)->rows - 1);
gtk_sctree_select(GTK_SCTREE(ctree), node);
+ summaryview->selected = node;
gtk_ctree_node_moveto(ctree, node, 0, 0.5, 0);
}
} else {
? 0 : GTK_CLIST(ctree)->rows - 1);
}
break;
+ case ACTION_FIRST_LIST:
+ if (GTK_CLIST(ctree)->row_list != NULL) {
+ node = gtk_ctree_node_nth
+ (ctree,
+ item->sort_type == SORT_ASCENDING
+ ? 0 : GTK_CLIST(ctree)->rows - 1);
+ }
+ break;
case ACTION_NOTHING:
case ACTION_UNSET:
node = NULL;
GtkItemFactory *ifactory = summaryview->popupfactory;
SensitiveCond state;
gboolean sensitive;
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
GtkWidget *menuitem;
#endif
gint i;
SensitiveCond cond;
} entry[] = {
{"/Reply" , M_HAVE_ACCOUNT|M_TARGET_EXIST},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{"/Reply to" , M_HAVE_ACCOUNT|M_TARGET_EXIST},
{"/Reply to/all" , M_HAVE_ACCOUNT|M_TARGET_EXIST},
{"/Reply to/sender" , M_HAVE_ACCOUNT|M_TARGET_EXIST},
#endif
{"/Forward" , M_HAVE_ACCOUNT|M_TARGET_EXIST},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{"/Forward as attachment" , M_HAVE_ACCOUNT|M_TARGET_EXIST},
{"/Redirect" , M_HAVE_ACCOUNT|M_TARGET_EXIST},
#endif
{"/Move..." , M_TARGET_EXIST|M_ALLOW_DELETE|M_NOT_NEWS},
{"/Copy..." , M_TARGET_EXIST|M_EXEC},
{"/Move to trash" , M_TARGET_EXIST|M_ALLOW_DELETE|M_NOT_NEWS},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{"/Delete..." , M_TARGET_EXIST|M_ALLOW_DELETE},
#endif
{"/Color label" , M_TARGET_EXIST},
{"/Tags" , M_TARGET_EXIST},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{"/Add sender to address book" , M_SINGLE_TARGET_EXIST},
#endif
{"/Create filter rule" , M_SINGLE_TARGET_EXIST|M_UNLOCKED},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{"/Create processing rule" , M_SINGLE_TARGET_EXIST|M_UNLOCKED},
#endif
{"/View" , M_SINGLE_TARGET_EXIST},
{"/View/Open in new window" , M_SINGLE_TARGET_EXIST},
{"/View/Message source" , M_SINGLE_TARGET_EXIST},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{"/View/All headers" , M_SINGLE_TARGET_EXIST},
#endif
{"/Save as..." , M_TARGET_EXIST},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{"/Print..." , M_TARGET_EXIST},
#endif
{NULL, 0}
summary_lock(summaryview);
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
menuitem = gtk_item_factory_get_widget(ifactory, "/View/All headers");
if (summaryview->messageview
&& summaryview->messageview->mimeview
for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
+
+ if (!msginfo)
+ continue;
if (MSG_IS_DELETED(msginfo->flags))
summaryview->deleted++;
gchar *itstr;
GList *rowlist, *cur;
guint n_selected = 0, n_new = 0, n_unread = 0, n_total = 0;
- off_t sel_size = 0, n_size = 0;
+ guint n_marked = 0, n_replied = 0, n_forwarded = 0, n_locked = 0, n_ignored = 0, n_watched = 0;
+ goffset sel_size = 0, n_size = 0;
MsgInfo *msginfo;
gchar *name;
+#if GTK_CHECK_VERSION(2, 12, 0)
+ gchar *tooltip;
+#endif
if (!summaryview->folder_item) {
gtk_label_set_text(GTK_LABEL(summaryview->statlabel_folder), "");
n_new++;
if (MSG_IS_UNREAD(msginfo->flags))
n_unread++;
+ if (MSG_IS_MARKED(msginfo->flags))
+ n_marked++;
+ if (MSG_IS_REPLIED(msginfo->flags))
+ n_replied++;
+ if (MSG_IS_FORWARDED(msginfo->flags))
+ n_forwarded++;
+ if (MSG_IS_LOCKED(msginfo->flags))
+ n_locked++;
+ if (MSG_IS_IGNORE_THREAD(msginfo->flags))
+ n_ignored++;
+ if (MSG_IS_WATCH_THREAD(msginfo->flags))
+ n_watched++;
}
}
} else {
n_new = summaryview->folder_item->new_msgs;
n_unread = summaryview->folder_item->unread_msgs;
+ n_marked = summaryview->folder_item->marked_msgs;
+ n_replied = summaryview->folder_item->replied_msgs;
+ n_forwarded = summaryview->folder_item->forwarded_msgs;
+ n_locked = summaryview->folder_item->locked_msgs;
+ n_ignored = summaryview->folder_item->ignored_msgs;
+ n_watched = summaryview->folder_item->watched_msgs;
n_total = summaryview->folder_item->total_msgs;
n_size = summaryview->total_size;
}
spc = "";
if (n_selected) {
- sel = g_strdup_printf(" (%s)", to_human_readable(sel_size));
+ sel = g_strdup_printf(" (%s)", to_human_readable((goffset)sel_size));
if (n_selected == 1)
itstr = g_strdup(_(" item selected"));
else
g_free(str);
str = g_strdup_printf(_("%d new, %d unread, %d total (%s)"),
-
n_new, n_unread, n_total,
- to_human_readable(n_size));
+ to_human_readable((goffset)n_size));
+
gtk_label_set_text(GTK_LABEL(summaryview->statlabel_msgs), str);
g_free(str);
+#if GTK_CHECK_VERSION(2, 12, 0)
+ tooltip = g_strdup_printf(_("<b>Message summary</b>\n"
+ "<b>New:</b> %d\n"
+ "<b>Unread:</b> %d\n"
+ "<b>Total:</b> %d\n"
+ "<b>Size:</b> %s\n\n"
+ "<b>Marked:</b> %d\n"
+ "<b>Replied:</b> %d\n"
+ "<b>Forwarded:</b> %d\n"
+ "<b>Locked:</b> %d\n"
+ "<b>Ignored:</b> %d\n"
+ "<b>Watched:</b> %d"),
+ n_new, n_unread, n_total,
+ to_human_readable((goffset)n_size),
+ n_marked,n_replied,n_forwarded,
+ n_locked,n_ignored,n_watched);
+
+ gtk_widget_set_tooltip_markup(GTK_WIDGET(summaryview->statlabel_msgs),
+ tooltip);
+ g_free(tooltip);
+#endif
} else {
gchar *ssize, *tsize;
if (n_selected) {
- ssize = g_strdup(to_human_readable(sel_size));
- tsize = g_strdup(to_human_readable(n_size));
+ ssize = g_strdup(to_human_readable((goffset)sel_size));
+ tsize = g_strdup(to_human_readable((goffset)n_size));
str = g_strdup_printf(_("%d/%d selected (%s/%s), %d unread"),
n_selected, n_total, ssize, tsize, n_unread);
g_free(ssize);
g_free(tsize);
} else
str = g_strdup_printf(_("%d new, %d unread, %d total (%s)"),
- n_new, n_unread, n_total, to_human_readable(n_size));
+ n_new, n_unread, n_total, to_human_readable((goffset)n_size));
g_free(sel);
g_free(del);
g_free(mv);
hbox = gtk_hbox_new(FALSE, 4);
label = gtk_label_new(title);
-#ifdef MAEMO
+#ifdef GENERIC_UMPC
gtk_widget_set_size_request(hbox, -1, 20);
#endif
void summary_reflect_prefs(void)
{
- static gchar *last_font = NULL;
- gboolean update_font = TRUE;
+ static gchar *last_smallfont = NULL;
+ static gchar *last_normalfont = NULL;
+ static gchar *last_boldfont = NULL;
+ gboolean update_font = FALSE;
SummaryView *summaryview = NULL;
if (!mainwindow_get_mainwindow())
return;
summaryview = mainwindow_get_mainwindow()->summaryview;
- if (last_font && !strcmp(last_font, NORMAL_FONT))
- update_font = FALSE;
+ if (!last_smallfont || strcmp(last_smallfont, SMALL_FONT) ||
+ !last_normalfont || strcmp(last_normalfont, NORMAL_FONT) ||
+ !last_boldfont || strcmp(last_boldfont, BOLD_FONT))
+ update_font = TRUE;
- g_free(last_font);
-
- last_font = g_strdup(NORMAL_FONT);
+ g_free(last_smallfont);
+ last_smallfont = g_strdup(SMALL_FONT);
+ g_free(last_normalfont);
+ last_normalfont = g_strdup(NORMAL_FONT);
+ g_free(last_boldfont);
+ last_boldfont = g_strdup(BOLD_FONT);
if (update_font) {
bold_style = bold_marked_style = bold_deleted_style =
gint *col_pos = summaryview->col_pos;
const gchar *msgid = msginfo->msgid;
GHashTable *msgid_table = summaryview->msgid_table;
-
+ gboolean vert = (prefs_common.layout_mode == VERTICAL_LAYOUT);
+
summary_set_header(summaryview, text, msginfo);
gtk_sctree_set_node_info(ctree, cnode, text[col_pos[S_COL_SUBJECT]], 2,
if (summaryview->col_state[summaryview->col_pos[S_COL_TAGS]].visible)
SET_TEXT(S_COL_TAGS);
+ if (vert && prefs_common.two_line_vert)
+ g_free(text[summaryview->col_pos[S_COL_SUBJECT]]);
+
#undef SET_TEXT
GTKUT_CTREE_NODE_SET_ROW_DATA(cnode, msginfo);
GHashTable *msgid_table;
GHashTable *subject_table = NULL;
GSList * cur;
+ gboolean vert = (prefs_common.layout_mode == VERTICAL_LAYOUT);
+
START_TIMING("");
if (!mlist) return;
(ctree, NULL, node, text, 2,
NULL, NULL, NULL, NULL,
FALSE, FALSE);
+ if (vert && prefs_common.two_line_vert)
+ g_free(text[summaryview->col_pos[S_COL_SUBJECT]]);
GTKUT_CTREE_NODE_SET_ROW_DATA(node, msginfo);
summary_set_marks_func(ctree, node, summaryview);
gint count;
gchar *res, *tmp, *email_addr;
- if (addr == NULL)
+ if (addr == NULL || !strchr(addr, '@'))
return NULL;
Xstrdup_a(email_addr, addr, return NULL);
gint *col_pos = summaryview->col_pos;
gchar *from_text = NULL, *to_text = NULL, *tags_text = NULL;
gboolean should_swap = FALSE;
-
+ gboolean vert = (prefs_common.layout_mode == VERTICAL_LAYOUT);
+#if GTK_CHECK_VERSION(2,12,0)
+ static const gchar *color_dim_rgb = NULL;
+ if (!color_dim_rgb)
+ color_dim_rgb = gdk_color_to_string(&summaryview->color_dim);
+#else
+ static const gchar *color_dim_rgb = "#888888";
+#endif
text[col_pos[S_COL_FROM]] = "";
text[col_pos[S_COL_TO]] = "";
text[col_pos[S_COL_SUBJECT]]= "";
text[col_pos[S_COL_TAGS]] = "";
/* slow! */
- if (summaryview->col_state[summaryview->col_pos[S_COL_DATE]].visible) {
+ if (summaryview->col_state[summaryview->col_pos[S_COL_DATE]].visible ||
+ (vert && prefs_common.two_line_vert)) {
if (msginfo->date_t) {
procheader_date_get_localtime(date_modified,
sizeof(date_modified),
if (addr) {
extract_address(addr);
- if (account_find_from_address(addr)) {
+ if (account_find_from_address(addr, FALSE)) {
should_swap = TRUE;
}
g_free(addr);
else
text[col_pos[S_COL_SUBJECT]] = msginfo->subject ? msginfo->subject :
_("(No Subject)");
+ if (vert && prefs_common.two_line_vert) {
+ if (!FOLDER_SHOWS_TO_HDR(summaryview->folder_item)) {
+ gchar *tmp = g_markup_printf_escaped(_("%s\n<span color='%s' style='italic'>From: %s, on %s</span>"),
+ text[col_pos[S_COL_SUBJECT]],
+ color_dim_rgb,
+ text[col_pos[S_COL_FROM]],
+ text[col_pos[S_COL_DATE]]);
+ text[col_pos[S_COL_SUBJECT]] = tmp;
+ } else {
+ gchar *tmp = g_markup_printf_escaped(_("%s\n<span color='%s' style='italic'>To: %s, on %s</span>"),
+ text[col_pos[S_COL_SUBJECT]],
+ color_dim_rgb,
+ text[col_pos[S_COL_TO]],
+ text[col_pos[S_COL_DATE]]);
+ text[col_pos[S_COL_SUBJECT]] = tmp;
+ }
+ }
}
static void summary_display_msg(SummaryView *summaryview, GtkCTreeNode *row)
}
if (val == 0 && MSG_IS_UNREAD(msginfo->flags)) {
- if (prefs_common.mark_as_read_delay) {
+ if (!prefs_common.mark_as_read_on_new_window &&
+ prefs_common.mark_as_read_delay) {
MarkAsReadData *data = g_new0(MarkAsReadData, 1);
data->summaryview = summaryview;
data->msginfo = msginfo;
return TRUE;
}
+gboolean summary_is_list(SummaryView *summaryview)
+{
+ return (gtk_notebook_get_current_page(
+ GTK_NOTEBOOK(summaryview->mainwidget_book)) == 0);
+}
+
void summary_toggle_view(SummaryView *summaryview)
{
if (prefs_common.layout_mode == SMALL_LAYOUT)
return;
if (!messageview_is_visible(summaryview->messageview) &&
- summaryview->selected)
+ summaryview->selected && summary_is_list(summaryview))
summary_display_msg(summaryview,
summaryview->selected);
else
GList *cur;
gboolean froze = FALSE;
+ if (summary_is_locked(summaryview))
+ return;
START_LONG_OPERATION(summaryview, FALSE);
folder_item_set_batch(summaryview->folder_item, TRUE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
GList *cur;
gboolean froze = FALSE;
+ if (summary_is_locked(summaryview))
+ return;
START_LONG_OPERATION(summaryview, FALSE);
folder_item_set_batch(summaryview->folder_item, TRUE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
GList *cur;
gboolean froze = FALSE;
+ if (summary_is_locked(summaryview))
+ return;
START_LONG_OPERATION(summaryview, FALSE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
summary_lock_row(summaryview,
GList *cur;
gboolean froze = FALSE;
+ if (summary_is_locked(summaryview))
+ return;
START_LONG_OPERATION(summaryview, FALSE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
summary_unlock_row(summaryview,
prefs_common.ask_mark_all_read = FALSE;
}
+ if (summary_is_locked(summaryview))
+ return;
START_LONG_OPERATION(summaryview, TRUE);
folder_item_set_batch(summaryview->folder_item, TRUE);
for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); node != NULL;
gboolean moved = FALSE;
gboolean froze = FALSE;
- prefs_common.immediate_exec = FALSE;
- START_LONG_OPERATION(summaryview, FALSE);
+ if (summary_is_locked(summaryview))
+ return;
+ prefs_common.immediate_exec = FALSE;
+ START_LONG_OPERATION(summaryview, FALSE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) {
GtkCTreeNode *row = GTK_CTREE_NODE(cur->data);
MsgInfo *msginfo = gtk_ctree_node_get_row_data(ctree, row);
GList *cur;
gboolean froze = FALSE;
+ if (summary_is_locked(summaryview))
+ return;
START_LONG_OPERATION(summaryview, FALSE);
folder_item_set_batch(summaryview->folder_item, TRUE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL;
GtkCTreeNode *row = GTK_CTREE_NODE(cur->data);
msginfo = gtk_ctree_node_get_row_data(ctree, row);
if (msginfo && msginfo->total_size != 0 &&
- msginfo->size != (off_t)msginfo->total_size)
+ msginfo->size != (goffset)msginfo->total_size)
partial_mark_for_delete(msginfo);
}
GList *cur;
gboolean froze = FALSE;
+ if (summary_is_locked(summaryview))
+ return;
START_LONG_OPERATION(summaryview, FALSE);
folder_item_set_batch(summaryview->folder_item, TRUE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
FOLDER_TYPE(summaryview->folder_item->folder) == F_NEWS) return;
to_folder = foldersel_folder_sel(summaryview->folder_item->folder,
- FOLDER_SEL_MOVE, NULL);
+ FOLDER_SEL_MOVE, NULL, FALSE);
summary_move_selected_to(summaryview, to_folder);
}
if (!summaryview->folder_item) return;
to_folder = foldersel_folder_sel(summaryview->folder_item->folder,
- FOLDER_SEL_COPY, NULL);
+ FOLDER_SEL_COPY, NULL, FALSE);
summary_copy_selected_to(summaryview, to_folder);
}
} else {
mlist = folder_item_get_msg_list(summaryview->folder_item);
}
+
+ folder_item_set_batch(summaryview->folder_item, TRUE);
for (cur_list = mlist; cur_list; cur_list = cur_list->next) {
summary_filter_func((MsgInfo *)cur_list->data);
}
+ folder_item_set_batch(summaryview->folder_item, FALSE);
+
filtering_move_and_copy_msgs(mlist);
+
for (cur_list = mlist; cur_list; cur_list = cur_list->next) {
procmsg_msginfo_free((MsgInfo *)cur_list->data);
}
procmsg_msginfo_update_tags(msginfo, set, id);
-
if (summaryview->col_state[summaryview->col_pos[S_COL_TAGS]].visible) {
tags_str = procmsg_msginfo_get_tags_str(msginfo);
gtk_ctree_node_set_text(ctree, row,
gint real_id = set? tag_id:-tag_id;
gboolean froze = FALSE;
gboolean redisplay = FALSE;
+
+ if (summary_is_locked(summaryview))
+ return;
START_LONG_OPERATION(summaryview, FALSE);
+ folder_item_set_batch(summaryview->folder_item, TRUE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) {
redisplay |= summary_set_row_tag(summaryview,
GTK_CTREE_NODE(cur->data), FALSE, set, real_id);
}
+ folder_item_set_batch(summaryview->folder_item, FALSE);
END_LONG_OPERATION(summaryview);
if (redisplay)
summary_redisplay_msg(summaryview);
}
+void summaryview_destroy(SummaryView *summaryview)
+{
+ if(summaryview->simplify_subject_preg) {
+ regfree(summaryview->simplify_subject_preg);
+ g_free(summaryview->simplify_subject_preg);
+ summaryview->simplify_subject_preg = NULL;
+ }
+}
static void summary_tags_menu_item_apply_tags_activate_cb(GtkWidget *widget,
gpointer data)
{
tag_apply_open(summary_get_selection(summaryview));
}
+static gint summary_tag_cmp_list(gconstpointer a, gconstpointer b)
+{
+ gint id_a = GPOINTER_TO_INT(a);
+ gint id_b = GPOINTER_TO_INT(b);
+ const gchar *tag_a = tags_get_tag(id_a);
+ const gchar *tag_b = tags_get_tag(id_b);
+
+ if (tag_a == NULL)
+ return tag_b == NULL ? 0:1;
+
+ if (tag_b == NULL)
+ return tag_a == NULL ? 0:1;
+
+ return g_utf8_collate(tag_a, tag_b);
+}
+
static void summary_tags_menu_create(SummaryView *summaryview, gboolean refresh)
{
GtkWidget *label_menuitem;
GtkWidget *menu;
GtkWidget *item;
GSList *cur = tags_get_list();
- GSList *orig = cur;
+ GSList *orig = NULL;
gboolean existing_tags = FALSE;
+ cur = orig = g_slist_sort(cur, summary_tag_cmp_list);
label_menuitem = gtk_item_factory_get_item(summaryview->popupfactory,
"/Tags");
g_signal_connect(G_OBJECT(label_menuitem), "activate",
return TRUE;
}
+#if GTK_CHECK_VERSION(2,12,0) && !GENERIC_UMPC
+static gchar *summaryview_get_tooltip_text(SummaryView *summaryview, MsgInfo *info, gint column)
+{
+ MsgFlags flags;
+ if (!info)
+ return NULL;
+
+ flags = info->flags;
+
+ switch(summaryview->col_state[column].type) {
+ case S_COL_STATUS:
+ if (MSG_IS_IGNORE_THREAD(flags)) {
+ return _("Ignored thread");
+ } else if (MSG_IS_WATCH_THREAD(flags)) {
+ return _("Watched thread");
+ } else if (MSG_IS_SPAM(flags)) {
+ return _("Spam");
+ } else if (MSG_IS_NEW(flags)) {
+ return _("New");
+ } else if (MSG_IS_UNREAD(flags)) {
+ return _("Unread");
+ } else if (MSG_IS_REPLIED(flags)) {
+ return _("Replied - click to see reply");
+ } else if (MSG_IS_FORWARDED(flags)) {
+ return _("Forwarded");
+ } else {
+ return NULL;
+ }
+ case S_COL_MARK:
+ if (MSG_IS_DELETED(flags)) {
+ return _("Deleted");
+ } else if (MSG_IS_MARKED(flags)) {
+ return _("Marked");
+ } else if (MSG_IS_MOVE(flags)) {
+ return _("To be moved");
+ } else if (MSG_IS_COPY(flags)) {
+ return _("To be copied");
+ } else {
+ return NULL;
+ }
+ case S_COL_LOCKED:
+ if (MSG_IS_LOCKED(flags)) {
+ return _("Locked");
+ } else {
+ return NULL;
+ }
+ case S_COL_MIME:
+ if (MSG_IS_WITH_ATTACHMENT(flags) && MSG_IS_SIGNED(flags)) {
+ return _("Signed, has attachment(s)");
+ } else if (MSG_IS_SIGNED(flags)) {
+ return _("Signed");
+ } else if (MSG_IS_WITH_ATTACHMENT(flags) && MSG_IS_ENCRYPTED(flags)) {
+ return _("Encrypted, has attachment(s)");
+ } else if (MSG_IS_ENCRYPTED(flags)) {
+ return _("Encrypted");
+ } else if (MSG_IS_WITH_ATTACHMENT(flags)) {
+ return _("Has attachment(s)");
+ } else {
+ return NULL;
+ }
+ default:
+ return NULL;
+ }
+}
+static gboolean tooltip_cb (GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_mode,
+ GtkTooltip *tooltip,
+ gpointer user_data)
+{
+ GtkCTree *ctree = GTK_CTREE(widget);
+ SummaryView *summaryview = (SummaryView *)user_data;
+ gint row = -1, column = -1;
+ int offset = prefs_common.show_col_headers ? 24:0;
+ GtkCTreeNode *node = NULL;
+ gchar *text = NULL;
+ gchar *formatted = NULL;
+ MsgInfo *info = NULL;
+ GdkRectangle rect;
+ gboolean vert = (prefs_common.layout_mode == VERTICAL_LAYOUT);
+
+ if (!prefs_common.show_tooltips)
+ return FALSE;
+
+ if (y - offset < 0)
+ return FALSE;
+
+ if (!gtk_clist_get_selection_info(GTK_CLIST(ctree), x, y - offset,
+ &row, &column))
+ return FALSE;
+
+ if ((node = gtk_ctree_node_nth(ctree, row)) == NULL)
+ return FALSE;
+
+ if ((info = gtk_ctree_node_get_row_data(ctree, node)) == NULL)
+ return FALSE;
+
+ switch (gtk_ctree_node_get_cell_type(ctree, node, column)) {
+ case GTK_CELL_TEXT:
+ if (gtk_ctree_node_get_text(ctree, node, column, &text) != TRUE)
+ return FALSE;
+ break;
+ case GTK_CELL_PIXTEXT:
+ if (gtk_ctree_node_get_pixtext(ctree, node, column, &text,
+ NULL, NULL, NULL) != TRUE)
+ return FALSE;
+ break;
+ default:
+ if ((text = summaryview_get_tooltip_text(summaryview, info, column)) == NULL)
+ return FALSE;
+ }
+
+ if (!text || !*text)
+ return FALSE;
+
+ formatted = g_strdup(text);
+ g_strstrip(formatted);
+
+ if (!vert)
+ gtk_tooltip_set_text (tooltip, formatted);
+ else if (prefs_common.two_line_vert)
+ gtk_tooltip_set_markup (tooltip, formatted);
+ g_free(formatted);
+
+ rect.x = x - 2;
+ rect.y = y - 2;
+ rect.width = 12;
+ rect.height= 12;
+ gtk_tooltip_set_tip_area(tooltip, &rect);
+
+ return TRUE;
+}
+#endif
static GtkWidget *summary_ctree_create(SummaryView *summaryview)
{
GtkWidget *ctree;
gchar *titles[N_SUMMARY_COLS];
SummaryColumnType type;
gint pos;
+ gboolean vert = (prefs_common.layout_mode == VERTICAL_LAYOUT);
memset(titles, 0, sizeof(titles));
ctree = gtk_sctree_new_with_titles
(N_SUMMARY_COLS, col_pos[S_COL_SUBJECT], titles);
+ /* get normal row height */
+ gtk_clist_set_row_height(GTK_CLIST(ctree), 0);
+ normal_row_height = GTK_CLIST(ctree)->row_height;
+
if (prefs_common.show_col_headers == FALSE)
gtk_clist_column_titles_hide(GTK_CLIST(ctree));
gtk_clist_set_column_justification(GTK_CLIST(ctree), col_pos[S_COL_SCORE],
GTK_JUSTIFY_RIGHT);
gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_MARK],
- SUMMARY_COL_MARK_WIDTH);
+ prefs_common.summary_col_size[S_COL_MARK]);
gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_STATUS],
- SUMMARY_COL_STATUS_WIDTH);
+ prefs_common.summary_col_size[S_COL_STATUS]);
gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_LOCKED],
- SUMMARY_COL_LOCKED_WIDTH);
+ prefs_common.summary_col_size[S_COL_LOCKED]);
gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_MIME],
- SUMMARY_COL_MIME_WIDTH);
+ prefs_common.summary_col_size[S_COL_MIME]);
gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_SUBJECT],
prefs_common.summary_col_size[S_COL_SUBJECT]);
gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_FROM],
for (pos = 0; pos < N_SUMMARY_COLS; pos++) {
GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[pos].button,
GTK_CAN_FOCUS);
- gtk_clist_set_column_visibility
- (GTK_CLIST(ctree), pos, col_state[pos].visible);
+ if (((pos == summaryview->col_pos[S_COL_FROM] && !FOLDER_SHOWS_TO_HDR(summaryview->folder_item)) ||
+ (pos == summaryview->col_pos[S_COL_TO] && FOLDER_SHOWS_TO_HDR(summaryview->folder_item)) ||
+ pos == summaryview->col_pos[S_COL_DATE]) && vert &&
+ prefs_common.two_line_vert)
+ gtk_clist_set_column_visibility
+ (GTK_CLIST(ctree), pos, FALSE);
+ else
+ gtk_clist_set_column_visibility
+ (GTK_CLIST(ctree), pos, col_state[pos].visible);
}
+ if (prefs_common.two_line_vert)
+ gtk_sctree_set_use_markup(GTK_SCTREE(ctree), summaryview->col_pos[S_COL_SUBJECT], vert);
/* connect signal to the buttons for sorting */
#define CLIST_BUTTON_SIGNAL_CONNECT(col, func) \
CLIST_BUTTON_SIGNAL_CONNECT(S_COL_SCORE, summary_score_clicked);
CLIST_BUTTON_SIGNAL_CONNECT(S_COL_LOCKED, summary_locked_clicked);
CLIST_BUTTON_SIGNAL_CONNECT(S_COL_TAGS, summary_tags_clicked);
-
+
#undef CLIST_BUTTON_SIGNAL_CONNECT
g_signal_connect(G_OBJECT(ctree), "tree_select_row",
G_CALLBACK(summary_drag_motion_cb),
summaryview);
+#if GTK_CHECK_VERSION(2,12,0) && !GENERIC_UMPC
+ g_object_set (G_OBJECT(ctree), "has-tooltip", TRUE, NULL);
+ g_signal_connect(G_OBJECT(ctree), "query-tooltip",
+ G_CALLBACK(tooltip_cb),
+ summaryview);
+#endif
return ctree;
}
summary_select_by_msgnum(summaryview, selected_msgnum);
+ summaryview->selected = summary_find_msg_by_msgnum(summaryview, selected_msgnum);
summaryview->displayed = summary_find_msg_by_msgnum(summaryview, displayed_msgnum);
summaryview->last_displayed = summaryview->displayed;
if (!summaryview->displayed)
messageview_clear(summaryview->messageview);
else
summary_redisplay_msg(summaryview);
+
+ if (prefs_common.layout_mode == VERTICAL_LAYOUT &&
+ prefs_common.two_line_vert) {
+ gtk_clist_set_row_height(GTK_CLIST(summaryview->ctree), 2*normal_row_height + 2);
+ } else {
+ gtk_clist_set_row_height(GTK_CLIST(summaryview->ctree), 0);
+ }
}
summary_toggle_view(summaryview);
return TRUE;
}
-#ifdef MAEMO
+#ifdef GENERIC_UMPC
static void summary_toggle_multiple_pressed(GtkWidget *widget,
SummaryView *summaryview)
{
gboolean summary_pass_key_press_event(SummaryView *summaryview, GdkEventKey *event)
{
- return summary_key_pressed(summaryview->ctree, event, summaryview);
+ if (summary_is_list(summaryview))
+ return summary_key_pressed(summaryview->ctree, event, summaryview);
+ else
+ return FALSE;
}
#define BREAK_ON_MODIFIER_KEY() \
case GDK_KP_Enter:
handled = TRUE;
if (summaryview->displayed != summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
summary_display_msg(summaryview,
summaryview->selected);
#else
!MSG_IS_COPY(msginfo->flags)) {
if (MSG_IS_MARKED(msginfo->flags)) {
summary_unmark_row(summaryview, row);
+ summary_status_show(summaryview);
} else {
summary_mark_row(summaryview, row);
+ summary_status_show(summaryview);
}
}
break;
break;
case S_COL_LOCKED:
if (MSG_IS_LOCKED(msginfo->flags)) {
- summary_msginfo_unset_flags(msginfo, MSG_LOCKED, 0);
- summary_set_row_marks(summaryview, row);
+ summary_unlock_row(summaryview, row);
+ summary_status_show(summaryview);
}
- else
+ else {
summary_lock_row(summaryview, row);
+ summary_status_show(summaryview);
+ }
break;
default:
break;
compose_reply_from_messageview(msgview, msginfo_list, action);
g_slist_free(msginfo_list);
}
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static void summary_show_all_header_cb(SummaryView *summaryview,
guint action, GtkWidget *widget)
{
{
summary_filter_open(summaryview, (PrefsFilterType)action, 0);
}
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static void summary_create_processing_cb(SummaryView *summaryview,
guint action, GtkWidget *widget)
{
g_return_if_fail(summaryview != NULL);
g_return_if_fail(summaryview->folder_item != NULL);
g_return_if_fail(summaryview->folder_item->folder != NULL);
+
if (summaryview->selected == NULL) return;
context = gtk_drag_begin(widget, summaryview->target_list,
tmp2 = dest;
}
}
- tmp1 = g_strconcat("file://", tmp2, "\r\n", NULL);
+ tmp1 = g_filename_to_uri(tmp2, NULL, NULL);
g_free(tmp2);
+ tmp2 = g_strconcat(tmp1, "\r\n", NULL);
+ g_free(tmp1);
+ tmp1 = tmp2;
if (!mail_list) {
mail_list = tmp1;
{
MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data;
MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data;
+ gint res;
if (!msginfo1->subject)
return (msginfo2->subject != NULL);
if (!msginfo2->subject)
return -1;
- return subject_compare_for_sort
+ res = subject_compare_for_sort
(msginfo1->subject, msginfo2->subject);
+ return (res != 0)? res: summary_cmp_by_date(clist, ptr1, ptr2);
}
static gint summary_cmp_by_thread_date(GtkCList *clist,
const GtkCListRow *r1 = (const GtkCListRow *) ptr1;
const GtkCListRow *r2 = (const GtkCListRow *) ptr2;
const SummaryView *sv = g_object_get_data(G_OBJECT(clist), "summaryview");
-
+ gint res;
+
g_return_val_if_fail(sv, -1);
str1 = GTK_CELL_TEXT(r1->cell[sv->col_pos[S_COL_FROM]])->text;
if (!str2)
return -1;
- return g_utf8_collate(str1, str2);
+ res = g_utf8_collate(str1, str2);
+ return (res != 0)? res: summary_cmp_by_date(clist, ptr1, ptr2);
}
static gint summary_cmp_by_to(GtkCList *clist, gconstpointer ptr1,
const GtkCListRow *r1 = (const GtkCListRow *) ptr1;
const GtkCListRow *r2 = (const GtkCListRow *) ptr2;
const SummaryView *sv = g_object_get_data(G_OBJECT(clist), "summaryview");
-
+ gint res;
g_return_val_if_fail(sv, -1);
str1 = GTK_CELL_TEXT(r1->cell[sv->col_pos[S_COL_TO]])->text;
if (!str2)
return -1;
- return g_utf8_collate(str1, str2);
+ res = g_utf8_collate(str1, str2);
+ return (res != 0)? res: summary_cmp_by_date(clist, ptr1, ptr2);
}
static gint summary_cmp_by_tags(GtkCList *clist, gconstpointer ptr1,
const MsgInfo *msginfo1 = r1->data;
const MsgInfo *msginfo2 = r2->data;
const SummaryView *sv = g_object_get_data(G_OBJECT(clist), "summaryview");
-
+ gint res;
+
g_return_val_if_fail(sv, -1);
g_return_val_if_fail(msginfo1 != NULL && msginfo2 != NULL, -1);
if (!prefs)
return -1;
- return subject_compare_for_sort(str1, str2);
+ res = subject_compare_for_sort(str1, str2);
+ return (res != 0)? res: summary_cmp_by_date(clist, ptr1, ptr2);
}
static gint summary_cmp_by_score(GtkCList *clist,
gtk_widget_show(pixmap);
summaryview->quick_search_pixmap = pixmap;
-#ifdef MAEMO
+#ifdef GENERIC_UMPC
pixmap = stock_pixmap_widget(summaryview->hbox, STOCK_PIXMAP_SELECTION);
gtk_container_remove (GTK_CONTAINER(summaryview->multiple_sel_togbtn),
summaryview->multiple_sel_image);
void summary_update_unread(SummaryView *summaryview, FolderItem *removed_item)
{
guint new, unread, unreadmarked, marked, total;
+ guint replied, forwarded, locked, ignored, watched;
static gboolean tips_initialized = FALSE;
if (prefs_common.layout_mode != SMALL_LAYOUT) {
}
return;
}
- folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total);
+ folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total,
+ &replied, &forwarded, &locked, &ignored,
+ &watched);
if (removed_item) {
total -= removed_item->total_msgs;
new -= removed_item->new_msgs;