Crash after folder update



Hi,

i tried to write some code to update all subscribed folders. It turned out that
the application crashes after calling tny_store_account_iface_get_folders()
whenever you change the currently displayed folder.

The attached patch against #525 can be used to reproduce this behaviour. Maybe
i'm just doing something wrong, but it looks pretty easy...

Greetings

Florian

-- 
The dream of yesterday                  Florian Boor
is the hope of today                    Tel: +49 271-771091-14
and the reality of tomorrow.            Fax: +49 271-771091-19
[Robert Hutchings Goddard, 1904]        florian boor kernelconcepts de

1D78 2D4D 6C53 1CA4 5588  D07B A8E7 940C 25B7 9A76
Index: tinymail/tny-summary-window.c
===================================================================
--- tinymail/tny-summary-window.c	(Revision 525)
+++ tinymail/tny-summary-window.c	(Arbeitskopie)
@@ -532,6 +532,46 @@
 	return self;
 }
 
+void
+update_folders (GtkWidget *btn, gpointer udata)
+{
+	TnySummaryWindow *win = udata;
+	const TnyListIface* folders;
+	TnyIteratorIface* ifolders;
+	const TnyMsgFolderIface *cur_folder;
+	TnySummaryWindowPriv *priv = TNY_SUMMARY_WINDOW_GET_PRIVATE (win);
+	const GList *store_accounts;
+	const GList *iter;
+	
+	
+	store_accounts =
+		tny_account_store_iface_get_store_accounts (priv->account_store);
+		
+	for (iter = store_accounts; iter; iter = iter->next) {
+		TnyStoreAccountIface *storage_account = iter->data;
+		const TnyListIface* l_folders;
+		TnyIteratorIface* ifolders;
+		const TnyMsgFolderIface *cur_folder;
+		l_folders = tny_store_account_iface_get_folders (storage_account, 
+							       TNY_STORE_ACCOUNT_FOLDER_TYPE_SUBSCRIBED);
+		
+/*		ifolders = tny_list_iface_create_iterator (l_folders);
+		
+		for (cur_folder = TNY_MSG_FOLDER_IFACE(tny_iterator_iface_first (ifolders)); 
+		     tny_iterator_iface_has_next (ifolders); 
+		     tny_iterator_iface_next (ifolders)) {
+			
+			cur_folder = TNY_MSG_FOLDER_IFACE(tny_iterator_iface_current (ifolders));
+			tny_msg_folder_iface_refresh (cur_folder);
+		}
+		
+		g_object_unref (ifolders);
+
+*/	}
+	
+}
+
+
 static void
 tny_summary_window_instance_init (GTypeInstance *instance, gpointer g_class)
 {
@@ -550,6 +590,7 @@
 	GtkWidget *hpaned1;
 	GtkWidget *vpaned1;
 	GtkWidget *vbox;
+	GtkWidget *bupdate;
 	
 	/* TODO: Persist application UI status (of the panes) */
 
@@ -564,20 +605,22 @@
 	hpaned1 = gtk_hpaned_new ();
 	gtk_widget_show (hpaned1);
 	vbox = gtk_vbox_new (FALSE, 2);
+	bupdate = gtk_button_new_with_label ("Update");
 	priv->status = GTK_WIDGET (gtk_statusbar_new ());
 	priv->progress = gtk_progress_bar_new ();
 	priv->status_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (priv->status), "default");
 
 	gtk_box_pack_start (GTK_BOX (priv->status), priv->progress, FALSE, FALSE, 0);
 	gtk_box_pack_start (GTK_BOX (priv->status), priv->online_button, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX (priv->status), bupdate, FALSE, FALSE, 0);
 
 	gtk_widget_show (priv->online_button);
 	gtk_widget_show (priv->status);
-	gtk_widget_show (vbox);
 
 	gtk_container_add (GTK_CONTAINER (window), vbox);
 	gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hpaned1), TRUE, TRUE, 0);
 	gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (priv->status), FALSE, TRUE, 0);
+	gtk_widget_show_all (vbox);
 
 	vpaned1 = gtk_vpaned_new ();
 	gtk_widget_show (vpaned1);
@@ -702,6 +745,8 @@
 	g_signal_connect (G_OBJECT (select), "changed",
 		G_CALLBACK (on_header_view_tree_selection_changed), self);
 
+	g_signal_connect (G_OBJECT (bupdate), "clicked",
+		G_CALLBACK (update_folders), self);
 
 	/* TODO: Persist application UI status */
 	gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]