static void
on_item_new_response (GtkDialog *dialog,
                      gint       responseid,
                      ItemNew   *item)
{
	gchar *name = NULL;

	if (responseid == GTK_RESPONSE_OK)
	{
		const gchar *text = gtk_entry_get_text (item->entry);

		if (!*text)
		{
			return;
		}

		name = g_strdup (text);
	}

	gtk_widget_destroy (GTK_WIDGET (dialog));

	if (name)
	{
		InfcBrowserIter parent = item->iter;

		if (!infc_browser_iter_is_subdirectory (item->browser, &parent))
		{
			infc_browser_iter_get_parent (item->browser, &parent);
		}

		if (item->newfile)
		{
			InfcNotePlugin *plugin;
			plugin = gedit_collaboration_manager_get_note_plugin (item->helper->priv->manager);

			infc_browser_add_note (item->browser,
			                       &parent,
			                       name,
			                       plugin,
			                       FALSE);
		}
		else
		{
			infc_browser_add_subdirectory (item->browser,
			                               &parent,
			                               name);
		}
	}

	g_free (name);

	g_object_unref (item->browser);

	g_slice_free (ItemNew, item);
}
/* Copied from gobby: code/core/browser.cpp */
static gint
compare_func (GtkTreeModel *model,
              GtkTreeIter  *first,
              GtkTreeIter  *second,
              gpointer      user_data)
{
	gint result;
	InfcBrowser *br_one;
	InfcBrowser *br_two;
	InfcBrowserIter *bri_one;
	InfcBrowserIter *bri_two;
	GtkTreeIter parent;

	result = 0;

	if (gtk_tree_model_iter_parent (model, &parent, first))
	{
		g_assert (gtk_tree_model_iter_parent (model, &parent, second));

		gtk_tree_model_get (model,
		                   first,
		                   INF_GTK_BROWSER_MODEL_COL_BROWSER,
		                   &br_one,
		                   INF_GTK_BROWSER_MODEL_COL_NODE,
		                   &bri_one,
		                   -1);

		gtk_tree_model_get (model,
		                    second,
		                    INF_GTK_BROWSER_MODEL_COL_BROWSER,
		                    &br_two,
		                    INF_GTK_BROWSER_MODEL_COL_NODE,
		                    &bri_two,
		                    -1);

		if (infc_browser_iter_is_subdirectory (br_one, bri_one) &&
		   !infc_browser_iter_is_subdirectory (br_two, bri_two))
		{
			result = -1;
		}
		else if (!infc_browser_iter_is_subdirectory(br_one, bri_one) &&
		          infc_browser_iter_is_subdirectory(br_two, bri_two))
		{
			result = 1;
		}

		g_object_unref (br_one);
		g_object_unref (br_two);

		infc_browser_iter_free (bri_one);
		infc_browser_iter_free (bri_two);
	}

	if (!result)
	{
		gchar* name_one;
		gchar* name_two;

		gtk_tree_model_get (model,
		                    first,
		                    INF_GTK_BROWSER_MODEL_COL_NAME,
		                    &name_one,
		                    -1);

		gtk_tree_model_get (model,
		                    second,
		                    INF_GTK_BROWSER_MODEL_COL_NAME,
		                    &name_two,
		                    -1);

		gchar* one = g_utf8_casefold (name_one, -1);
		gchar* two = g_utf8_casefold (name_two, -1);

		result = g_utf8_collate (one, two);

		g_free (name_one);
		g_free (name_two);
		g_free (one);
		g_free (two);
	}

	return result;
}
static void
on_browser_activate (InfGtkBrowserView              *view,
                     GtkTreeIter                    *iter,
                     GeditCollaborationWindowHelper *helper)
{
	InfcBrowser *browser;
	InfcBrowserIter *browser_iter;
	InfDiscovery *discovery;
	GeditCollaborationUser *user;
	GtkTreeIter selected;

	gtk_tree_model_sort_convert_iter_to_child_iter (
		GTK_TREE_MODEL_SORT (inf_gtk_browser_view_get_model (view)),
		&selected,
		iter
	);

	gtk_tree_model_get (GTK_TREE_MODEL (helper->priv->browser_store),
	                    &selected,
	                    INF_GTK_BROWSER_MODEL_COL_BROWSER,
	                    &browser,
	                    INF_GTK_BROWSER_MODEL_COL_DISCOVERY,
	                    &discovery,
	                    -1);

	if (browser == NULL)
	{
		if (discovery)
		{
			g_object_unref (discovery);
		}

		return;
	}

	gtk_tree_model_get (GTK_TREE_MODEL (helper->priv->browser_store),
	                    &selected,
	                    INF_GTK_BROWSER_MODEL_COL_NODE,
	                    &browser_iter,
	                    -1);

	if (browser_iter == NULL ||
	    infc_browser_iter_is_subdirectory (browser, browser_iter))
	{
		g_object_unref (browser);

		if (browser_iter)
		{
			infc_browser_iter_free (browser_iter);
		}

		if (discovery)
		{
			g_object_unref (discovery);
		}

		return;
	}

	if (discovery)
	{
		user = gedit_collaboration_user_get_default ();
	}
	else
	{
		GeditCollaborationBookmark *bookmark;

		bookmark = g_object_get_data (G_OBJECT (infc_browser_get_connection (browser)),
		                              BOOKMARK_DATA_KEY);

		user = gedit_collaboration_bookmark_get_user (bookmark);
	}

	gedit_collaboration_manager_subscribe (helper->priv->manager,
	                                       user,
	                                       browser,
	                                       browser_iter);

	if (discovery)
	{
		g_object_unref (discovery);
	}

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