static void summary_reply_cb (SummaryView *summaryview,
guint action,
GtkWidget *widget);
+#ifndef MAEMO
static void summary_show_all_header_cb (SummaryView *summaryview,
guint action,
GtkWidget *widget);
static void summary_add_address_cb (SummaryView *summaryview,
guint action,
GtkWidget *widget);
+#endif
static void summary_create_filter_cb (SummaryView *summaryview,
guint action,
GtkWidget *widget);
+#ifndef MAEMO
static void summary_create_processing_cb(SummaryView *summaryview,
guint action,
GtkWidget *widget);
-
+#endif
static void summary_mark_clicked (GtkWidget *button,
SummaryView *summaryview);
static void summary_status_clicked (GtkWidget *button,
static gboolean summary_update_msg (gpointer source, gpointer data);
static gboolean summary_update_folder_item_hook(gpointer source, gpointer data);
static gboolean summary_update_folder_hook(gpointer source, gpointer data);
+static void summary_set_colorlabel_color (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ guint labelcolor);
+static void summary_thread_build(SummaryView *summaryview);
GtkTargetEntry summary_drag_types[2] =
{
}
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, "");
? 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
GtkWidget *menuitem;
+#endif
gint i;
static const struct {
msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree),
summaryview->selected);
- if (!msginfo) return;
+ if (!msginfo || !msginfo->from)
+ return;
Xstrdup_a(from, msginfo->from, return);
eliminate_address_comment(from);
full_msginfo->extradata &&
full_msginfo->extradata->face) {
image = face_get_from_header(full_msginfo->extradata->face);
- } else if (full_msginfo &&
+ }
+#if HAVE_LIBCOMPFACE
+ else if (full_msginfo &&
full_msginfo->extradata &&
full_msginfo->extradata->xface) {
image = xface_get_from_header(full_msginfo->extradata->xface,
&summaryview->ctree->style->white,
summaryview->mainwin->window->window);
}
+#endif
procmsg_msginfo_free(full_msginfo);
if (image)
picture = gtk_image_get_pixbuf(GTK_IMAGE(image));
/* thread functions */
-void summary_thread_build(SummaryView *summaryview)
+static void summary_thread_build(SummaryView *summaryview)
{
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
GtkCTreeNode *node;
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) && !MAEMO
+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");
+ } 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;
+
+ 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);
+
+ gtk_tooltip_set_text (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;
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) && !MAEMO
+ 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;
}
compose_reply_from_messageview(msgview, msginfo_list, action);
g_slist_free(msginfo_list);
}
-
+#ifndef MAEMO
static void summary_show_all_header_cb(SummaryView *summaryview,
guint action, GtkWidget *widget)
{
{
summary_add_address(summaryview);
}
-
+#endif
static void summary_create_filter_cb(SummaryView *summaryview,
guint action, GtkWidget *widget)
{
summary_filter_open(summaryview, (PrefsFilterType)action, 0);
}
-
+#ifndef MAEMO
static void summary_create_processing_cb(SummaryView *summaryview,
guint action, GtkWidget *widget)
{
summary_filter_open(summaryview, (PrefsFilterType)action, 1);
}
-
+#endif
static void summary_sort_by_column_click(SummaryView *summaryview,
FolderSortKey sort_key)
{