Fixed some reference leaks of attachments. I also moved from using
[modest] / src / widgets / modest-msg-view.c
1 /* Copyright (c) 2006, Nokia Corporation
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  *   notice, this list of conditions and the following disclaimer in the
12  *   documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Nokia Corporation nor the names of its
14  *   contributors may be used to endorse or promote products derived from
15  *   this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #include <config.h>
31
32 #include <widgets/modest-msg-view.h>
33 #include <widgets/modest-isearch-view.h>
34
35 enum {
36         ATTACHMENT_CLICKED_SIGNAL,
37         RECPT_ACTIVATED_SIGNAL,
38         LINK_CONTEXTUAL_SIGNAL,
39         LAST_SIGNAL
40 };
41 static guint signals[LAST_SIGNAL] = {0};
42
43 GtkAdjustment*
44 modest_msg_view_get_vadjustment (ModestMsgView *self)
45 {
46         return MODEST_MSG_VIEW_GET_IFACE (self)->get_vadjustment_func (self);
47 }
48
49 GtkAdjustment*
50 modest_msg_view_get_hadjustment (ModestMsgView *self)
51 {
52         return MODEST_MSG_VIEW_GET_IFACE (self)->get_hadjustment_func (self);
53 }
54
55 void
56 modest_msg_view_set_vadjustment (ModestMsgView *self, GtkAdjustment *vadj)
57 {
58         MODEST_MSG_VIEW_GET_IFACE (self)->set_vadjustment_func (self, vadj);
59 }
60
61 void
62 modest_msg_view_set_hadjustment (ModestMsgView *self, GtkAdjustment *hadj)
63 {
64         MODEST_MSG_VIEW_GET_IFACE (self)->set_hadjustment_func (self, hadj);
65 }
66
67 void
68 modest_msg_view_set_shadow_type (ModestMsgView *self, GtkShadowType type)
69 {
70         MODEST_MSG_VIEW_GET_IFACE (self)->set_shadow_type_func (self, type);
71 }
72
73 GtkShadowType
74 modest_msg_view_get_shadow_type (ModestMsgView *self)
75 {
76         return MODEST_MSG_VIEW_GET_IFACE (self)->get_shadow_type_func (self);
77 }
78
79 TnyHeaderFlags
80 modest_msg_view_get_priority (ModestMsgView *self)
81 {
82         return MODEST_MSG_VIEW_GET_IFACE (self)->get_priority_func (self);
83 }
84
85 void
86 modest_msg_view_set_priority (ModestMsgView *self, TnyHeaderFlags flags)
87 {
88         MODEST_MSG_VIEW_GET_IFACE (self)->set_priority_func (self, flags);
89 }
90
91 TnyList*
92 modest_msg_view_get_selected_attachments (ModestMsgView *self)
93 {
94         return MODEST_MSG_VIEW_GET_IFACE (self)->get_selected_attachments_func (self);
95 }
96
97 TnyList*
98 modest_msg_view_get_attachments (ModestMsgView *self)
99 {
100         return MODEST_MSG_VIEW_GET_IFACE (self)->get_attachments_func (self);
101 }
102
103 void
104 modest_msg_view_grab_focus (ModestMsgView *self)
105 {
106         MODEST_MSG_VIEW_GET_IFACE (self)->grab_focus_func (self);
107 }
108
109 void
110 modest_msg_view_remove_attachment (ModestMsgView *self, TnyMimePart *attachment)
111 {
112         MODEST_MSG_VIEW_GET_IFACE (self)->remove_attachment_func (self, attachment);
113 }
114
115 static void
116 modest_msg_view_base_init (gpointer g_class)
117 {
118         static gboolean initialized = FALSE;
119
120         if (!initialized) {
121                 
122                 signals[ATTACHMENT_CLICKED_SIGNAL] =
123                         g_signal_new ("attachment_clicked",
124                                       MODEST_TYPE_MSG_VIEW,
125                                       G_SIGNAL_RUN_FIRST,
126                                       G_STRUCT_OFFSET(ModestMsgViewIface, attachment_clicked),
127                                       NULL, NULL,
128                                       g_cclosure_marshal_VOID__OBJECT,
129                                       G_TYPE_NONE, 1, G_TYPE_OBJECT);
130                 
131                 signals[RECPT_ACTIVATED_SIGNAL] =
132                         g_signal_new ("recpt_activated",
133                                       MODEST_TYPE_MSG_VIEW,
134                                       G_SIGNAL_RUN_FIRST,
135                                       G_STRUCT_OFFSET(ModestMsgViewIface, recpt_activated),
136                                       NULL, NULL,
137                                       g_cclosure_marshal_VOID__STRING,
138                                       G_TYPE_NONE, 1, G_TYPE_STRING);
139                 
140                 signals[LINK_CONTEXTUAL_SIGNAL] =
141                         g_signal_new ("link_contextual",
142                                       MODEST_TYPE_MSG_VIEW,
143                                       G_SIGNAL_RUN_FIRST,
144                                       G_STRUCT_OFFSET(ModestMsgViewIface, link_contextual),
145                                       NULL, NULL,
146                                       g_cclosure_marshal_VOID__STRING,
147                                       G_TYPE_NONE, 1, G_TYPE_STRING);
148                 
149                 initialized = TRUE;
150         }
151 }
152
153 GType
154 modest_msg_view_get_type (void)
155 {
156         static GType my_type = 0;
157         if (!my_type) {
158                 static const GTypeInfo my_info = {
159                         sizeof(ModestMsgViewIface),
160                         modest_msg_view_base_init,   /* base init */
161                         NULL,           /* base finalize */
162                         NULL,           /* class_init */
163                         NULL,           /* class finalize */
164                         NULL,           /* class data */
165                         0,
166                         0,              /* n_preallocs */
167                         NULL,           /* instance_init */
168                         NULL
169                 };
170
171                 my_type = g_type_register_static (G_TYPE_INTERFACE,
172                                                   "ModestMsgView",
173                                                   &my_info, 0);
174
175                 g_type_interface_add_prerequisite (my_type,
176                                                    MODEST_TYPE_ZOOMABLE);
177                 g_type_interface_add_prerequisite (my_type,
178                                                    MODEST_TYPE_ISEARCH_VIEW);
179                 g_type_interface_add_prerequisite (my_type,
180                                                    TNY_TYPE_MIME_PART_VIEW);
181                 g_type_interface_add_prerequisite (my_type,
182                                                    MODEST_TYPE_MIME_PART_VIEW);
183
184         }
185         return my_type;
186 }