procmsg_msginfo_unset_flags(msginfo, MSG_FORWARDED, 0);
procmsg_msginfo_set_flags(msginfo, MSG_REPLIED, 0);
+ msginfo_update_item(msginfo);
procmsg_msginfo_free(msginfo);
- folder_update_item(item,TRUE);
}
}
g_strfreev(tokens);
g_free(destdir);
}
+
+/*
+ * callback handling
+ */
+GSList *msginfo_update_callbacks_list = NULL;
+gint msginfo_update_callbacks_nextid = 0;
+
+struct MsgInfoUpdateCallback
+{
+ gint id;
+ MsgInfoUpdateFunc func;
+ gpointer data;
+};
+
+gint msginfo_update_callback_register(MsgInfoUpdateFunc func, gpointer data)
+{
+ struct MsgInfoUpdateCallback *callback;
+
+ g_return_val_if_fail(func != NULL, -1);
+
+ msginfo_update_callbacks_nextid++;
+
+ callback = g_new0(struct MsgInfoUpdateCallback, 1);
+ callback->id = msginfo_update_callbacks_nextid;
+ callback->func = func;
+ callback->data = data;
+
+ msginfo_update_callbacks_list =
+ g_slist_append(msginfo_update_callbacks_list, callback);
+
+ return msginfo_update_callbacks_nextid;
+}
+
+void msginfo_update_callback_unregister(gint id)
+{
+ GSList *list, *next;
+
+ for (list = msginfo_update_callbacks_list; list != NULL; list = next) {
+ struct MsgInfoUpdateCallback *callback;
+
+ next = list->next;
+
+ callback = list->data;
+ if (callback->id == id) {
+ msginfo_update_callbacks_list =
+ g_slist_remove(msginfo_update_callbacks_list, callback);
+ g_free(callback);
+ }
+ }
+}
+
+static void msginfo_update_callback_execute(MsgInfo *info)
+{
+ GSList *list;
+
+ for (list = msginfo_update_callbacks_list; list != NULL; list = list->next) {
+ struct MsgInfoUpdateCallback *callback;
+
+ callback = list->data;
+ callback->func(info, callback->data);
+ }
+}
+
+void msginfo_update_item(MsgInfo *info)
+{
+ msginfo_update_callback_execute(info);
+}
MsgPermFlags perm_flags,
MsgTmpFlags tmp_flags);
+/* callback system for updates */
+typedef void (*MsgInfoUpdateFunc) (MsgInfo *info,
+ gpointer data);
+gint msginfo_update_callback_register(MsgInfoUpdateFunc func, gpointer data);
+void msginfo_update_callback_unregister(gint id);
+
+void msginfo_update_item (MsgInfo *info);
#endif /* __PROCMSG_H__ */
static void tog_searchbar_cb (GtkWidget *w,
gpointer data);
+static void summary_update_msg (MsgInfo *info, gpointer data);
GtkTargetEntry summary_drag_types[1] =
{
summaryview->search_type_opt = search_type_opt;
summaryview->search_type = search_type;
summaryview->search_string = search_string;
+ summaryview->msginfo_update_callback_id =
+ msginfo_update_callback_register(summary_update_msg, (gpointer) summaryview);
/* CLAWS: need this to get the SummaryView * from
* the CList */
item->threaded = summaryview->threaded;
}
+static void summary_update_msg(MsgInfo *msginfo, gpointer data) {
+ GtkCTreeNode *node;
+ SummaryView *summaryview = (SummaryView *)data;
+ node = gtk_ctree_find_by_row_data(GTK_CTREE(summaryview->ctree), NULL, msginfo);
+
+ if (node)
+ summary_set_row_marks(summaryview, node);
+}
+
/*
* End of Source.
*/