Changeset 805
- Timestamp:
- 08/28/06 16:55:06
- Files:
-
- trunk/ChangeLog (modified) (1 diff)
- trunk/docs/devel/reference/tmpl/tny-account-tree-model.sgml (modified) (1 diff)
- trunk/docs/devel/reference/tmpl/tny-attach-list-model.sgml (modified) (1 diff)
- trunk/docs/devel/reference/tmpl/tny-header-list-model.sgml (modified) (1 diff)
- trunk/libtinymail-camel/tny-folder.c (modified) (2 diffs)
- trunk/libtinymail-camel/tny-header.c (modified) (1 diff)
- trunk/libtinymail-camel/tny-mime-part.h (modified) (1 diff)
- trunk/libtinymailui-gtk/tny-attach-list-model-iterator.c (modified) (1 diff)
- trunk/libtinymailui-gtk/tny-attach-list-model.c (modified) (4 diffs)
- trunk/libtinymailui-gtk/tny-header-view.c (modified) (4 diffs)
- trunk/libtinymailui-gtk/tny-msg-view.c (modified) (5 diffs)
- trunk/libtinymailui-gtk/tny-msg-window.c (modified) (1 diff)
- trunk/libtinymailui-mozembed/tny-moz-embed-msg-view.c (modified) (10 diffs)
- trunk/libtinymailui/tny-header-view-iface.c (modified) (1 diff)
- trunk/libtinymailui/tny-header-view-iface.h (modified) (1 diff)
- trunk/libtinymailui/tny-msg-view-iface.c (modified) (3 diffs)
- trunk/libtinymailui/tny-msg-view-iface.h (modified) (2 diffs)
- trunk/tinymail/tny-summary-view.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ChangeLog
r803 r805 3 3 * Added unit tests for TnyFolderStoreQuery 4 4 * Added unit tests for TnyMsgIface 5 5 * Fixed some ugly memory leaks (reference count problems) 6 7 * This was a major API change 8 6 9 2006-08-27 Philip Van Hoof <pvanhoof@gnome.org> 7 10 trunk/docs/devel/reference/tmpl/tny-account-tree-model.sgml
r670 r805 13 13 #GtkTreeView will display the account name as parent row with the 14 14 account-folders as the child rows. 15 </para> 16 <para> 17 It's very important to unreference the instance you will get when doing something like this: 18 <programlisting> 19 TnyFolderface *folder; 20 gtk_tree_model_get (model, &iter, 21 TNY_ACCOUNT_TREE_MODEL_INSTANCE_COLUMN, 22 &folder, -1); 23 /* use folder */ 24 g_object_unref (G_OBJECT(folder)); 25 </programlisting> 26 The column is indeed a G_TYPE_OBJECT column and getting it from the #GtkTreeModel will indeed add a reference. 15 27 </para> 16 28 trunk/docs/devel/reference/tmpl/tny-attach-list-model.sgml
r708 r805 13 13 automatically. 14 14 </para> 15 15 <para> 16 It's very important to unreference the instance you will get when doing something like this: 17 <programlisting> 18 TnyMimePartIface *part; 19 gtk_tree_model_get (model, &iter, 20 TNY_ATTACH_LIST_MODEL_INSTANCE_COLUMN, 21 &part, -1); 22 /* use part */ 23 g_object_unref (G_OBJECT(partr)); 24 </programlisting> 25 The column is indeed a G_TYPE_OBJECT column and getting it from the #GtkTreeModel will indeed add a reference. 26 </para> 16 27 <!-- ##### SECTION See_Also ##### --> 17 28 <para> trunk/docs/devel/reference/tmpl/tny-header-list-model.sgml
r717 r805 11 11 #GtkTreeView become invisible. This reduces memory usage. 12 12 </para> 13 13 <para> 14 It's very important to unreference the instance you will get when doing something like this: 15 <programlisting> 16 TnyHeaderIface *header; 17 gtk_tree_model_get (model, &iter, 18 TNY_HEADER_LIST_MODEL_INSTANCE_COLUMN, 19 &header, -1); 20 /* use header */ 21 g_object_unref (G_OBJECT(header)); 22 </programlisting> 23 The column is indeed a G_TYPE_OBJECT column and getting it from the #GtkTreeModel will indeed add a reference. 24 </para> 14 25 <!-- ##### SECTION See_Also ##### --> 15 26 <para> trunk/libtinymail-camel/tny-folder.c
r804 r805 640 640 /* Also check out tny-msg.c: tny_msg_finalize (read the stupid hack) */ 641 641 _tny_header_set_camel_mime_message (TNY_HEADER (nheader), camel_message); 642 /* _tny_header_set_camel_message_info (TNY_HEADER (header), info, TRUE); */643 642 644 643 tny_msg_iface_set_header (message, nheader); 645 /* strange, g_object_unref (G_OBJECT (header)); should happen here */644 g_object_unref (G_OBJECT (nheader)); 646 645 647 646 } else { … … 897 896 void 898 897 _tny_folder_check_uncache (TnyFolder *self, TnyFolderPriv *priv) 899 { 900 /* printf ("check %d\n", priv->headers_managed); */ 901 898 { 902 899 if (priv->headers_managed == 0) 903 900 tny_folder_uncache (TNY_FOLDER_IFACE (self)); trunk/libtinymail-camel/tny-header.c
r799 r805 470 470 { 471 471 TnyHeader *me = TNY_HEADER (self); 472 fpriv->headers_managed++; 472 473 me->folder = (TnyFolderIface*)folder; 473 fpriv->headers_managed++;474 474 475 return; 475 476 } trunk/libtinymail-camel/tny-mime-part.h
r713 r805 50 50 51 51 52 GType tny_mime_part_get_type(void);52 GType tny_mime_part_get_type (void); 53 53 54 TnyMimePart* tny_mime_part_new(CamelMimePart *part);55 void tny_mime_part_set_part(TnyMimePart *self, CamelMimePart *part);56 CamelMimePart* tny_mime_part_get_part(TnyMimePart *self);54 TnyMimePart* tny_mime_part_new (CamelMimePart *part); 55 void tny_mime_part_set_part (TnyMimePart *self, CamelMimePart *part); 56 CamelMimePart* tny_mime_part_get_part (TnyMimePart *self); 57 57 58 58 G_END_DECLS trunk/libtinymailui-gtk/tny-attach-list-model-iterator.c
r759 r805 176 176 if (retval) 177 177 g_object_ref (G_OBJECT(retval)); 178 178 179 179 return (GObject*)retval; 180 180 } trunk/libtinymailui-gtk/tny-attach-list-model.c
r723 r805 126 126 destroy_parts (gpointer item, gpointer user_data) 127 127 { 128 g_object_unref (G_OBJECT (item)); 128 if (item && G_IS_OBJECT (item)) 129 g_object_unref (G_OBJECT (item)); 130 return; 129 131 } 130 132 … … 203 205 /* Prepend something to the list */ 204 206 g_object_ref (G_OBJECT (item)); 207 205 208 me->first = g_list_prepend (me->first, item); 209 206 210 tny_attach_list_model_add (me, TNY_MIME_PART_IFACE (item), 207 211 gtk_list_store_prepend); … … 219 223 /* Append something to the list */ 220 224 g_object_ref (G_OBJECT (item)); 225 221 226 me->first = g_list_append (me->first, item); 222 227 tny_attach_list_model_add (me, TNY_MIME_PART_IFACE (item), … … 270 275 gtk_list_store_remove (GTK_LIST_STORE (me), &iter); 271 276 g_object_unref (G_OBJECT (item)); 272 273 277 break; 274 278 } trunk/libtinymailui-gtk/tny-header-view.c
r784 r805 65 65 66 66 if (G_LIKELY (priv->header)) 67 g_object_unref (G_OBJECT (priv->header)); 68 69 if (header) 67 g_object_unref (G_OBJECT (priv->header)); 68 priv->header = NULL; 69 70 if (header && G_IS_OBJECT (header)) 70 71 { 71 72 gchar *str; 72 73 g_object_ref (G_OBJECT (header)); 73 74 74 priv->header = header; 75 75 … … 81 81 gtk_label_set_text (GTK_LABEL (priv->date_label), (const gchar*)str); 82 82 g_free (str); 83 } else 84 priv->header = NULL; 85 86 return; 87 } 83 } 84 85 return; 86 } 87 88 89 static void 90 tny_header_view_clear (TnyHeaderViewIface *self) 91 { 92 TnyHeaderViewPriv *priv = TNY_HEADER_VIEW_GET_PRIVATE (self); 93 94 if (G_LIKELY (priv->header)) 95 g_object_unref (G_OBJECT (priv->header)); 96 priv->header = NULL; 97 98 gtk_label_set_text (GTK_LABEL (priv->to_label), ""); 99 gtk_label_set_text (GTK_LABEL (priv->from_label), ""); 100 gtk_label_set_text (GTK_LABEL (priv->subject_label), ""); 101 gtk_label_set_text (GTK_LABEL (priv->date_label), ""); 102 103 return; 104 } 105 88 106 89 107 /** … … 185 203 if (G_LIKELY (priv->header)) 186 204 g_object_unref (G_OBJECT (priv->header)); 187 205 priv->header = NULL; 206 188 207 (*parent_class->finalize) (object); 189 208 … … 197 216 198 217 klass->set_header_func = tny_header_view_set_header; 199 218 klass->clear_func = tny_header_view_clear; 219 200 220 return; 201 221 } trunk/libtinymailui-gtk/tny-msg-view.c
r783 r805 77 77 TnyIteratorIface *iterator; 78 78 gboolean first_attach = TRUE; 79 TnyAttachListModel *model = tny_attach_list_model_new ();; 80 81 g_return_if_fail (priv->msg); 82 83 buffer = gtk_text_view_get_buffer (priv->textview); 79 TnyAttachListModel *model; 80 81 g_return_if_fail (TNY_IS_MSG_IFACE (priv->msg)); 82 83 header = TNY_HEADER_IFACE (tny_msg_iface_get_header (priv->msg)); 84 g_return_if_fail (TNY_IS_HEADER_IFACE (header)); 85 tny_header_view_iface_set_header (priv->headerview, header); 86 g_object_unref (G_OBJECT (header)); 87 88 buffer = gtk_text_view_get_buffer (priv->textview); 84 89 dest = TNY_STREAM_IFACE (tny_text_buffer_stream_new (buffer)); 85 header = TNY_HEADER_IFACE (tny_msg_iface_get_header (priv->msg)); 86 87 g_return_if_fail (header); 88 90 91 model = tny_attach_list_model_new (); 89 92 tny_msg_iface_get_parts (priv->msg, TNY_LIST_IFACE (model)); 90 93 iterator = tny_list_iface_create_iterator (TNY_LIST_IFACE (model)); … … 93 96 gtk_text_buffer_set_text (buffer, "", 0); 94 97 95 tny_header_view_iface_set_header (priv->headerview, header);96 g_object_unref (G_OBJECT (header));97 98 98 99 gtk_widget_show (GTK_WIDGET (priv->headerview)); … … 127 128 } 128 129 129 g_object_unref (G_OBJECT (header));130 130 g_object_unref (G_OBJECT (model)); 131 131 … … 227 227 228 228 static void 229 tny_msg_view_set_unavailable (TnyMsgViewIface *self , TnyHeaderIface *header)229 tny_msg_view_set_unavailable (TnyMsgViewIface *self) 230 230 { 231 231 TnyMsgViewPriv *priv = TNY_MSG_VIEW_GET_PRIVATE (self); … … 242 242 gtk_text_buffer_set_text (buffer, _("Message is unavailable"), -1); 243 243 244 if (header) 245 { 246 tny_header_view_iface_set_header (priv->headerview, header); 247 gtk_widget_show (GTK_WIDGET (priv->headerview)); 248 } else { 249 gtk_widget_hide (GTK_WIDGET (priv->headerview)); 250 } 244 tny_header_view_iface_clear (priv->headerview); 245 gtk_widget_hide (GTK_WIDGET (priv->headerview)); 251 246 252 247 return; trunk/libtinymailui-gtk/tny-msg-window.c
r760 r805 47 47 48 48 static void 49 tny_msg_window_set_unavailable (TnyMsgViewIface *self , TnyHeaderIface *header)50 { 51 TnyMsgWindowPriv *priv = TNY_MSG_WINDOW_GET_PRIVATE (self); 52 53 tny_msg_view_iface_set_unavailable (priv->msg_view , header);49 tny_msg_window_set_unavailable (TnyMsgViewIface *self) 50 { 51 TnyMsgWindowPriv *priv = TNY_MSG_WINDOW_GET_PRIVATE (self); 52 53 tny_msg_view_iface_set_unavailable (priv->msg_view); 54 54 55 55 return; trunk/libtinymailui-mozembed/tny-moz-embed-msg-view.c
r783 r805 93 93 TnyIteratorIface *iterator; 94 94 gboolean first_attach = TRUE; 95 TnyAttachListModel *model = tny_attach_list_model_new ();;95 TnyAttachListModel *model; 96 96 gboolean have_html = FALSE; 97 97 98 g_return_if_fail (priv->msg); 99 100 buffer = gtk_text_view_get_buffer (priv->textview); 98 tny_header_view_iface_clear (TNY_HEADER_VIEW_IFACE (priv->headerview)); 99 100 g_return_if_fail (TNY_IS_MSG_IFACE (priv->msg)); 101 102 header = TNY_HEADER_IFACE (tny_msg_iface_get_header (priv->msg)); 103 g_return_if_fail (TNY_IS_HEADER_IFACE (header)); 104 tny_header_view_iface_set_header (priv->headerview, header); 105 g_object_unref (G_OBJECT (header)); 106 107 108 buffer = gtk_text_view_get_buffer (priv->textview); 101 109 dest = TNY_STREAM_IFACE (tny_text_buffer_stream_new (buffer)); 102 header = TNY_HEADER_IFACE (tny_msg_iface_get_header (priv->msg)); 103 104 g_return_if_fail (header); 105 110 111 model = tny_attach_list_model_new ();; 106 112 tny_msg_iface_get_parts (priv->msg, TNY_LIST_IFACE (model)); 107 113 iterator = tny_list_iface_create_iterator (TNY_LIST_IFACE (model)); … … 109 115 110 116 gtk_text_buffer_set_text (buffer, "", 0); 111 112 tny_header_view_iface_set_header (priv->headerview, header);113 g_object_unref (G_OBJECT (header));114 115 117 gtk_widget_show (GTK_WIDGET (priv->headerview)); 116 118 … … 169 171 } 170 172 171 g_object_unref (G_OBJECT (header));172 173 g_object_unref (G_OBJECT (model)); 173 174 … … 183 184 if (priv->save_strategy) 184 185 g_object_unref (G_OBJECT (priv->save_strategy)); 185 186 priv->save_strategy = NULL; 187 186 188 g_object_ref (G_OBJECT (strategy)); 187 189 priv->save_strategy = strategy; … … 191 193 192 194 static void 193 tny_mozembed_msg_view_set_unavailable (TnyMsgViewIface *self , TnyHeaderIface *header)195 tny_mozembed_msg_view_set_unavailable (TnyMsgViewIface *self) 194 196 { 195 197 TnyMozEmbedMsgViewPriv *priv = TNY_MOZ_EMBED_MSG_VIEW_GET_PRIVATE (self); … … 209 211 gtk_text_buffer_set_text (buffer, _("Message is unavailable"), -1); 210 212 211 if (header) 212 { 213 tny_header_view_iface_set_header (priv->headerview, header); 214 215 gtk_widget_show (GTK_WIDGET (priv->headerview)); 216 } else { 217 gtk_widget_hide (GTK_WIDGET (priv->headerview)); 218 } 213 tny_header_view_iface_clear (priv->headerview); 214 gtk_widget_hide (GTK_WIDGET (priv->headerview)); 219 215 220 216 … … 308 304 if (G_LIKELY (priv->msg)) 309 305 g_object_unref (G_OBJECT (priv->msg)); 306 priv->msg = NULL; 310 307 311 308 if (msg) … … 325 322 gtk_widget_hide (priv->attachview_sw); 326 323 gtk_text_buffer_set_text (buffer, "", 0); 327 tny_header_view_iface_ set_header (priv->headerview, NULL);324 tny_header_view_iface_clear (priv->headerview); 328 325 gtk_widget_hide (GTK_WIDGET (priv->headerview)); 329 326 … … 357 354 358 355 priv->save_strategy = NULL; 359 356 priv->msg = NULL; 357 360 358 gtk_scrolled_window_set_hadjustment (GTK_SCROLLED_WINDOW (self), NULL); 361 359 gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW (self), NULL); … … 433 431 if (G_LIKELY (priv->msg)) 434 432 g_object_unref (G_OBJECT (priv->msg)); 435 433 priv->msg = NULL; 434 436 435 if (G_LIKELY (priv->save_strategy)) 437 436 g_object_unref (G_OBJECT (priv->save_strategy)); 438 439 /*if (G_LIKELY (priv->headerview)) 440 g_object_unref (G_OBJECT (priv->headerview));*/ 441 437 priv->save_strategy = NULL; 438 439 if (G_LIKELY (priv->headerview)) 440 { 441 tny_header_view_iface_clear (priv->headerview); 442 /* g_object_unref (G_OBJECT (priv->headerview)); */ 443 } 444 442 445 (*parent_class->finalize) (object); 443 446 trunk/libtinymailui/tny-header-view-iface.c
r715 r805 22 22 #include <tny-header-view-iface.h> 23 23 24 void 25 tny_header_view_iface_clear (TnyHeaderViewIface *self) 26 { 27 #ifdef DEBUG 28 if (!TNY_HEADER_VIEW_IFACE_GET_CLASS (self)->clear_func) 29 g_critical ("You must implement tny_header_view_iface_clear\n"); 30 #endif 31 32 TNY_HEADER_VIEW_IFACE_GET_CLASS (self)->clear_func (self); 33 return; 34 } 24 35 25 36 trunk/libtinymailui/tny-header-view-iface.h
r715 r805 43 43 GTypeInterface parent; 44 44 45 void (*set_header_func) (TnyHeaderViewIface *self, TnyHeaderIface *header); 45 void (*set_header_func) (TnyHeaderViewIface *self, TnyHeaderIface *header); 46 void (*clear_func) (TnyHeaderViewIface *self); 46 47 }; 47 48 48 GType tny_header_view_iface_get_type (void);49 GType tny_header_view_iface_get_type (void); 49 50 50 void tny_header_view_iface_set_header (TnyHeaderViewIface *self, TnyHeaderIface *header); 51 void tny_header_view_iface_set_header (TnyHeaderViewIface *self, TnyHeaderIface *header); 52 void tny_header_view_iface_clear (TnyHeaderViewIface *self); 51 53 52 54 trunk/libtinymailui/tny-msg-view-iface.c
r783 r805 46 46 * tny_msg_view_iface_set_unavailable: 47 47 * @self: A #TnyMsgViewIface instance 48 * @header: a #TnyHeaderIface instance or NULL49 48 * 50 49 * Set the view to display the fact that the message was unavailable … … 52 51 **/ 53 52 void 54 tny_msg_view_iface_set_unavailable (TnyMsgViewIface *self , TnyHeaderIface *header)53 tny_msg_view_iface_set_unavailable (TnyMsgViewIface *self) 55 54 { 56 55 #ifdef DEBUG … … 59 58 #endif 60 59 61 TNY_MSG_VIEW_IFACE_GET_CLASS (self)->set_unavailable_func (self , header);60 TNY_MSG_VIEW_IFACE_GET_CLASS (self)->set_unavailable_func (self); 62 61 return; 63 62 } trunk/libtinymailui/tny-msg-view-iface.h
r783 r805 46 46 void (*set_msg_func) (TnyMsgViewIface *self, TnyMsgIface *msg); 47 47 void (*set_save_strategy_func) (TnyMsgViewIface *self, TnySaveStrategyIface *strategy); 48 void (*set_unavailable_func) (TnyMsgViewIface *self , TnyHeaderIface *header);48 void (*set_unavailable_func) (TnyMsgViewIface *self); 49 49 void (*clear_func) (TnyMsgViewIface *self); 50 50 … … 55 55 void tny_msg_view_iface_set_msg (TnyMsgViewIface *self, TnyMsgIface *msg); 56 56 void tny_msg_view_iface_set_save_strategy (TnyMsgViewIface *self, TnySaveStrategyIface *strategy); 57 void tny_msg_view_iface_set_unavailable (TnyMsgViewIface *self , TnyHeaderIface *header);57 void tny_msg_view_iface_set_unavailable (TnyMsgViewIface *self); 58 58 void tny_msg_view_iface_clear (TnyMsgViewIface *self); 59 59 trunk/tinymail/tny-summary-view.c
r794 r805 291 291 292 292 gtk_widget_destroy (dialog); 293 g_object_unref (G_OBJECT (header)); 293 294 } 294 295 } … … 315 316 TNY_HEADER_LIST_MODEL_INSTANCE_COLUMN, 316 317 &header, -1); 317 318 318 319 if (G_LIKELY (header)) 319 320 { 320 321 321 TnyFolderIface *folder; 322 322 TnyMsgIface *msg; … … 329 329 { 330 330 tny_msg_view_iface_set_msg (priv->msg_view, TNY_MSG_IFACE (msg)); 331 /* Reparent */332 331 g_object_unref (G_OBJECT (msg)); 333 332 } else { 334 tny_msg_view_iface_set_unavailable (priv->msg_view, header); 335 /* Reparent */ 336 g_object_unref (G_OBJECT (header)); 333 tny_msg_view_iface_set_unavailable (priv->msg_view); 337 334 } 338 335 g_object_unref (G_OBJECT (folder)); 339 336 } 340 337 338 g_object_unref (G_OBJECT (header)); 339 341 340 } else { 342 tny_msg_view_iface_set_unavailable (priv->msg_view , NULL);341 tny_msg_view_iface_set_unavailable (priv->msg_view); 343 342 } 344 343 } … … 466 465 refresh_current_folder (folder, FALSE, user_data); 467 466 #endif 467 468 g_object_unref (G_OBJECT (folder)); 468 469 } 469 470 … … 518 519 tny_platform_factory_iface_new_msg_view (platfact))); 519 520 520 tny_msg_view_iface_set_unavailable (TNY_MSG_VIEW_IFACE (msgwin) , header);521 tny_msg_view_iface_set_unavailable (TNY_MSG_VIEW_IFACE (msgwin)); 521 522 522 523 gtk_widget_show (GTK_WIDGET (msgwin)); … … 524 525 g_object_unref (G_OBJECT (folder)); 525 526 } 526 527 g_object_unref (G_OBJECT (header)); 527 528 } 528 529 }
