# HG changeset patch
# Node ID 0d32af43de46
# Parent  b87a01be99af
diff --git a/ChangeLog.API b/ChangeLog.API
--- a/ChangeLog.API
+++ b/ChangeLog.API
@@ -681,15 +681,30 @@
 		* purple_request_fields_get_autosensitive
 		* purple_request_fields_get_ui_data
 		* purple_request_fields_set_ui_data
+		* PurpleRoomlist
+		* PurpleRoomlistField
+		* PurpleRoomlistFieldType
 		* PurpleRoomlistRoomType
+		* PurpleRoomlistUiOps
+		* purple_roomlist_cancel_get_list
 		* purple_roomlist_expand_category
 		* purple_roomlist_field_get_field_type
 		* purple_roomlist_field_get_hidden
 		* purple_roomlist_field_get_label
 		* purple_roomlist_field_new
 		* purple_roomlist_get_fields
+		* purple_roomlist_get_in_progress
+		* purple_roomlist_get_list
 		* purple_roomlist_get_protocol_data
+		* purple_roomlist_get_ui_ops
+		* purple_roomlist_new
+		* purple_roomlist_room_add
+		* purple_roomlist_room_get_name
+		* purple_roomlist_set_fields
+		* purple_roomlist_set_in_progress
 		* purple_roomlist_set_protocol_data
+		* purple_roomlist_set_ui_ops
+		* purple_roomlist_show_with_account
 		* purple_running_osx
 		* purple_serv_add_deny
 		* purple_serv_add_permit
diff --git a/libpurple/meson.build b/libpurple/meson.build
--- a/libpurple/meson.build
+++ b/libpurple/meson.build
@@ -76,12 +76,10 @@
 	'purpleprotocolfiletransfer.c',
 	'purpleprotocolmanager.c',
 	'purpleprotocolmedia.c',
-	'purpleprotocolroomlist.c',
 	'purpleprotocolroster.c',
 	'purpleprotocolserver.c',
 	'purpleprotocolwhiteboard.c',
 	'purpleproxyinfo.c',
-	'purpleroomlistroom.c',
 	'purplesavedpresence.c',
 	'purplesqlite3.c',
 	'purplesqlitehistoryadapter.c',
@@ -105,7 +103,6 @@
 	'request/purplerequestgroup.c',
 	'request/purplerequestpage.c',
 	'request-datasheet.c',
-	'roomlist.c',
 	'server.c',
 	'signals.c',
 	'util.c',
@@ -187,12 +184,10 @@
 	'purpleprotocolfiletransfer.h',
 	'purpleprotocolmedia.h',
 	'purpleprotocolmanager.h',
-	'purpleprotocolroomlist.h',
 	'purpleprotocolroster.h',
 	'purpleprotocolserver.h',
 	'purpleprotocolwhiteboard.h',
 	'purpleproxyinfo.h',
-	'purpleroomlistroom.h',
 	'purplesavedpresence.h',
 	'purplesqlite3.h',
 	'purplesqlitehistoryadapter.h',
@@ -206,7 +201,6 @@
 	'purplewhiteboarduiops.h',
 	'request.h',
 	'request-datasheet.h',
-	'roomlist.h',
 	'server.h',
 	'signals.h',
 	'util.h',
@@ -293,7 +287,6 @@
 	'purpleprotocol.h',
 	'purpleproxyinfo.h',
 	'purpletyping.h',
-	'roomlist.h',
 	'xmlnode.h'
 ]
 
