{N_("/_View"), NULL, NULL, 0, "<Branch>"},
{N_("/_View/Open in new _window"),
"<control><alt>N", summary_open_msg, 0, NULL},
- {N_("/_View/_Source"), "<control>U", summary_view_source, 0, NULL},
- {N_("/_View/All _header"), "<control>H", summary_show_all_header_cb, 0, "<ToggleItem>"},
+ {N_("/_View/Message _source"), "<control>U", summary_view_source, 0, NULL},
+ {N_("/_View/All _headers"), "<control>H", summary_show_all_header_cb, 0, "<ToggleItem>"},
{N_("/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_Save as..."), "<control>S", summary_save_as, 0, NULL},
{N_("/_Print..."), "<control>P", summary_print, 0, NULL},
"", /* S_COL_LOCKED */
};
-#define START_LONG_OPERATION(summaryview) { \
+#define START_LONG_OPERATION(summaryview,force_freeze) { \
summary_lock(summaryview); \
main_window_cursor_wait(summaryview->mainwin); \
- if (sc_g_list_bigger(GTK_CLIST(summaryview->ctree)->selection, 1)) {\
+ if (force_freeze || sc_g_list_bigger(GTK_CLIST(summaryview->ctree)->selection, 1)) {\
froze = TRUE; \
gtk_clist_freeze(GTK_CLIST(summaryview->ctree)); \
} \
main_window_cursor_normal(summaryview->mainwin);
return FALSE;
}
+
gboolean summary_show(SummaryView *summaryview, FolderItem *item)
{
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
{"/View" , M_SINGLE_TARGET_EXIST},
{"/View/Open in new window" , M_SINGLE_TARGET_EXIST},
- {"/View/Source" , M_SINGLE_TARGET_EXIST},
- {"/View/All header" , M_SINGLE_TARGET_EXIST},
+ {"/View/Message source" , M_SINGLE_TARGET_EXIST},
+ {"/View/All headers" , M_SINGLE_TARGET_EXIST},
{"/Save as..." , M_TARGET_EXIST},
{"/Print..." , M_TARGET_EXIST},
{NULL, 0}
summary_lock(summaryview);
- menuitem = gtk_item_factory_get_widget(ifactory, "/View/All header");
+ menuitem = gtk_item_factory_get_widget(ifactory, "/View/All headers");
if (summaryview->messageview
&& summaryview->messageview->mimeview
&& summaryview->messageview->mimeview->textview)
}
if (val == G_ALERTALTERNATE) {
- folderview_select_next_unread(summaryview->folderview);
+ folderview_select_next_unread(summaryview->folderview, TRUE);
return;
}
else
GList *cur;
gboolean froze = FALSE;
- START_LONG_OPERATION(summaryview);
+ 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)
summary_mark_row(summaryview, GTK_CTREE_NODE(cur->data));
GList *cur;
gboolean froze = FALSE;
- START_LONG_OPERATION(summaryview);
+ 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)
summary_mark_row_as_read(summaryview,
GList *cur;
gboolean froze = FALSE;
- START_LONG_OPERATION(summaryview);
+ START_LONG_OPERATION(summaryview, FALSE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
summary_lock_row(summaryview,
GTK_CTREE_NODE(cur->data));
GList *cur;
gboolean froze = FALSE;
- START_LONG_OPERATION(summaryview);
+ START_LONG_OPERATION(summaryview, FALSE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
summary_unlock_row(summaryview,
GTK_CTREE_NODE(cur->data));
prefs_common.ask_mark_all_read = FALSE;
}
- START_LONG_OPERATION(summaryview);
+ 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;
node = gtkut_ctree_node_next(ctree, node))
prefs_common.immediate_exec = FALSE;
- START_LONG_OPERATION(summaryview);
+ 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);
GList *cur;
gboolean froze = FALSE;
- START_LONG_OPERATION(summaryview);
+ 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)
/* next code sets current row focus right. We need to find a row
* that is not deleted. */
- START_LONG_OPERATION(summaryview);
+ 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) {
sel_last = GTK_CTREE_NODE(cur->data);
GList *cur;
gboolean froze = FALSE;
- START_LONG_OPERATION(summaryview);
+ 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)
summary_unmark_row(summaryview, GTK_CTREE_NODE(cur->data));
return;
}
- START_LONG_OPERATION(summaryview);
+ START_LONG_OPERATION(summaryview, FALSE);
for (cur = GTK_CLIST(summaryview->ctree)->selection;
cur != NULL && cur->data != NULL; cur = cur->next) {
return;
}
- START_LONG_OPERATION(summaryview);
+ START_LONG_OPERATION(summaryview, FALSE);
for (cur = GTK_CLIST(summaryview->ctree)->selection;
cur != NULL && cur->data != NULL; cur = cur->next)
debug_print("Unthreading for execution...");
- START_LONG_OPERATION(summaryview);
-
+ START_LONG_OPERATION(summaryview, TRUE);
for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
node != NULL; node = GTK_CTREE_NODE_NEXT(node)) {
summary_unthread_for_exec_func(ctree, node, summaryview);
GList *cur;
gboolean froze = FALSE;
- START_LONG_OPERATION(summaryview);
-
+ START_LONG_OPERATION(summaryview, FALSE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
summary_set_row_colorlabel(summaryview,
GTK_CTREE_NODE(cur->data), labelcolor);
summary_status_show(summaryview);
}
+typedef struct _PostponedSelectData
+{
+ GtkCTree *ctree;
+ GtkCTreeNode *row;
+ gint column;
+ SummaryView *summaryview;
+} PostponedSelectData;
+
+static gboolean summary_select_retry(void *data)
+{
+ PostponedSelectData *psdata = (PostponedSelectData *)data;
+ debug_print("trying again\n");
+ summary_selected(psdata->ctree, psdata->row,
+ psdata->column, psdata->summaryview);
+ g_free(psdata);
+ return FALSE;
+}
+
static void summary_selected(GtkCTree *ctree, GtkCTreeNode *row,
gint column, SummaryView *summaryview)
{
MsgInfo *msginfo;
gboolean marked_unread = FALSE;
+ if (summary_is_locked(summaryview)
+ && !GTK_SCTREE(ctree)->selecting_range
+ && summaryview->messageview->mimeview
+ && summaryview->messageview->mimeview->type == MIMEVIEW_TEXT
+ && summaryview->messageview->mimeview->textview->loading) {
+ PostponedSelectData *data = g_new0(PostponedSelectData, 1);
+ summaryview->messageview->mimeview->textview->stop_loading = TRUE;
+
+ data->ctree = ctree;
+ data->row = row;
+ data->column = column;
+ data->summaryview = summaryview;
+ debug_print("postponing open of message till end of load\n");
+ g_timeout_add(100, summary_select_retry, data);
+ return;
+ }
if (summary_is_locked(summaryview)
|| GTK_SCTREE(ctree)->selecting_range) {
return;
GList *cur;
gboolean froze = FALSE;
- START_LONG_OPERATION(summaryview);
+ START_LONG_OPERATION(summaryview, FALSE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
gtk_ctree_pre_recursive(ctree, GTK_CTREE_NODE(cur->data),
GTK_CTREE_FUNC(summary_ignore_thread_func),
GList *cur;
gboolean froze = FALSE;
- START_LONG_OPERATION(summaryview);
+ START_LONG_OPERATION(summaryview, FALSE);
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
gtk_ctree_pre_recursive(ctree, GTK_CTREE_NODE(cur->data),
GTK_CTREE_FUNC(summary_unignore_thread_func),