Blame src/mail/em-event.c

Packit Service de44cd
/*
Packit Service de44cd
 * This program is free software; you can redistribute it and/or modify it
Packit Service de44cd
 * under the terms of the GNU Lesser General Public License as published by
Packit Service de44cd
 * the Free Software Foundation.
Packit Service de44cd
 *
Packit Service de44cd
 * This program is distributed in the hope that it will be useful, but
Packit Service de44cd
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
Packit Service de44cd
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
Packit Service de44cd
 * for more details.
Packit Service de44cd
 *
Packit Service de44cd
 * You should have received a copy of the GNU Lesser General Public License
Packit Service de44cd
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
Packit Service de44cd
 *
Packit Service de44cd
 *
Packit Service de44cd
 * Authors:
Packit Service de44cd
 *		Michael Zucchi <notzed@ximian.com>
Packit Service de44cd
 *
Packit Service de44cd
 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
Packit Service de44cd
 *
Packit Service de44cd
 */
Packit Service de44cd
Packit Service de44cd
#include "evolution-config.h"
Packit Service de44cd
Packit Service de44cd
#include <string.h>
Packit Service de44cd
#include <stdlib.h>
Packit Service de44cd
Packit Service de44cd
#include "em-event.h"
Packit Service de44cd
#include "composer/e-msg-composer.h"
Packit Service de44cd
Packit Service de44cd
static EMEvent *em_event;
Packit Service de44cd
Packit Service de44cd
G_DEFINE_TYPE (EMEvent, em_event, E_TYPE_EVENT)
Packit Service de44cd
Packit Service de44cd
static void
Packit Service de44cd
eme_target_free (EEvent *ep,
Packit Service de44cd
                 EEventTarget *t)