diff --git a/libpurple/purpleprotocolroomlist.h b/libpurple/purpleprotocolroomlist.h
deleted file mode 100644
--- a/libpurple/purpleprotocolroomlist.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Purple - Internet Messaging Library
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this library; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION)
-# error "only <purple.h> may be included directly"
-#endif
-
-#ifndef PURPLE_PROTOCOL_ROOMLIST_H
-#define PURPLE_PROTOCOL_ROOMLIST_H
-
-#include <glib.h>
-
-#include "connection.h"
-#include "roomlist.h"
-#include "purpleprotocol.h"
-#include "purpleversion.h"
-
-G_BEGIN_DECLS
-
-#define PURPLE_TYPE_PROTOCOL_ROOMLIST (purple_protocol_roomlist_get_type())
-
-PURPLE_AVAILABLE_IN_3_0
-G_DECLARE_INTERFACE(PurpleProtocolRoomlist, purple_protocol_roomlist, PURPLE,
-                    PROTOCOL_ROOMLIST, PurpleProtocol)
-
-/**
- * PurpleProtocolRoomlist:
- *
- * The protocol roomlist interface.
- *
- * #PurpleProtocolRoomlist is an interface to abstract how to handle room
- * lists at the protocol level.
- *
- * Since: 3.0
- */
-struct _PurpleProtocolRoomlistInterface {
-	/*< private >*/
-	GTypeInterface parent_iface;
-
-	/*< public >*/
-	PurpleRoomlist *(*get_list)(PurpleProtocolRoomlist *protocol_roomlist, PurpleConnection *gc);
-
-	void (*cancel)(PurpleProtocolRoomlist *protocol_roomlist, PurpleRoomlist *list);
-
-	void (*expand_category)(PurpleProtocolRoomlist *protocol_roomlist, PurpleRoomlist *list, PurpleRoomlistRoom *category);
-
-	gchar *(*room_serialize)(PurpleProtocolRoomlist *protocol_roomlist, PurpleRoomlistRoom *room);
-
-	/*< private >*/
-	gpointer reserved[4];
-};
-
-/**
- * purple_protocol_roomlist_get_list:
- * @protocol_roomlist: The #PurpleProtocolRoomlist instance.
- * @gc: The #PurpleAccount to get the roomlist for.
- *
- * Gets the list of rooms for @gc.
- *
- * Returns: (transfer full): The roomlist for @gc.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-PurpleRoomlist *purple_protocol_roomlist_get_list(PurpleProtocolRoomlist *protocol_roomlist, PurpleConnection *gc);
-
-/**
- * purple_protocol_roomlist_cancel:
- * @protocol_roomlist: The #PurpleProtocolRoomlist instance.
- * @list: The #PurpleRoomlist instance.
- *
- * Requesting a roomlist can take a long time. This function cancels a request
- * that's already in progress.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_protocol_roomlist_cancel(PurpleProtocolRoomlist *protocol_roomlist, PurpleRoomlist *list);
-
-/**
- * purple_protocol_roomlist_expand_category:
- * @protocol_roomlist: The #PurpleProtocolRoomlist instance.
- * @list: The #PurpleRoomlist instance.
- * @category: The category to expand.
- *
- * Expands the given @category for @list.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_protocol_roomlist_expand_category(PurpleProtocolRoomlist *protocol_roomlist, PurpleRoomlist *list, PurpleRoomlistRoom *category);
-
-/**
- * purple_protocol_roomlist_room_serialize:
- * @protocol_roomlist: The #PurpleProtocolRoomlist instance.
- * @room: The #PurpleRoomlistRoom instance.
- *
- * Serializes @room into a string that will be displayed in a user interface.
- *
- * Returns: (transfer full): The serialized form of @room.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-char *purple_protocol_roomlist_room_serialize(PurpleProtocolRoomlist *protocol_roomlist, PurpleRoomlistRoom *room);
-
-G_END_DECLS
-
-#endif /* PURPLE_PROTOCOL_ROOMLIST_H */
diff --git a/libpurple/purpleprotocolroomlist.c b/libpurple/purpleprotocolroomlist.c
deleted file mode 100644
--- a/libpurple/purpleprotocolroomlist.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Purple - Internet Messaging Library
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this library; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#include "purpleprotocolroomlist.h"
-
-/******************************************************************************
- * GObject Implementation
- *****************************************************************************/
-G_DEFINE_INTERFACE(PurpleProtocolRoomlist, purple_protocol_roomlist,
-                   PURPLE_TYPE_PROTOCOL)
-
-static void
-purple_protocol_roomlist_default_init(G_GNUC_UNUSED PurpleProtocolRoomlistInterface *iface)
-{
-}
-
-/******************************************************************************
- * Public API
- *****************************************************************************/
-PurpleRoomlist *
-purple_protocol_roomlist_get_list(PurpleProtocolRoomlist *protocol_roomlist,
-                                  PurpleConnection *gc)
-{
-	PurpleProtocolRoomlistInterface *iface = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_PROTOCOL_ROOMLIST(protocol_roomlist), NULL);
-	g_return_val_if_fail(PURPLE_IS_CONNECTION(gc), NULL);
-
-	iface = PURPLE_PROTOCOL_ROOMLIST_GET_IFACE(protocol_roomlist);
-	if(iface != NULL && iface->get_list != NULL) {
-		return iface->get_list(protocol_roomlist, gc);
-	}
-
-	return NULL;
-}
-
-void
-purple_protocol_roomlist_cancel(PurpleProtocolRoomlist *protocol_roomlist,
-                                PurpleRoomlist *list)
-{
-	PurpleProtocolRoomlistInterface *iface = NULL;
-
-	g_return_if_fail(PURPLE_IS_PROTOCOL_ROOMLIST(protocol_roomlist));
-	g_return_if_fail(PURPLE_IS_ROOMLIST(list));
-
-	iface = PURPLE_PROTOCOL_ROOMLIST_GET_IFACE(protocol_roomlist);
-	if(iface != NULL && iface->cancel != NULL) {
-		iface->cancel(protocol_roomlist, list);
-	}
-}
-
-void
-purple_protocol_roomlist_expand_category(PurpleProtocolRoomlist *protocol_roomlist,
-                                         PurpleRoomlist *list,
-                                         PurpleRoomlistRoom *category)
-{
-	PurpleProtocolRoomlistInterface *iface = NULL;
-
-	g_return_if_fail(PURPLE_IS_PROTOCOL_ROOMLIST(protocol_roomlist));
-	g_return_if_fail(PURPLE_IS_ROOMLIST(list));
-
-	iface = PURPLE_PROTOCOL_ROOMLIST_GET_IFACE(protocol_roomlist);
-	if(iface != NULL && iface->expand_category != NULL) {
-		iface->expand_category(protocol_roomlist, list, category);
-	}
-}
-
-gchar *
-purple_protocol_roomlist_room_serialize(PurpleProtocolRoomlist *protocol_roomlist,
-                                        PurpleRoomlistRoom *room)
-{
-	PurpleProtocolRoomlistInterface *iface = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_PROTOCOL_ROOMLIST(protocol_roomlist), NULL);
-	g_return_val_if_fail(room != NULL, NULL);
-
-	iface = PURPLE_PROTOCOL_ROOMLIST_GET_IFACE(protocol_roomlist);
-	if(iface != NULL && iface->room_serialize != NULL) {
-		return iface->room_serialize(protocol_roomlist, room);
-	}
-
-	return NULL;
-}
diff --git a/libpurple/purpleroomlistroom.h b/libpurple/purpleroomlistroom.h
deleted file mode 100644
--- a/libpurple/purpleroomlistroom.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Purple - Internet Messaging Library
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this library; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION)
-# error "only <purple.h> may be included directly"
-#endif
-
-#ifndef PURPLE_ROOMLIST_ROOM_H
-#define PURPLE_ROOMLIST_ROOM_H
-
-#include <glib.h>
-#include <glib-object.h>
-
-#include "purpleversion.h"
-
-G_BEGIN_DECLS
-
-#define PURPLE_TYPE_ROOMLIST_ROOM (purple_roomlist_room_get_type())
-
-/**
- * purple_roomlist_room_get_type:
- *
- * Gets the #GType of #PurpleRoomlistRoom.
- *
- * Returns: The #GType of #PurpleRoomlistRoom.
- *
- * Since: 3.0
- */
-
-/**
- * PurpleRoomlistRoom:
- *
- * #PurpleRoomlistRoom keeps track of all #PurpleConversation's inside
- * of libpurple and allows searching of them.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-G_DECLARE_DERIVABLE_TYPE(PurpleRoomlistRoom, purple_roomlist_room, PURPLE,
-						 ROOMLIST_ROOM, GObject)
-
-struct _PurpleRoomlistRoomClass {
-	/*< private >*/
-	GObjectClass parent;
-
-	gpointer reserved[4];
-};
-
-/**
- * purple_roomlist_room_new:
- * @name: The name for the room.
- * @description: The description or topic of the room.
- *
- * Creates a new room to be added to a [class@Purple.Roomlist].
- *
- * Returns: (transfer full): The new room.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-PurpleRoomlistRoom *purple_roomlist_room_new(const gchar *name, const gchar *description);
-
-/**
- * purple_roomlist_room_get_name:
- * @room: The instance.
- *
- * Gets the name of @room.
- *
- * Returns: The name of @room.
- *
- * Since: 2.4
- */
-PURPLE_AVAILABLE_IN_2_4
-const gchar *purple_roomlist_room_get_name(PurpleRoomlistRoom *room);
-
-/**
- * purple_roomlist_room_get_description:
- * @room: The instance.
- *
- * Gets the description of @room.
- *
- * Returns: The description of @room.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-const gchar *purple_roomlist_room_get_description(PurpleRoomlistRoom *room);
-
-/**
- * purple_roomlist_room_get_category:
- * @room: The instance.
- *
- * Gets the category of @room. It is up to the user interface on whether or not
- * this will be used.
- *
- * Returns: The category of @room if set otherwise %NULL.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-const gchar *purple_roomlist_room_get_category(PurpleRoomlistRoom *room);
-
-/**
- * purple_roomlist_room_set_category:
- * @room: The instance.
- * @category: (nullable): The new category.
- *
- * Sets the category of @room.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_roomlist_room_set_category(PurpleRoomlistRoom *room, const gchar *category);
-
-/**
- * purple_roomlist_room_get_user_count:
- * @room: The instance.
- *
- * Gets the number of users in @room.
- *
- * Returns: The number of users in @room if set, otherwise 0.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-guint purple_roomlist_room_get_user_count(PurpleRoomlistRoom *room);
-
-/**
- * purple_roomlist_room_set_user_count:
- * @room: The instance.
- * @user_count: The new user count.
- *
- * Sets the user count of @room to @user_count.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_roomlist_room_set_user_count(PurpleRoomlistRoom *room, guint user_count);
-
-/**
- * purple_roomlist_room_add_field:
- * @room: This instance.
- * @field: The name of the field. This should be a static string.
- * @value: The value of the field. This should be a copy of the value.
- *
- * Adds a new field to @room with the name of @field and value of @value.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_roomlist_room_add_field(PurpleRoomlistRoom *room, const gchar *field, const gchar *value);
-
-/**
- * purple_roomlist_room_get_field:
- * @room: The instance.
- * @field: The name of the field to get.
- *
- * Gets the value of the field named @field in @room.
- *
- * Returns: The value of @field.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-const gchar *purple_roomlist_room_get_field(PurpleRoomlistRoom *room, const gchar *field);
-
-/**
- * purple_roomlist_room_get_components:
- * @room: The instance.
- *
- * Gets the components that can be passed to purple_serv_join_chat() to join
- * the room.
- *
- * Returns: (transfer none): The components used to join the room.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-GHashTable *purple_roomlist_room_get_components(PurpleRoomlistRoom *room);
-
-G_END_DECLS
-
-#endif /* PURPLE_ROOMLIST_ROOM_H */
diff --git a/libpurple/purpleroomlistroom.c b/libpurple/purpleroomlistroom.c
deleted file mode 100644
--- a/libpurple/purpleroomlistroom.c
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Purple - Internet Messaging Library
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this library; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#include "purpleroomlistroom.h"
-
-typedef struct {
-	gchar *name;
-	gchar *description;
-	gchar *category;
-	guint user_count;
-
-	GHashTable *components;
-} PurpleRoomlistRoomPrivate;
-
-enum {
-	PROP_0,
-	PROP_NAME,
-	PROP_DESCRIPTION,
-	PROP_CATEGORY,
-	PROP_USER_COUNT,
-	N_PROPERTIES,
-};
-static GParamSpec *properties[N_PROPERTIES] = {NULL, };
-
-G_DEFINE_TYPE_WITH_PRIVATE(PurpleRoomlistRoom, purple_roomlist_room,
-                           G_TYPE_OBJECT)
-
-/******************************************************************************
- * Helpers
- *****************************************************************************/
-static void
-purple_roomlist_room_set_name(PurpleRoomlistRoom *room, const gchar *name) {
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_ROOMLIST_ROOM(room));
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	g_clear_pointer(&priv->name, g_free);
-	priv->name = g_strdup(name);
-
-	g_object_notify_by_pspec(G_OBJECT(room), properties[PROP_NAME]);
-}
-
-static void
-purple_roomlist_room_set_description(PurpleRoomlistRoom *room,
-                                     const gchar *description)
-{
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_ROOMLIST_ROOM(room));
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	g_clear_pointer(&priv->description, g_free);
-	priv->description = g_strdup(description);
-
-	g_object_notify_by_pspec(G_OBJECT(room), properties[PROP_DESCRIPTION]);
-}
-
-/******************************************************************************
- * GObject Implementation
- *****************************************************************************/
-static void
-purple_roomlist_room_get_property(GObject *obj, guint param_id, GValue *value,
-                                  GParamSpec *pspec)
-{
-	PurpleRoomlistRoom *room = PURPLE_ROOMLIST_ROOM(obj);
-
-	switch(param_id) {
-		case PROP_NAME:
-			g_value_set_string(value, purple_roomlist_room_get_name(room));
-			break;
-		case PROP_DESCRIPTION:
-			g_value_set_string(value,
-			                   purple_roomlist_room_get_description(room));
-			break;
-		case PROP_CATEGORY:
-			g_value_set_string(value, purple_roomlist_room_get_category(room));
-			break;
-		case PROP_USER_COUNT:
-			g_value_set_uint(value, purple_roomlist_room_get_user_count(room));
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_roomlist_room_set_property(GObject *obj, guint param_id,
-                                  const GValue *value, GParamSpec *pspec)
-{
-	PurpleRoomlistRoom *room = PURPLE_ROOMLIST_ROOM(obj);
-
-	switch(param_id) {
-		case PROP_NAME:
-			purple_roomlist_room_set_name(room, g_value_get_string(value));
-			break;
-		case PROP_DESCRIPTION:
-			purple_roomlist_room_set_description(room,
-			                                     g_value_get_string(value));
-			break;
-		case PROP_CATEGORY:
-			purple_roomlist_room_set_category(room, g_value_get_string(value));
-			break;
-		case PROP_USER_COUNT:
-			purple_roomlist_room_set_user_count(room, g_value_get_uint(value));
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_roomlist_room_finalize(GObject *obj) {
-	PurpleRoomlistRoom *room = NULL;
-	PurpleRoomlistRoomPrivate *priv = NULL;;
-
-	room = PURPLE_ROOMLIST_ROOM(obj);
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	g_clear_pointer(&priv->name, g_free);
-	g_clear_pointer(&priv->description, g_free);
-	g_clear_pointer(&priv->category, g_free);
-
-	g_clear_pointer(&priv->components, g_hash_table_destroy);
-
-	G_OBJECT_CLASS(purple_roomlist_room_parent_class)->finalize(obj);
-}
-
-static void
-purple_roomlist_room_init(PurpleRoomlistRoom *room) {
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	priv->components = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,
-	                                         g_free);
-}
-
-static void
-purple_roomlist_room_class_init(PurpleRoomlistRoomClass *klass) {
-	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
-
-	obj_class->get_property = purple_roomlist_room_get_property;
-	obj_class->set_property = purple_roomlist_room_set_property;
-	obj_class->finalize = purple_roomlist_room_finalize;
-
-	/**
-	 * PurpleRoomlistRoom:name:
-	 *
-	 * The name of the room.
-	 *
-	 * Since: 3.0
-	 */
-	properties[PROP_NAME] = g_param_spec_string(
-		"name", "name",
-		"The name of the room",
-		NULL,
-		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
-
-	/**
-	 * PurpleRoomlistRoom:description:
-	 *
-	 * The description of the room.
-	 *
-	 * Since: 3.0
-	 */
-	properties[PROP_DESCRIPTION] = g_param_spec_string(
-		"description", "description",
-		"The description of the room",
-		NULL,
-		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
-
-	/**
-	 * PurpleRoomlistRoom:category:
-	 *
-	 * The category of the room.
-	 *
-	 * Since: 3.0
-	 */
-	properties[PROP_CATEGORY] = g_param_spec_string(
-		"category", "category",
-		"The category of the room",
-		NULL,
-		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
-
-	/**
-	 * PurpleRoomlistRoom:user-count:
-	 *
-	 * The number of users in the room.
-	 *
-	 * Since: 3.0
-	 */
-	properties[PROP_USER_COUNT] = g_param_spec_uint(
-		"user-count", "user-count",
-		"The user count of the room",
-		0, G_MAXUINT, 0,
-		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
-
-	g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
-}
-
-/******************************************************************************
- * Public API
- *****************************************************************************/
-PurpleRoomlistRoom *
-purple_roomlist_room_new(const gchar *name, const gchar *description) {
-	return g_object_new(
-		PURPLE_TYPE_ROOMLIST_ROOM,
-		"name", name,
-		"description", description,
-		NULL);
-}
-
-const gchar *
-purple_roomlist_room_get_name(PurpleRoomlistRoom *room) {
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_ROOMLIST_ROOM(room), NULL);
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	return priv->name;
-}
-
-const gchar *
-purple_roomlist_room_get_description(PurpleRoomlistRoom *room) {
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_ROOMLIST_ROOM(room), NULL);
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	return priv->description;
-}
-
-const gchar *
-purple_roomlist_room_get_category(PurpleRoomlistRoom *room) {
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_ROOMLIST_ROOM(room), NULL);
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	return priv->category;
-}
-
-void
-purple_roomlist_room_set_category(PurpleRoomlistRoom *room,
-                                  const gchar *category)
-{
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_ROOMLIST_ROOM(room));
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	g_clear_pointer(&priv->category, g_free);
-	priv->category = g_strdup(category);
-
-	g_object_notify_by_pspec(G_OBJECT(room), properties[PROP_CATEGORY]);
-}
-
-guint
-purple_roomlist_room_get_user_count(PurpleRoomlistRoom *room) {
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_ROOMLIST_ROOM(room), 0);
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	return priv->user_count;
-}
-
-void
-purple_roomlist_room_set_user_count(PurpleRoomlistRoom *room,
-                                    guint user_count)
-{
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_ROOMLIST_ROOM(room));
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	priv->user_count = user_count;
-
-	g_object_notify_by_pspec(G_OBJECT(room), properties[PROP_USER_COUNT]);
-}
-
-void
-purple_roomlist_room_add_field(PurpleRoomlistRoom *room, const gchar *field,
-                               const gchar *value)
-{
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_ROOMLIST_ROOM(room));
-	g_return_if_fail(field != NULL);
-	g_return_if_fail(value != NULL);
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	g_hash_table_replace(priv->components, (gpointer)field, g_strdup(value));
-}
-
-const gchar *
-purple_roomlist_room_get_field(PurpleRoomlistRoom *room, const gchar *field) {
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_ROOMLIST_ROOM(room), NULL);
-	g_return_val_if_fail(field != NULL, NULL);
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	return g_hash_table_lookup(priv->components, field);
-}
-
-GHashTable *
-purple_roomlist_room_get_components(PurpleRoomlistRoom *room) {
-	PurpleRoomlistRoomPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_ROOMLIST_ROOM(room), NULL);
-
-	priv = purple_roomlist_room_get_instance_private(room);
-
-	return priv->components;
-}
diff --git a/libpurple/roomlist.h b/libpurple/roomlist.h
deleted file mode 100644
--- a/libpurple/roomlist.h
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Purple - Internet Messaging Library
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this library; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION)
-# error "only <purple.h> may be included directly"
-#endif
-
-#ifndef PURPLE_ROOMLIST_H
-#define PURPLE_ROOMLIST_H
-
-#include "purpleversion.h"
-
-#define PURPLE_TYPE_ROOMLIST (purple_roomlist_get_type())
-typedef struct _PurpleRoomlist PurpleRoomlist;
-
-/**
- * PurpleRoomlistField:
- *
- * A field for the room list.
- *
- * Since: 2.0
- */
-#define PURPLE_TYPE_ROOMLIST_FIELD (purple_roomlist_field_get_type())
-typedef struct _PurpleRoomlistField PurpleRoomlistField;
-
-#define PURPLE_TYPE_ROOMLIST_UI_OPS (purple_roomlist_ui_ops_get_type())
-typedef struct _PurpleRoomlistUiOps PurpleRoomlistUiOps;
-
-/**
- * PurpleRoomlistFieldType:
- * @PURPLE_ROOMLIST_FIELD_BOOL: The field is a boolean.
- * @PURPLE_ROOMLIST_FIELD_INT: The field is an integer.
- * @PURPLE_ROOMLIST_FIELD_STRING: We do a g_strdup on the passed value if it's
- *                                this type.
- *
- * The types of fields.
- *
- * Since: 2.0
- */
-typedef enum
-{
-	PURPLE_ROOMLIST_FIELD_BOOL,
-	PURPLE_ROOMLIST_FIELD_INT,
-	PURPLE_ROOMLIST_FIELD_STRING
-
-} PurpleRoomlistFieldType;
-
-#include <glib.h>
-
-#include "purpleaccount.h"
-#include "purpleroomlistroom.h"
-
-/**************************************************************************/
-/* Data Structures                                                        */
-/**************************************************************************/
-
-/**
- * PurpleRoomlistUiOps:
- * @show_with_account: Force the ui to pop up a dialog and get the list.
- * @create:            A new list was created.
- * @set_fields:        Sets the columns.
- * @add_room:          Add a room to the list.
- *
- * The room list ops to be filled out by the UI.
- *
- * Since: 2.0
- */
-struct _PurpleRoomlistUiOps {
-	void (*show_with_account)(PurpleAccount *account);
-	void (*create)(PurpleRoomlist *list);
-	void (*set_fields)(PurpleRoomlist *list, GList *fields);
-	void (*add_room)(PurpleRoomlist *list, PurpleRoomlistRoom *room);
-
-	/*< private >*/
-	void (*_purple_reserved1)(void);
-	void (*_purple_reserved2)(void);
-	void (*_purple_reserved3)(void);
-	void (*_purple_reserved4)(void);
-};
-
-/**
- * PurpleRoomlist:
- *
- * Represents a list of rooms for a given connection on a given protocol.
- *
- * Since: 2.0
- */
-struct _PurpleRoomlist {
-	GObject gparent;
-};
-
-G_BEGIN_DECLS
-
-/**************************************************************************/
-/* Room List API                                                          */
-/**************************************************************************/
-
-/**
- * purple_roomlist_get_type:
- *
- * The standard _get_type function for #PurpleRoomlist.
- *
- * Returns: The #GType for the Room List object.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-G_DECLARE_FINAL_TYPE(PurpleRoomlist, purple_roomlist, PURPLE, ROOMLIST, GObject)
-
-/**
- * purple_roomlist_show_with_account:
- * @account: The account to get the list on.
- *
- * This is used to get the room list on an account, asking the UI
- * to pop up a dialog with the specified account already selected,
- * and pretend the user clicked the get list button.
- * While we're pretending, predend I didn't say anything about dialogs
- * or buttons, since this is the core.
- *
- * Since: 2.0
- */
-PURPLE_AVAILABLE_IN_ALL
-void purple_roomlist_show_with_account(PurpleAccount *account);
-
-/**
- * purple_roomlist_new:
- * @account: The account that's listing rooms.
- *
- * Returns a newly created room list object.
- *
- * Returns: The new room list handle.
- *
- * Since: 2.0
- */
-PURPLE_AVAILABLE_IN_ALL
-PurpleRoomlist *purple_roomlist_new(PurpleAccount *account);
-
-/**
- * purple_roomlist_get_account:
- * @list: The room list.
- *
- * Retrieve the PurpleAccount that was given when the room list was
- * created.
- *
- * Returns: (transfer none): The PurpleAccount tied to this room list.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-PurpleAccount *purple_roomlist_get_account(PurpleRoomlist *list);
-
-/**
- * purple_roomlist_set_fields:
- * @list: The room list.
- * @fields: (element-type PurpleRoomlistField) (transfer full): UI's are
- *          encouraged to default to displaying these fields in the order given.
- *
- * Set the different field types and their names for this protocol.
- *
- * This must be called before purple_roomlist_room_add().
- *
- * Since: 2.0
- */
-PURPLE_AVAILABLE_IN_ALL
-void purple_roomlist_set_fields(PurpleRoomlist *list, GList *fields);
-
-/**
- * purple_roomlist_set_in_progress:
- * @list: The room list.
- * @in_progress: We're downloading it, or we're not.
- *
- * Set the "in progress" state of the room list.
- *
- * The UI is encouraged to somehow hint to the user
- * whether or not we're busy downloading a room list or not.
- *
- * Since: 2.0
- */
-PURPLE_AVAILABLE_IN_ALL
-void purple_roomlist_set_in_progress(PurpleRoomlist *list, gboolean in_progress);
-
-/**
- * purple_roomlist_get_in_progress:
- * @list: The room list.
- *
- * Gets the "in progress" state of the room list.
- *
- * The UI is encouraged to somehow hint to the user
- * whether or not we're busy downloading a room list or not.
- *
- * Returns: True if we're downloading it, or false if we're not.
- *
- * Since: 2.0
- */
-PURPLE_AVAILABLE_IN_ALL
-gboolean purple_roomlist_get_in_progress(PurpleRoomlist *list);
-
-/**
- * purple_roomlist_room_add:
- * @list: The room list.
- * @room: The room to add to the list. The GList of fields must be in the same
-               order as was given in purple_roomlist_set_fields().
- *
- * Adds a room to the list of them.
- *
- * Since: 2.0
- */
-PURPLE_AVAILABLE_IN_ALL
-void purple_roomlist_room_add(PurpleRoomlist *list, PurpleRoomlistRoom *room);
-
-/**
- * purple_roomlist_get_list:
- * @gc: The PurpleConnection to have get a list.
- *
- * Returns a PurpleRoomlist structure from the protocol, and
- * instructs the protocol to start fetching the list.
- *
- * Returns: (transfer full): A PurpleRoomlist* or %NULL if the protocol doesn't
- *          support that.
- *
- * Since: 2.0
- */
-PURPLE_AVAILABLE_IN_ALL
-PurpleRoomlist *purple_roomlist_get_list(PurpleConnection *gc);
-
-/**
- * purple_roomlist_cancel_get_list:
- * @list: The room list to cancel a get_list on.
- *
- * Tells the protocol to stop fetching the list.
- * If this is possible and done, the protocol will
- * call set_in_progress with %FALSE and possibly
- * unref the list if it took a reference.
- *
- * Since: 2.0
- */
-PURPLE_AVAILABLE_IN_ALL
-void purple_roomlist_cancel_get_list(PurpleRoomlist *list);
-
-/**
- * purple_roomlist_join_room:
- * @list: The room list whose room to join.
- * @room: The room to join.
- *
- * Create a new conversation for @room.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_roomlist_join_room(PurpleRoomlist *list, PurpleRoomlistRoom *room);
-
-/**************************************************************************/
-/* UI Registration Functions                                              */
-/**************************************************************************/
-
-/**
- * purple_roomlist_ui_ops_get_type:
- *
- * The standard _get_type function for #PurpleRoomlistUiOps.
- *
- * Returns: The #GType for the #PurpleRoomlistUiOps boxed structure.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-GType purple_roomlist_ui_ops_get_type(void);
-
-/**
- * purple_roomlist_set_ui_ops:
- * @ops: The UI operations structure.
- *
- * Sets the UI operations structure to be used in all purple room lists.
- *
- * Since: 2.0
- */
-PURPLE_AVAILABLE_IN_ALL
-void purple_roomlist_set_ui_ops(PurpleRoomlistUiOps *ops);
-
-/**
- * purple_roomlist_get_ui_ops:
- *
- * Returns the purple window UI operations structure to be used in
- * new windows.
- *
- * Returns: A filled-out PurpleRoomlistUiOps structure.
- *
- * Since: 2.0
- */
-PURPLE_AVAILABLE_IN_ALL
-PurpleRoomlistUiOps *purple_roomlist_get_ui_ops(void);
-
-G_END_DECLS
-
-#endif /* PURPLE_ROOMLIST_H */
diff --git a/libpurple/roomlist.c b/libpurple/roomlist.c
deleted file mode 100644
--- a/libpurple/roomlist.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Purple - Internet Messaging Library
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this library; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#include "connection.h"
-#include "debug.h"
-#include "purpleaccount.h"
-#include "roomlist.h"
-#include "server.h"
-
-/* This must be after roomlist.h otherwise you'll get an include cycle. */
-#include "purpleprotocolroomlist.h"
-
-/*
- * Private data for a room list.
- */
-typedef struct {
-	PurpleAccount *account;  /* The account this list belongs to. */
-	GList *rooms;            /* The list of rooms.                */
-	gboolean in_progress;    /* The listing is in progress.       */
-} PurpleRoomlistPrivate;
-
-/* Room list property enums */
-enum
-{
-	PROP_0,
-	PROP_ACCOUNT,
-	PROP_IN_PROGRESS,
-	N_PROPERTIES,
-};
-
-static GParamSpec *properties[N_PROPERTIES] = {NULL, };
-static PurpleRoomlistUiOps *ops = NULL;
-
-G_DEFINE_FINAL_TYPE_WITH_PRIVATE(PurpleRoomlist, purple_roomlist,
-                                 G_TYPE_OBJECT)
-
-/**************************************************************************/
-/* Room List API                                                          */
-/**************************************************************************/
-
-void purple_roomlist_show_with_account(PurpleAccount *account)
-{
-	if (ops && ops->show_with_account)
-		ops->show_with_account(account);
-}
-
-PurpleAccount *purple_roomlist_get_account(PurpleRoomlist *list)
-{
-	PurpleRoomlistPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_ROOMLIST(list), NULL);
-
-	priv = purple_roomlist_get_instance_private(list);
-	return priv->account;
-}
-
-void purple_roomlist_set_in_progress(PurpleRoomlist *list, gboolean in_progress)
-{
-	PurpleRoomlistPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_ROOMLIST(list));
-
-	priv = purple_roomlist_get_instance_private(list);
-	priv->in_progress = in_progress;
-
-	g_object_notify_by_pspec(G_OBJECT(list), properties[PROP_IN_PROGRESS]);
-}
-
-gboolean purple_roomlist_get_in_progress(PurpleRoomlist *list)
-{
-	PurpleRoomlistPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_ROOMLIST(list), FALSE);
-
-	priv = purple_roomlist_get_instance_private(list);
-	return priv->in_progress;
-}
-
-void purple_roomlist_room_add(PurpleRoomlist *list, PurpleRoomlistRoom *room)
-{
-	PurpleRoomlistPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_ROOMLIST(list));
-	g_return_if_fail(room != NULL);
-
-	priv = purple_roomlist_get_instance_private(list);
-	priv->rooms = g_list_append(priv->rooms, room);
-
-	if (ops && ops->add_room)
-		ops->add_room(list, room);
-}
-
-PurpleRoomlist *purple_roomlist_get_list(PurpleConnection *gc)
-{
-	PurpleProtocol *protocol = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_CONNECTION(gc), NULL);
-	g_return_val_if_fail(PURPLE_CONNECTION_IS_CONNECTED(gc), NULL);
-
-	protocol = purple_connection_get_protocol(gc);
-
-	if(PURPLE_IS_PROTOCOL_ROOMLIST(protocol)) {
-		return purple_protocol_roomlist_get_list(PURPLE_PROTOCOL_ROOMLIST(protocol),
-		                                         gc);
-	}
-
-	return NULL;
-}
-
-void purple_roomlist_cancel_get_list(PurpleRoomlist *list)
-{
-	PurpleRoomlistPrivate *priv = NULL;
-	PurpleProtocol *protocol = NULL;
-	PurpleConnection *gc;
-
-	g_return_if_fail(PURPLE_IS_ROOMLIST(list));
-
-	priv = purple_roomlist_get_instance_private(list);
-
-	gc = purple_account_get_connection(priv->account);
-	g_return_if_fail(PURPLE_IS_CONNECTION(gc));
-
-	if(gc)
-		protocol = purple_connection_get_protocol(gc);
-
-	if(PURPLE_IS_PROTOCOL_ROOMLIST(protocol)) {
-		purple_protocol_roomlist_cancel(PURPLE_PROTOCOL_ROOMLIST(protocol), list);
-	}
-}
-
-void
-purple_roomlist_join_room(PurpleRoomlist *list, PurpleRoomlistRoom *room) {
-	PurpleRoomlistPrivate *priv = NULL;
-	PurpleConnection *connection = NULL;
-	GHashTable *components = NULL, *adjusted = NULL;
-	GHashTableIter iter;
-	const gchar *name = NULL;
-	gpointer key, value;
-
-	g_return_if_fail(PURPLE_IS_ROOMLIST(list));
-	g_return_if_fail(PURPLE_IS_ROOMLIST_ROOM(room));
-
-	priv = purple_roomlist_get_instance_private(list);
-
-	connection = purple_account_get_connection(priv->account);
-	if(connection == NULL) {
-		return;
-	}
-
-	components = purple_roomlist_room_get_components(room);
-
-	/* Make a copy of the components as we make sure the name is included. */
-	adjusted = g_hash_table_new(g_str_hash, g_str_equal);
-	g_hash_table_iter_init(&iter, components);
-	while(g_hash_table_iter_next(&iter, &key, &value)) {
-		g_hash_table_insert(adjusted, key, value);
-	}
-
-	name = purple_roomlist_room_get_name(room);
-	g_hash_table_replace(adjusted, "name", (gpointer)name);
-
-	/* purple_serv_join_chat(connection, adjusted); */
-
-	g_hash_table_destroy(adjusted);
-}
-
-/**************************************************************************/
-/* Room List GObject code                                                 */
-/**************************************************************************/
-
-/* Set method for GObject properties */
-static void
-purple_roomlist_set_property(GObject *obj, guint param_id, const GValue *value,
-		GParamSpec *pspec)
-{
-	PurpleRoomlist *list = PURPLE_ROOMLIST(obj);
-	PurpleRoomlistPrivate *priv =
-			purple_roomlist_get_instance_private(list);
-
-	switch (param_id) {
-		case PROP_ACCOUNT:
-			priv->account = g_value_get_object(value);
-			break;
-		case PROP_IN_PROGRESS:
-			purple_roomlist_set_in_progress(list, g_value_get_boolean(value));
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-			break;
-	}
-}
-
-/* Get method for GObject properties */
-static void
-purple_roomlist_get_property(GObject *obj, guint param_id, GValue *value,
-		GParamSpec *pspec)
-{
-	PurpleRoomlist *list = PURPLE_ROOMLIST(obj);
-
-	switch (param_id) {
-		case PROP_ACCOUNT:
-			g_value_set_object(value, purple_roomlist_get_account(list));
-			break;
-		case PROP_IN_PROGRESS:
-			g_value_set_boolean(value, purple_roomlist_get_in_progress(list));
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_roomlist_init(G_GNUC_UNUSED PurpleRoomlist *list)
-{
-}
-
-/* Called when done constructing */
-static void
-purple_roomlist_constructed(GObject *object)
-{
-	PurpleRoomlist *list = PURPLE_ROOMLIST(object);
-
-	G_OBJECT_CLASS(purple_roomlist_parent_class)->constructed(object);
-
-	if (ops && ops->create)
-		ops->create(list);
-}
-
-/* GObject finalize function */
-static void
-purple_roomlist_finalize(GObject *object)
-{
-	PurpleRoomlist *list = PURPLE_ROOMLIST(object);
-	PurpleRoomlistPrivate *priv =
-			purple_roomlist_get_instance_private(list);
-
-	purple_debug_misc("roomlist", "destroying list %p\n", list);
-
-	g_list_free_full(priv->rooms, g_object_unref);
-
-	G_OBJECT_CLASS(purple_roomlist_parent_class)->finalize(object);
-}
-
-/* Class initializer function */
-static void
-purple_roomlist_class_init(PurpleRoomlistClass *klass)
-{
-	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
-
-	obj_class->finalize = purple_roomlist_finalize;
-	obj_class->constructed = purple_roomlist_constructed;
-
-	/* Setup properties */
-	obj_class->get_property = purple_roomlist_get_property;
-	obj_class->set_property = purple_roomlist_set_property;
-
-	/**
-	 * PurpleRoomlist:account:
-	 *
-	 * The account this room list belongs to.
-	 *
-	 * Since: 3.0
-	 */
-	properties[PROP_ACCOUNT] = g_param_spec_object("account", "Account",
-				"The account for the room list.",
-				PURPLE_TYPE_ACCOUNT,
-				G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
-				G_PARAM_STATIC_STRINGS);
-
-	/**
-	 * PurpleRoomlist:in-progress:
-	 *
-	 * Whether or not the room list is being fetched.
-	 *
-	 * Since: 3.0
-	 */
-	properties[PROP_IN_PROGRESS] = g_param_spec_boolean("in-progress",
-				"In progress",
-				"Whether the room list is being fetched.", FALSE,
-				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
-}
-
-PurpleRoomlist *purple_roomlist_new(PurpleAccount *account)
-{
-	return g_object_new(PURPLE_TYPE_ROOMLIST,
-		"account", account,
-		NULL
-	);
-}
-
-/**************************************************************************/
-/* UI Registration Functions                                              */
-/**************************************************************************/
-
-void purple_roomlist_set_ui_ops(PurpleRoomlistUiOps *ui_ops)
-{
-	ops = ui_ops;
-}
-
-PurpleRoomlistUiOps *purple_roomlist_get_ui_ops(void)
-{
-	return ops;
-}
-
-/**************************************************************************
- * UI Ops GBoxed code
- **************************************************************************/
-
-static PurpleRoomlistUiOps *
-purple_roomlist_ui_ops_copy(PurpleRoomlistUiOps *ops)
-{
-	PurpleRoomlistUiOps *ops_new;
-
-	g_return_val_if_fail(ops != NULL, NULL);
-
-	ops_new = g_new(PurpleRoomlistUiOps, 1);
-	*ops_new = *ops;
-
-	return ops_new;
-}
-
-GType
-purple_roomlist_ui_ops_get_type(void)
-{
-	static GType type = 0;
-
-	if (type == 0) {
-		type = g_boxed_type_register_static("PurpleRoomlistUiOps",
-				(GBoxedCopyFunc)purple_roomlist_ui_ops_copy,
-				(GBoxedFreeFunc)g_free);
-	}
-
-	return type;
-}
diff --git a/po/POTFILES.in b/po/POTFILES.in
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -67,7 +67,6 @@
 libpurple/purpleprotocolclient.c
 libpurple/purpleprotocolmanager.c
 libpurple/purpleprotocolmedia.c
-libpurple/purpleprotocolroomlist.c
 libpurple/purpleprotocolserver.c
 libpurple/purpleprotocolwhiteboard.c
 libpurple/purplesqlitehistoryadapter.c
@@ -90,7 +89,6 @@
 libpurple/request/purplerequestfieldstring.c
 libpurple/request/purplerequestgroup.c
 libpurple/request/purplerequestpage.c
-libpurple/roomlist.c
 libpurple/server.c
 libpurple/signals.c
 libpurple/tests/test_account_manager.c
