static void summary_reply_cb (SummaryView *summaryview,
guint action,
GtkWidget *widget);
+static void summary_execute_cb (SummaryView *summaryview,
+ guint action,
+ GtkWidget *widget);
static void summary_show_all_header_cb (SummaryView *summaryview,
guint action,
GtkWidget *widget);
{N_("/M_ove..."), NULL, summary_move_to, 0, NULL},
{N_("/_Copy..."), NULL, summary_copy_to, 0, NULL},
{N_("/_Delete"), NULL, summary_delete, 0, NULL},
- {N_("/E_xecute"), NULL, summary_execute, 0, NULL},
+ {N_("/E_xecute"), NULL, summary_execute_cb, 0, NULL},
{N_("/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_Mark"), NULL, NULL, 0, "<Branch>"},
{N_("/_Mark/_Mark"), NULL, summary_mark, 0, NULL},
{N_("/Color la_bel"), NULL, NULL, 0, NULL},
{N_("/---"), NULL, NULL, 0, "<Separator>"},
- {N_("/Add sender to address _book"),
- NULL, summary_add_address_cb, 0, NULL},
+ {N_("/Add sender to address boo_k"),
+ NULL, summary_add_address_cb, 0, NULL},
{N_("/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_View"), NULL, NULL, 0, "<Branch>"},
{N_("/_View/Open in new _window"),
summaryview->popupmenu = popupmenu;
summaryview->popupfactory = popupfactory;
summaryview->msg_is_toggled_on = TRUE;
+ summaryview->lock_count = 0;
summaryview->sort_mode = SORT_BY_NONE;
summaryview->sort_type = GTK_SORT_ASCENDING;
gint sort_type;
static gboolean locked = FALSE;
- if (locked)
- return FALSE;
+ if (summary_is_locked(summaryview)) return FALSE;
inc_lock();
- locked = TRUE;
+ summary_lock(summaryview);
STATUSBAR_POP(summaryview->mainwin);
else if (G_ALERTALTERNATE == val)
summary_write_cache(summaryview);
else {
- locked = FALSE;
+ summary_unlock(summaryview);
inc_unlock();
- return FALSE;
+ return FALSE;
}
folder_update_op_count();
}
summary_clear_all(summaryview);
summaryview->folder_item = item;
gtk_clist_thaw(GTK_CLIST(ctree));
- locked = FALSE;
+ summary_unlock(summaryview);
inc_unlock();
return TRUE;
}
STATUSBAR_PUSH(summaryview->mainwin, _("Done."));
main_window_cursor_normal(summaryview->mainwin);
- locked = FALSE;
+ summary_unlock(summaryview);
inc_unlock();
return TRUE;
summary_status_show(summaryview);
}
+void summary_lock(SummaryView *summaryview)
+{
+ summaryview->lock_count++;
+}
+
+void summary_unlock(SummaryView *summaryview)
+{
+ if (summaryview->lock_count)
+ summaryview->lock_count--;
+}
+
+gboolean summary_is_locked(SummaryView *summaryview)
+{
+ return summaryview->lock_count > 0;
+}
+
SummarySelection summary_get_selection_type(SummaryView *summaryview)
{
GtkCList *clist = GTK_CLIST(summaryview->ctree);
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
MsgInfo *msginfo;
gchar *filename;
- static gboolean lock = FALSE;
if (!new_window && summaryview->displayed == row) return;
g_return_if_fail(row != NULL);
- if (lock) return;
- lock = TRUE;
+ if (summary_is_locked(summaryview)) return;
+ summary_lock(summaryview);
STATUSBAR_POP(summaryview->mainwin);
GTK_EVENTS_FLUSH();
filename = procmsg_get_message_file(msginfo);
if (!filename) {
- lock = FALSE;
+ summary_unlock(summaryview);
return;
}
g_free(filename);
if (GTK_WIDGET_VISIBLE(summaryview->headerwin->window))
header_window_show(summaryview->headerwin, msginfo);
- lock = FALSE;
+ summary_unlock(summaryview);
}
void summary_redisplay_msg(SummaryView *summaryview)
if (!summaryview->folder_item ||
summaryview->folder_item->folder->type == F_NEWS) return;
+ if (summary_is_locked(summaryview)) return;
+
/* if current folder is trash, don't delete */
if (summaryview->folder_item->stype == F_TRASH) {
alertpanel_notice(_("Current folder is Trash."));
if (!to_folder) return;
if (!summaryview->folder_item ||
summaryview->folder_item->folder->type == F_NEWS) return;
+
+ if (summary_is_locked(summaryview)) return;
+
if (summaryview->folder_item == to_folder) {
alertpanel_notice(_("Destination is same as current folder."));
return;
if (!to_folder) return;
if (!summaryview->folder_item ||
summaryview->folder_item->folder->type == F_NEWS) return;
+
+ if (summary_is_locked(summaryview)) return;
+
if (summaryview->folder_item == to_folder) {
alertpanel_notice
(_("Destination to copy is same as current folder."));
g_free(cmdline);
}
-void summary_execute(SummaryView *summaryview)
+gboolean summary_execute(SummaryView *summaryview)
{
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
GtkCList *clist = GTK_CLIST(summaryview->ctree);
GtkCTreeNode *node, *next;
if (!summaryview->folder_item ||
- summaryview->folder_item->folder->type == F_NEWS) return;
+ summaryview->folder_item->folder->type == F_NEWS) return FALSE;
+
+ if (summary_is_locked(summaryview)) return FALSE;
+ summary_lock(summaryview);
gtk_clist_freeze(clist);
gtk_ctree_node_moveto(ctree, summaryview->selected, -1, 0.5, 0);
gtk_clist_thaw(clist);
+
+ summary_unlock(summaryview);
+ return TRUE;
}
static void summary_execute_move(SummaryView *summaryview)
GtkCTreeNode *parent;
MsgInfo *msginfo;
+ summary_lock(summaryview);
+
debug_print(_("Building threads..."));
STATUSBAR_PUSH(summaryview->mainwin, _("Building threads..."));
main_window_cursor_wait(summaryview->mainwin);
debug_print(_("done.\n"));
STATUSBAR_POP(summaryview->mainwin);
main_window_cursor_normal(summaryview->mainwin);
+
+ summary_unlock(summaryview);
}
void summary_unthread(SummaryView *summaryview)
GtkCTreeNode *sibling;
GtkCTreeNode *next_child;
+ summary_lock(summaryview);
+
debug_print(_("Unthreading..."));
STATUSBAR_PUSH(summaryview->mainwin, _("Unthreading..."));
main_window_cursor_wait(summaryview->mainwin);
debug_print(_("done.\n"));
STATUSBAR_POP(summaryview->mainwin);
main_window_cursor_normal(summaryview->mainwin);
+
+ summary_unlock(summaryview);
}
static void summary_unthread_for_exec(SummaryView *summaryview)
GtkCTreeNode *node;
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ summary_lock(summaryview);
+
debug_print(_("Unthreading for execution..."));
gtk_clist_freeze(GTK_CLIST(ctree));
gtk_clist_thaw(GTK_CLIST(ctree));
debug_print(_("done.\n"));
+
+ summary_unlock(summaryview);
}
static void summary_unthread_for_exec_func(GtkCTree *ctree, GtkCTreeNode *node,
{
if (!prefs_common.fltlist) return;
+ summary_lock(summaryview);
+
debug_print(_("filtering..."));
STATUSBAR_PUSH(summaryview->mainwin, _("Filtering..."));
main_window_cursor_wait(summaryview->mainwin);
debug_print(_("done.\n"));
STATUSBAR_POP(summaryview->mainwin);
main_window_cursor_normal(summaryview->mainwin);
+
+ summary_unlock(summaryview);
}
static void summary_filter_func(GtkCTree *ctree, GtkCTreeNode *node,
gtk_signal_connect(GTK_OBJECT(label_menuitem), "activate",
GTK_SIGNAL_FUNC(summary_colorlabel_menu_item_activate_item_cb),
summaryview);
-
gtk_widget_show(label_menuitem);
menu = gtk_menu_new();
summary_set_marks_selected(summaryview);
}
+static void summary_execute_cb(SummaryView *summaryview, guint action,
+ GtkWidget *widget)
+{
+ summary_execute(summaryview);
+}
+
static void summary_show_all_header_cb(SummaryView *summaryview,
guint action, GtkWidget *widget)
{