1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 * Authors: Michael Zucchi <notzed@ximian.com>
5 * Copyright 2004 Ximian, Inc. (www.ximian.com)
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
33 #include "libedataserver/e-msgport.h"
34 #include <e-util/e-icon-factory.h>
36 #include <camel/camel-store.h>
37 #include <camel/camel-folder.h>
38 #include <camel/camel-mime-message.h>
39 #include <camel/camel-string-utils.h>
40 #include <camel/camel-mime-utils.h>
41 #include <camel/camel-mime-part.h>
42 #include <camel/camel-url.h>
44 #include <camel/camel-vee-folder.h>
45 #include <camel/camel-vtrash-folder.h>
47 static GObjectClass
*eme_parent
;
48 static EMEvent
*em_event
;
53 /*EMEvent *eme = (EMEvent *)o; */
57 eme_finalise(GObject
*o
)
59 ((GObjectClass
*)eme_parent
)->finalize(o
);
63 eme_target_free(EEvent
*ep
, EEventTarget
*t
)
66 case EM_EVENT_TARGET_FOLDER
: {
67 EMEventTargetFolder
*s
= (EMEventTargetFolder
*)t
;
71 case EM_EVENT_TARGET_MESSAGE
: {
72 EMEventTargetMessage
*s
= (EMEventTargetMessage
*)t
;
75 camel_object_unref(s
->folder
);
77 camel_object_unref(s
->message
);
80 case EM_EVENT_TARGET_COMPOSER
: {
81 EMEventTargetComposer
*s
= (EMEventTargetComposer
*)t
;
84 g_object_unref (s
->composer
);
88 ((EEventClass
*)eme_parent
)->target_free(ep
, t
);
92 eme_class_init(GObjectClass
*klass
)
94 klass
->finalize
= eme_finalise
;
95 ((EEventClass
*)klass
)->target_free
= eme_target_free
;
99 em_event_get_type(void)
101 static GType type
= 0;
104 static const GTypeInfo info
= {
105 sizeof(EMEventClass
),
107 (GClassInitFunc
)eme_class_init
,
110 (GInstanceInitFunc
)eme_init
112 eme_parent
= g_type_class_ref(e_event_get_type());
113 type
= g_type_register_static(e_event_get_type(), "EMEvent", &info
, 0);
123 * Get the singular instance of the mail event handler.
127 EMEvent
*em_event_peek(void)
129 if (em_event
== NULL
) {
130 em_event
= g_object_new(em_event_get_type(), 0);
131 e_event_construct(&em_event
->popup
, "org.gnome.evolution.mail.events");
137 EMEventTargetFolder
*
138 em_event_target_new_folder (EMEvent
*eme
, const char *uri
, guint32 flags
)
140 EMEventTargetFolder
*t
= e_event_target_new(&eme
->popup
, EM_EVENT_TARGET_FOLDER
, sizeof(*t
));
142 t
->uri
= g_strdup(uri
);
143 t
->target
.mask
= ~flags
;
148 EMEventTargetComposer
*
149 em_event_target_new_composer (EMEvent
*eme
, const EMsgComposer
*composer
, guint32 flags
)
151 EMEventTargetComposer
*t
= e_event_target_new(&eme
->popup
, EM_EVENT_TARGET_COMPOSER
, sizeof(*t
));
153 t
->composer
= g_object_ref(composer
);
154 t
->target
.mask
= ~flags
;
159 EMEventTargetMessage
*
160 em_event_target_new_message(EMEvent
*eme
, CamelFolder
*folder
, CamelMimeMessage
*message
, const char *uid
, guint32 flags
)
162 EMEventTargetMessage
*t
= e_event_target_new(&eme
->popup
, EM_EVENT_TARGET_MESSAGE
, sizeof(*t
));
164 t
->uid
= g_strdup (uid
);
167 camel_object_ref(folder
);
168 t
->message
= message
;
170 camel_object_ref(message
);
171 t
->target
.mask
= ~flags
;
176 /* ********************************************************************** */
178 static void *emeh_parent_class
;
179 #define emeh ((EMEventHook *)eph)
181 static const EEventHookTargetMask emeh_folder_masks
[] = {
182 { "newmail", EM_EVENT_FOLDER_NEWMAIL
},
187 static const EEventHookTargetMask emeh_composer_masks
[] = {
188 { "sendoption", EM_EVENT_COMPOSER_SEND_OPTION
},
192 static const EEventHookTargetMask emeh_message_masks
[] = {
193 { "replyall", EM_EVENT_MESSAGE_REPLY_ALL
},
197 static const EEventHookTargetMap emeh_targets
[] = {
198 { "folder", EM_EVENT_TARGET_FOLDER
, emeh_folder_masks
},
199 { "message", EM_EVENT_TARGET_MESSAGE
, emeh_message_masks
},
200 { "composer", EM_EVENT_TARGET_COMPOSER
, emeh_composer_masks
},
205 emeh_finalise(GObject
*o
)
207 /*EPluginHook *eph = (EPluginHook *)o;*/
209 ((GObjectClass
*)emeh_parent_class
)->finalize(o
);
213 emeh_class_init(EPluginHookClass
*klass
)
217 ((GObjectClass
*)klass
)->finalize
= emeh_finalise
;
218 ((EPluginHookClass
*)klass
)->id
= "org.gnome.evolution.mail.events:1.0";
220 for (i
=0;emeh_targets
[i
].type
;i
++)
221 e_event_hook_class_add_target_map((EEventHookClass
*)klass
, &emeh_targets
[i
]);
223 ((EEventHookClass
*)klass
)->event
= (EEvent
*)em_event_peek();
227 em_event_hook_get_type(void)
229 static GType type
= 0;
232 static const GTypeInfo info
= {
233 sizeof(EMEventHookClass
), NULL
, NULL
, (GClassInitFunc
) emeh_class_init
, NULL
, NULL
,
234 sizeof(EMEventHook
), 0, (GInstanceInitFunc
) NULL
,
237 emeh_parent_class
= g_type_class_ref(e_event_hook_get_type());
238 type
= g_type_register_static(e_event_hook_get_type(), "EMEventHook", &info
, 0);