Files
evolution/mail/message-list.h
Michael Zucci 8c85ed61ba Added an async_event handler to store_info. (mail_note_store): Setup async
* mail-folder-cache.c: Added an async_event handler to store_info.
	(mail_note_store): Setup async event handler here.
	(store_finalised): Flush out async events here.
	(folder_changed): Use async event handler to emit event.
	(mail_note_folder): Chagned, do most of the work in the calling
	context, only do the corba stuff in main.
	(store_folder_subscribed): Use async event, and do more work locally.
	(store_folder_unsubscribed): Same.
	(store_folder_deleted): Call store_folder_unsubscribed if we have
	to do any work.
	(store_folder_created): Call store_folder_subscribed if we have to
	do any work.
	(store_folder_unsubscribed): Ref store while busy.
	(real_folder_deleted): And unref here.
	(store_folder_subscribed): Reg store while busy.
	(real_folder_created): Unref here.
	(mail_note_folder): Ref folder while busy.
	(real_note_folder): And unref here.
	(mail_note_folder): Hook onto folder_deleted event.
	(folder_deleted): Just mark this folder as no longer available.

	* mail-session.c (register_timeout): Use mail_call_main instead of
	proxy_event.
	(remove_timeout): Same here.

	* folder-browser.c (folder_changed): use the new mail_async_event
	stuff.
	(folder_changed_main): Remove old async event handling stuff.
	(FOLDER_BROWSER_LOCK/UNLOCK): Removed.
	(FolderBrowserPrivate): Removed too, sigh.

	* mail-mt.c (mail_async_event_new, mail_async_event_emit,
	mail_async_event_destroy): New functions to handle async events.
	(mail_proxy_event, mail_proxy_event_id): Removed old functions for
	async events.
	(do_call): Add suport for MAIL_CALL_p_pp.
	(mail_msg_free): Use mail_async_event instead of proxy_event.

	* message-list.c (message_changed): Promote the message_changed to
	a folder_changed and use main_folder_changed to process it.
	(main_message_changed): Remove.d
	(message_list_init): Setup async event handler.
	(message_list_destroy): Remove async handler.
	(folder_changed): Use async hanler to emit event in main loop.
	(message_changed): Same.

svn path=/trunk/; revision=13698
2001-10-16 19:13:31 +00:00

143 lines
4.0 KiB
C

/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
#ifndef _MESSAGE_LIST_H_
#define _MESSAGE_LIST_H_
#include <gtk/gtkobject.h>
#include <gtk/gtkwidget.h>
#include <gal/e-table/e-table-simple.h>
#include <gal/e-table/e-tree-scrolled.h>
#include "mail-types.h"
#define MESSAGE_LIST_TYPE (message_list_get_type ())
#define MESSAGE_LIST(o) (GTK_CHECK_CAST ((o), MESSAGE_LIST_TYPE, MessageList))
#define MESSAGE_LIST_CLASS(k) (GTK_CHECK_CLASS_CAST((k), MESSAGE_LIST_TYPE, MessageListClass))
#define IS_MESSAGE_LIST(o) (GTK_CHECK_TYPE ((o), MESSAGE_LIST_TYPE))
#define IS_MESSAGE_LIST_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MESSAGE_LIST_TYPE))
enum {
COL_MESSAGE_STATUS,
COL_FLAGGED,
COL_SCORE,
COL_ATTACHMENT,
COL_FROM,
COL_SUBJECT,
COL_SENT,
COL_RECEIVED,
COL_TO,
COL_SIZE,
COL_LAST,
/* Invisible columns */
COL_DELETED,
COL_UNREAD,
COL_COLOUR,
};
#define MESSAGE_LIST_COLUMN_IS_ACTIVE(col) (col == COL_MESSAGE_STATUS || \
col == COL_FLAGGED)
#define ML_HIDE_NONE_START (0)
#define ML_HIDE_NONE_END (2147483647)
/* dont change */
#define ML_HIDE_SAME (2147483646)
struct _MessageList {
ETreeScrolled parent;
/* The table */
ETreeModel *model;
ETree *tree;
ETreePath tree_root;
ETableExtras *extras;
/* The folder */
CamelFolder *folder;
GHashTable *uid_nodemap; /* uid (from info) -> tree node mapping */
/* UID's to hide. Keys in the mempool */
/* IMPORTANT: You MUST have obtained the hide lock, to operate on this data */
GHashTable *hidden;
struct _EMemPool *hidden_pool;
int hide_unhidden, /* total length, before hiding */
hide_before, hide_after; /* hide ranges of messages */
/* Current search string, or %NULL */
char *search;
/* Are we displaying threaded view? */
gboolean threaded;
/* do we automatically hide deleted messages? */
gboolean hidedeleted;
/* Where the ETree cursor is. */
int cursor_row;
char *cursor_uid;
/* Row-selection and seen-marking timers */
guint idle_id, seen_id;
/* locks */
GMutex *hide_lock; /* for any 'hide' info above */
/* for message/folder chagned event handling */
struct _MailAsyncEvent *async_event;
};
typedef struct {
ETreeScrolledClass parent_class;
/* signals - select a message */
void (*message_selected) (MessageList *ml, const char *uid);
void (*message_list_built) (MessageList *ml);
} MessageListClass;
typedef void (*MessageListForeachFunc) (MessageList *message_list,
const char *uid,
gpointer user_data);
typedef enum {
MESSAGE_LIST_SELECT_NEXT = 1,
MESSAGE_LIST_SELECT_PREVIOUS = -1
} MessageListSelectDirection;
GtkType message_list_get_type (void);
GtkWidget *message_list_new (void);
void message_list_set_folder (MessageList *message_list,
CamelFolder *camel_folder,
gboolean outgoing);
void message_list_foreach (MessageList *message_list,
MessageListForeachFunc callback,
gpointer user_data);
void message_list_select (MessageList *message_list,
int base_row,
MessageListSelectDirection direction,
guint32 flags,
guint32 mask,
gboolean wraparound);
void message_list_select_uid (MessageList *message_list,
const char *uid);
/* info */
unsigned int message_list_length(MessageList *ml);
unsigned int message_list_hidden(MessageList *ml);
/* hide specific messages */
void message_list_hide_add(MessageList *ml, const char *expr, unsigned int lower, unsigned int upper);
void message_list_hide_uids(MessageList *ml, GPtrArray *uids);
void message_list_hide_clear(MessageList *ml);
void message_list_set_threaded(MessageList *ml, gboolean threaded);
void message_list_set_hidedeleted(MessageList *ml, gboolean hidedeleted);
void message_list_set_search(MessageList *ml, const char *search);
#define MESSAGE_LIST_LOCK(m, l) g_mutex_lock(((MessageList *)m)->l)
#define MESSAGE_LIST_UNLOCK(m, l) g_mutex_unlock(((MessageList *)m)->l)
#endif /* _MESSAGE_LIST_H_ */