Packit Service de44cd
{
Packit Service de44cd
	switch (t->type) {
Packit Service de44cd
	case EM_EVENT_TARGET_FOLDER: {
Packit Service de44cd
		EMEventTargetFolder *s = (EMEventTargetFolder *) t;
Packit Service de44cd
		if (s->store != NULL)
Packit Service de44cd
			g_object_unref (s->store);
Packit Service de44cd
		g_free (s->folder_name);
Packit Service de44cd
		g_free (s->display_name);
Packit Service de44cd
		g_free (s->msg_uid);
Packit Service de44cd
		g_free (s->msg_sender);
Packit Service de44cd
		g_free (s->msg_subject);
Packit Service de44cd
		break; }
Packit Service de44cd
	case EM_EVENT_TARGET_MESSAGE: {
Packit Service de44cd
		EMEventTargetMessage *s = (EMEventTargetMessage *) t;
Packit Service de44cd
Packit Service de44cd
		if (s->folder)
Packit Service de44cd
			g_object_unref (s->folder);
Packit Service de44cd
		if (s->message)
Packit Service de44cd
			g_object_unref (s->message);
Packit Service de44cd
		g_free (s->uid);
Packit Service de44cd
		if (s->composer)
Packit Service de44cd
			g_object_unref (s->composer);
Packit Service de44cd
		break; }
Packit Service de44cd
	case EM_EVENT_TARGET_COMPOSER : {
Packit Service de44cd
		EMEventTargetComposer *s = (EMEventTargetComposer *) t;
Packit Service de44cd
Packit Service de44cd
		if (s->composer)
Packit Service de44cd
			g_object_unref (s->composer);
Packit Service de44cd
		break; }
Packit Service de44cd
	}
Packit Service de44cd
Packit Service de44cd
	/* Chain up to parent's target_free() method. */
Packit Service de44cd
	E_EVENT_CLASS (em_event_parent_class)->target_free (ep, t);
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
static void
Packit Service de44cd
em_event_class_init (EMEventClass *class)
Packit Service de44cd
{
Packit Service de44cd
	EEventClass *event_class;
Packit Service de44cd
Packit Service de44cd
	event_class = E_EVENT_CLASS (class);
Packit Service de44cd
	event_class->target_free = eme_target_free;
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
static void
Packit Service de44cd
em_event_init (EMEvent *event)
Packit Service de44cd
{
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
/**
Packit Service de44cd
 * em_event_peek:
Packit Service de44cd
 * @void:
Packit Service de44cd
 *
Packit Service de44cd
 * Get the singular instance of the mail event handler.
Packit Service de44cd
 *
Packit Service de44cd
 * Return value:
Packit Service de44cd
 **/
Packit Service de44cd
EMEvent *
Packit Service de44cd
em_event_peek (void)
Packit Service de44cd
{
Packit Service de44cd
	if (em_event == NULL) {
Packit Service de44cd
		em_event = g_object_new (EM_TYPE_EVENT, NULL);
Packit Service de44cd
		e_event_construct (
Packit Service de44cd
			&em_event->popup,
Packit Service de44cd
			"org.gnome.evolution.mail.events");
Packit Service de44cd
	}
Packit Service de44cd
Packit Service de44cd
	return em_event;
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
EMEventTargetFolder *
Packit Service de44cd
em_event_target_new_folder (EMEvent *eme,
Packit Service de44cd
                            CamelStore *store,
Packit Service de44cd
                            const gchar *folder_name,
Packit Service de44cd
                            guint new,
Packit Service de44cd
                            const gchar *msg_uid,
Packit Service de44cd
                            const gchar *msg_sender,
Packit Service de44cd
                            const gchar *msg_subject)
Packit Service de44cd
{
Packit Service de44cd
	EMEventTargetFolder *t;
Packit Service de44cd
	guint32 flags = new ? EM_EVENT_FOLDER_NEWMAIL : 0;
Packit Service de44cd
Packit Service de44cd
	g_return_val_if_fail (CAMEL_IS_STORE (store), NULL);
Packit Service de44cd
	g_return_val_if_fail (folder_name != NULL, NULL);
Packit Service de44cd
Packit Service de44cd
	t = e_event_target_new (
Packit Service de44cd
		&eme->popup, EM_EVENT_TARGET_FOLDER, sizeof (*t));
Packit Service de44cd
Packit Service de44cd
	t->store = g_object_ref (store);
Packit Service de44cd
	t->folder_name = g_strdup (folder_name);
Packit Service de44cd
	t->target.mask = ~flags;
Packit Service de44cd
	t->new = new;
Packit Service de44cd
	t->msg_uid = g_strdup (msg_uid);
Packit Service de44cd
	t->msg_sender = g_strdup (msg_sender);
Packit Service de44cd
	t->msg_subject = g_strdup (msg_subject);
Packit Service de44cd
Packit Service de44cd
	return t;
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
EMEventTargetComposer *
Packit Service de44cd
em_event_target_new_composer (EMEvent *eme,
Packit Service de44cd
                              EMsgComposer *composer,
Packit Service de44cd
                              guint32 flags)
Packit Service de44cd
{
Packit Service de44cd
	EMEventTargetComposer *t;
Packit Service de44cd
Packit Service de44cd
	t = e_event_target_new (
Packit Service de44cd
		&eme->popup, EM_EVENT_TARGET_COMPOSER, sizeof (*t));
Packit Service de44cd
Packit Service de44cd
	t->composer = g_object_ref (composer);
Packit Service de44cd
	t->target.mask = ~flags;
Packit Service de44cd
Packit Service de44cd
	return t;
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
EMEventTargetMessage *
Packit Service de44cd
em_event_target_new_message (EMEvent *eme,
Packit Service de44cd
                             CamelFolder *folder,
Packit Service de44cd
                             CamelMimeMessage *message,
Packit Service de44cd
                             const gchar *uid,
Packit Service de44cd
                             guint32 flags,
Packit Service de44cd
                             EMsgComposer *composer)
Packit Service de44cd
{
Packit Service de44cd
	EMEventTargetMessage *t;
Packit Service de44cd
Packit Service de44cd
	t = e_event_target_new (
Packit Service de44cd
		&eme->popup, EM_EVENT_TARGET_MESSAGE, sizeof (*t));
Packit Service de44cd
Packit Service de44cd
	t->uid = g_strdup (uid);
Packit Service de44cd
	t->folder = folder;
Packit Service de44cd
	if (folder)
Packit Service de44cd
		g_object_ref (folder);
Packit Service de44cd
	t->message = message;
Packit Service de44cd
	if (message)
Packit Service de44cd
		g_object_ref (message);
Packit Service de44cd
	t->target.mask = ~flags;
Packit Service de44cd
	if (composer)
Packit Service de44cd
		t->composer = g_object_ref (G_OBJECT (composer));
Packit Service de44cd
Packit Service de44cd
	return t;
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
EMEventTargetSendReceive *
Packit Service de44cd
em_event_target_new_send_receive (EMEvent *eme,
Packit Service de44cd
                                  GtkWidget *grid,
Packit Service de44cd
                                  gpointer data,
Packit Service de44cd
                                  gint row,
Packit Service de44cd
                                  guint32 flags)
Packit Service de44cd
{
Packit Service de44cd
	EMEventTargetSendReceive *t;
Packit Service de44cd
Packit Service de44cd
	t = e_event_target_new (
Packit Service de44cd
		&eme->popup, EM_EVENT_TARGET_SEND_RECEIVE, sizeof (*t));
Packit Service de44cd
Packit Service de44cd
	t->grid = grid;
Packit Service de44cd
	t->data = data;
Packit Service de44cd
	t->row = row;
Packit Service de44cd
	t->target.mask = ~flags;
Packit Service de44cd
Packit Service de44cd
	return t;
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
EMEventTargetCustomIcon *
Packit Service de44cd
em_event_target_new_custom_icon (EMEvent *eme,
Packit Service de44cd
                                 GtkTreeStore *store,
Packit Service de44cd
                                 GtkTreeIter *iter,
Packit Service de44cd
                                 const gchar *folder_name,
Packit Service de44cd
                                 guint32 flags)
Packit Service de44cd
{
Packit Service de44cd
	EMEventTargetCustomIcon *t;
Packit Service de44cd
Packit Service de44cd
	t = e_event_target_new (
Packit Service de44cd
		&eme->popup, EM_EVENT_TARGET_CUSTOM_ICON, sizeof (*t));
Packit Service de44cd
Packit Service de44cd
	t->store = store;
Packit Service de44cd
	t->iter = iter;
Packit Service de44cd
	t->folder_name = folder_name;
Packit Service de44cd
	t->target.mask = ~flags;
Packit Service de44cd
Packit Service de44cd
	return t;
Packit Service de44cd
}