summaryview->sort_type = SORT_ASCENDING;
/* Init summaryview extra data */
-#ifndef G_OS_WIN32
summaryview->simplify_subject_preg = NULL;
-#endif
summary_clear_list(summaryview);
summary_set_column_titles(summaryview);
summary_colorlabel_menu_create(summaryview, FALSE);
cmp_func = (GtkCMCListCompareFunc)summary_cmp_by_from;
break;
case SORT_BY_SUBJECT:
-#ifndef G_OS_WIN32
if (summaryview->simplify_subject_preg)
cmp_func = (GtkCMCListCompareFunc)summary_cmp_by_simplified_subject;
else
-#endif
cmp_func = (GtkCMCListCompareFunc)summary_cmp_by_subject;
break;
case SORT_BY_SCORE:
to_text = to_text ? to_text : _("(No From)");
}
}
- snprintf(tmp2, BUFFSIZE-1, "--> %s", to_text);
+ snprintf(tmp2, BUFFSIZE-1, "➜ %s", to_text);
tmp2[BUFFSIZE-1]='\0';
text[col_pos[S_COL_FROM]] = tmp2;
}
-#ifndef G_OS_WIN32
if (summaryview->simplify_subject_preg != NULL)
text[col_pos[S_COL_SUBJECT]] = msginfo->subject ?
string_remove_match(tmp3, BUFFSIZE, msginfo->subject,
summaryview->simplify_subject_preg) :
_("(No Subject)");
else
-#endif
text[col_pos[S_COL_SUBJECT]] = msginfo->subject ? msginfo->subject :
_("(No Subject)");
if ((vert_layout || small_layout) && 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>"),
+ gchar *tmp = g_markup_printf_escaped(g_strconcat("%s\n",
+ "<span color='%s' style='italic'>",
+ _("From: %s, on %s"), "</span>", NULL),
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>"),
+ gchar *tmp = g_markup_printf_escaped(g_strconcat("%s\n",
+ "<span color='%s' style='italic'>",
+ _("To: %s, on %s"), "</span>", NULL),
text[col_pos[S_COL_SUBJECT]],
color_dim_rgb,
text[col_pos[S_COL_TO]],
if (!mdata)
return FALSE;
+ summary_lock(mdata->summaryview);
if (mdata->msginfo == summary_get_selected_msg(mdata->summaryview))
msginfo_mark_as_read(mdata->summaryview, mdata->msginfo,
mdata->summaryview->selected);
procmsg_msginfo_free(mdata->msginfo);
mdata->summaryview->mark_as_read_timeout_tag = 0;
+ summary_unlock(mdata->summaryview);
g_free(mdata);
return FALSE;
void summaryview_destroy(SummaryView *summaryview)
{
-#ifndef G_OS_WIN32
if(summaryview->simplify_subject_preg) {
regfree(summaryview->simplify_subject_preg);
g_free(summaryview->simplify_subject_preg);
summaryview->simplify_subject_preg = NULL;
}
-#endif
}
static void summary_tags_menu_item_apply_tags_activate_cb(GtkWidget *widget,
gpointer data)
#define BREAK_ON_MODIFIER_KEY() \
if ((event->state & (GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) break
+/* Copied from gtkcmclist.c, if it changes there, it has to change
+ * here as well. This is an ugly hack, there must be a better way to
+ * find out how much to move for page up/down. */
+#define CELL_SPACING 1
static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
SummaryView *summaryview)
{
MessageView *messageview;
GtkAdjustment *adj;
gboolean mod_pressed;
+ gfloat row_align = 0;
if (!event)
return TRUE;
gtk_widget_grab_focus(summaryview->folderview->ctree);
mainwindow_exit_folder(summaryview->mainwin);
return TRUE;
- case GDK_KEY_Home:
- case GDK_KEY_End:
+ case GDK_KEY_Home: case GDK_KEY_KP_Home:
+ case GDK_KEY_End: case GDK_KEY_KP_End:
+ case GDK_KEY_Up: case GDK_KEY_KP_Up:
+ case GDK_KEY_Down: case GDK_KEY_KP_Down:
+ case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up:
+ case GDK_KEY_Page_Down: case GDK_KEY_KP_Page_Down:
if ((node = summaryview->selected) != NULL) {
GtkCMCTreeNode *next = NULL;
- next = (event->keyval == GDK_KEY_Home)
- ? gtk_cmctree_node_nth(ctree, 0)
- : gtk_cmctree_node_nth(ctree,
- g_list_length(GTK_CMCLIST(ctree)->row_list)-1);
+ switch (event->keyval) {
+ case GDK_KEY_Home: case GDK_KEY_KP_Home:
+ next = gtk_cmctree_node_nth(ctree, 0);
+ break;
+ case GDK_KEY_End: case GDK_KEY_KP_End:
+ next = gtk_cmctree_node_nth(ctree,
+ g_list_length(GTK_CMCLIST(ctree)->row_list)-1);
+ row_align = 1;
+ break;
+ case GDK_KEY_Up: case GDK_KEY_KP_Up:
+ next = gtk_cmctree_node_nth(ctree,
+ MAX(0, GTK_CMCLIST(ctree)->focus_row - 1));
+ break;
+ case GDK_KEY_Down: case GDK_KEY_KP_Down:
+ next = gtk_cmctree_node_nth(ctree,
+ MIN(GTK_CMCLIST(ctree)->focus_row + 1, GTK_CMCLIST(ctree)->rows));
+ row_align = 1;
+ break;
+ case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up:
+ next = gtk_cmctree_node_nth(ctree,
+ MAX(0, GTK_CMCLIST(ctree)->focus_row -
+ (2 * GTK_CMCLIST(ctree)->clist_window_height -
+ GTK_CMCLIST(ctree)->row_height - CELL_SPACING) /
+ (2 * (GTK_CMCLIST(ctree)->row_height + CELL_SPACING))));
+ break;
+ case GDK_KEY_Page_Down: case GDK_KEY_KP_Page_Down:
+ next = gtk_cmctree_node_nth(ctree,
+ MIN(GTK_CMCLIST(ctree)->rows - 1, GTK_CMCLIST(ctree)->focus_row +
+ (2 * GTK_CMCLIST(ctree)->clist_window_height -
+ GTK_CMCLIST(ctree)->row_height - CELL_SPACING) /
+ (2 * (GTK_CMCLIST(ctree)->row_height + CELL_SPACING))));
+ row_align = 1;
+ break;
+ }
+
if (next) {
gtk_sctree_select_with_state
(GTK_SCTREE(ctree), next, (event->state & ~GDK_CONTROL_MASK) );
/* Deprecated - what are the non-deprecated equivalents? */
if (gtk_cmctree_node_is_visible(GTK_CMCTREE(ctree), next) != GTK_VISIBILITY_FULL)
- gtk_cmctree_node_moveto(GTK_CMCTREE(ctree), next, 0, 0, 0);
+ gtk_cmctree_node_moveto(GTK_CMCTREE(ctree), next, 0, row_align, 0);
summaryview->selected = next;
}
}
}
return FALSE;
}
+#undef CELL_SPACING
static void quicksearch_execute_cb(QuickSearch *quicksearch, gpointer data)
{
g_list_free( msgList );
}
-#ifndef G_OS_WIN32
static regex_t *summary_compile_simplify_regexp(gchar *simplify_subject_regexp)
{
int err;
return preg;
}
-#endif
void summary_set_prefs_from_folderitem(SummaryView *summaryview, FolderItem *item)
{
FolderSortKey sort_key;
cm_return_if_fail(item != NULL);
/* Subject simplification */
-#ifndef G_OS_WIN32
if(summaryview->simplify_subject_preg) {
regfree(summaryview->simplify_subject_preg);
g_free(summaryview->simplify_subject_preg);
if(item->prefs && item->prefs->simplify_subject_regexp &&
item->prefs->simplify_subject_regexp[0] && item->prefs->enable_simplify_subject)
summaryview->simplify_subject_preg = summary_compile_simplify_regexp(item->prefs->simplify_subject_regexp);
-#endif
+
/* Sorting */
sort_key = item->sort_key;
sort_type = item->sort_type;