static void
init_bookmarks (GeditCollaborationWindowHelper *helper)
{
	GeditCollaborationBookmarks *bookmarks;
	GList *item;

	bookmarks = gedit_collaboration_bookmarks_get_default ();
	item = gedit_collaboration_bookmarks_get_bookmarks (bookmarks);

	while (item)
	{
		GeditCollaborationBookmark *bookmark = item->data;

		bookmark_added (helper, bookmark);
		item = g_list_next (item);
	}

	helper->priv->added_handler_id =
		g_signal_connect (bookmarks,
		                  "added",
		                  G_CALLBACK (on_bookmark_added),
		                  helper);

	helper->priv->removed_handler_id =
		g_signal_connect (bookmarks,
		                  "removed",
		                  G_CALLBACK (on_bookmark_removed),
		                  helper);
}
static void
gedit_collaboration_window_helper_finalize (GObject *object)
{
	GeditCollaborationWindowHelper *helper;
	GeditCollaborationBookmarks *bookmarks;

	helper = GEDIT_COLLABORATION_WINDOW_HELPER (object);
	bookmarks = gedit_collaboration_bookmarks_get_default ();

	if (helper->priv->added_handler_id)
	{
		g_signal_handler_disconnect (bookmarks, helper->priv->added_handler_id);
	}

	if (helper->priv->removed_handler_id)
	{
		g_signal_handler_disconnect (bookmarks, helper->priv->removed_handler_id);
	}

	if (helper->priv->io)
	{
		g_object_unref (helper->priv->io);
	}

	if (helper->priv->certificate_credentials)
	{
		inf_certificate_credentials_unref (helper->priv->certificate_credentials);
	}

	if (helper->priv->builder)
	{
		g_object_unref (helper->priv->builder);
	}

	G_OBJECT_CLASS (gedit_collaboration_window_helper_parent_class)->finalize (object);
}
void
on_action_item_delete (GtkAction                      *action,
                       GeditCollaborationWindowHelper *helper)
{
	GtkTreeIter iter;
	GtkTreeIter selected;
	InfcBrowser *browser;
	InfcBrowserIter *browser_iter;
	InfcBrowserIter parent;

	if (!inf_gtk_browser_view_get_selected (INF_GTK_BROWSER_VIEW (helper->priv->browser_view),
	                                        &selected))
	{
		return;
	}

	gtk_tree_model_sort_convert_iter_to_child_iter (
		GTK_TREE_MODEL_SORT (
			gtk_tree_view_get_model (
				GTK_TREE_VIEW (helper->priv->browser_view)
			)
		),
		&iter,
		&selected
	);

	gtk_tree_model_get (GTK_TREE_MODEL (helper->priv->browser_store),
	                    &iter,
	                    INF_GTK_BROWSER_MODEL_COL_BROWSER,
	                    &browser,
	                    INF_GTK_BROWSER_MODEL_COL_NODE,
	                    &browser_iter,
	                    -1);

	parent = *browser_iter;

	if (!infc_browser_iter_get_parent (browser, &parent))
	{
		/* Toplevel bookmark */
		InfXmlConnection *connection = infc_browser_get_connection (browser);
		GeditCollaborationBookmarks *bookmarks;
		GeditCollaborationBookmark *bookmark =
			g_object_get_data (G_OBJECT (connection),
			                   BOOKMARK_DATA_KEY);

		/* Close connection first */
		if (infc_browser_get_status (browser) != INFC_BROWSER_DISCONNECTED)
		{
			inf_xml_connection_close (connection);
		}

		inf_gtk_browser_store_remove_connection (helper->priv->browser_store,
		                                         connection);

		bookmarks = gedit_collaboration_bookmarks_get_default ();
		gedit_collaboration_bookmarks_remove (bookmarks, bookmark);
	}
	else
	{
		/* Remove the iter itself */
		infc_browser_remove_node (browser, browser_iter);
	}

	g_object_unref (browser);

	if (browser_iter)
	{
		infc_browser_iter_free (browser_iter);
	}
}