Sat, 13 Apr 2024 22:24:47 -0500
Remove the roomlist from Pidgin
This is going to be rewritten and none of this existing code is going to be
used.
Testing Done:
The turtles spared with the code as I spared with the app.
Reviewed at https://reviews.imfreedom.org/r/3116/
| pidgin/gtkroomlist.c | file | annotate | diff | comparison | revisions | |
| pidgin/gtkroomlist.h | file | annotate | diff | comparison | revisions | |
| pidgin/meson.build | file | annotate | diff | comparison | revisions | |
| pidgin/pidginapplication.c | file | annotate | diff | comparison | revisions | |
| pidgin/pidginui.c | file | annotate | diff | comparison | revisions | |
| pidgin/resources/Roomlist/roomlist.ui | file | annotate | diff | comparison | revisions | |
| pidgin/resources/gtk/menus.ui | file | annotate | diff | comparison | revisions | |
| pidgin/resources/pidgin.gresource.xml | file | annotate | diff | comparison | revisions | |
| po/POTFILES.in | file | annotate | diff | comparison | revisions |
--- a/pidgin/gtkroomlist.c Sat Apr 13 21:59:37 2024 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,542 +0,0 @@ -/* pidgin - * - * Pidgin 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 program 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 program 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 program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - */ - -#include <glib/gi18n-lib.h> - -#include <gtk/gtk.h> - -#include <purple.h> - -#include "gtkroomlist.h" - -#include "pidginaccountchooser.h" - -#define PIDGIN_TYPE_ROOMLIST_DIALOG (pidgin_roomlist_dialog_get_type()) -G_DECLARE_FINAL_TYPE(PidginRoomlistDialog, pidgin_roomlist_dialog, PIDGIN, - ROOMLIST_DIALOG, GtkDialog) - -#define PIDGIN_ROOMLIST_UI_DATA "pidgin-ui" - -enum { - RESPONSE_STOP = 0, - RESPONSE_LIST, - RESPONSE_ADD, - RESPONSE_JOIN, -}; - -struct _PidginRoomlistDialog { - GtkDialog parent; - - GtkWidget *account_widget; - GtkWidget *progress; - GtkWidget *view; - GtkSingleSelection *selection; - GtkFilterListModel *filter; - - GtkWidget *stop_button; - GtkWidget *list_button; - GtkWidget *add_button; - GtkWidget *join_button; - GtkWidget *close_button; - - PurpleAccount *account; - PurpleRoomlist *roomlist; - - gboolean pg_needs_pulse; - guint pg_update_to; -}; - -G_DEFINE_FINAL_TYPE(PidginRoomlistDialog, pidgin_roomlist_dialog, - GTK_TYPE_DIALOG) - -typedef struct { - PidginRoomlistDialog *dialog; - GListStore *model; -} PidginRoomlist; - -/****************************************************************************** - * Helpers - *****************************************************************************/ -static void -pidgin_roomlist_close(PidginRoomlistDialog *dialog) -{ - if (dialog->roomlist && purple_roomlist_get_in_progress(dialog->roomlist)) - purple_roomlist_cancel_get_list(dialog->roomlist); - - if (dialog->roomlist) { - PidginRoomlist *rl = NULL; - - rl = g_object_get_data(G_OBJECT(dialog->roomlist), - PIDGIN_ROOMLIST_UI_DATA); - - if (dialog->pg_update_to > 0) - /* yes, that's right, unref it twice. */ - g_object_unref(dialog->roomlist); - - if (rl) - rl->dialog = NULL; - g_object_unref(dialog->roomlist); - } - - g_clear_handle_id(&dialog->pg_update_to, g_source_remove); - - dialog->progress = NULL; -} - -static void -pidgin_roomlist_start_listing(PidginRoomlistDialog *dialog) -{ - PurpleConnection *gc; - PidginRoomlist *rl; - - gc = purple_account_get_connection(dialog->account); - if (!gc) - return; - - if (dialog->roomlist != NULL) { - rl = g_object_get_data(G_OBJECT(dialog->roomlist), - PIDGIN_ROOMLIST_UI_DATA); - - g_clear_object(&rl->model); - g_object_unref(dialog->roomlist); - } - - dialog->roomlist = purple_roomlist_get_list(gc); - if (!dialog->roomlist) - return; - g_object_ref(dialog->roomlist); - - rl = g_object_get_data(G_OBJECT(dialog->roomlist), - PIDGIN_ROOMLIST_UI_DATA); - rl->dialog = dialog; - - gtk_widget_set_sensitive(dialog->account_widget, FALSE); - - gtk_filter_list_model_set_model(dialog->filter, G_LIST_MODEL(rl->model)); - - /* some protocols (not bundled with libpurple) finish getting their - * room list immediately */ - if(purple_roomlist_get_in_progress(dialog->roomlist)) { - gtk_widget_set_sensitive(dialog->stop_button, TRUE); - gtk_widget_set_sensitive(dialog->list_button, FALSE); - } else { - gtk_widget_set_sensitive(dialog->stop_button, FALSE); - gtk_widget_set_sensitive(dialog->list_button, TRUE); - } - gtk_widget_set_sensitive(dialog->add_button, FALSE); - gtk_widget_set_sensitive(dialog->join_button, FALSE); -} - -static void -pidgin_roomlist_stop_listing(PidginRoomlistDialog *dialog) -{ - purple_roomlist_cancel_get_list(dialog->roomlist); - - gtk_widget_set_sensitive(dialog->account_widget, TRUE); - - gtk_widget_set_sensitive(dialog->stop_button, FALSE); - gtk_widget_set_sensitive(dialog->list_button, TRUE); - gtk_widget_set_sensitive(dialog->add_button, FALSE); - gtk_widget_set_sensitive(dialog->join_button, FALSE); -} - -static void -pidgin_roomlist_add_to_blist(PidginRoomlistDialog *dialog) -{ - char *name = NULL; - PurpleAccount *account = NULL; - PurpleConnection *gc = NULL; - PurpleProtocol *protocol = NULL; - PurpleRoomlistRoom *room = NULL; - - account = purple_roomlist_get_account(dialog->roomlist); - gc = purple_account_get_connection(account); - - room = gtk_single_selection_get_selected_item(dialog->selection); - g_return_if_fail(PURPLE_IS_ROOMLIST_ROOM(room)); - - if(gc != NULL) { - protocol = purple_connection_get_protocol(gc); - } - - if(protocol != NULL && PURPLE_PROTOCOL_IMPLEMENTS(protocol, ROOMLIST, room_serialize)) { - name = purple_protocol_roomlist_room_serialize(PURPLE_PROTOCOL_ROOMLIST(protocol), - room); - } else { - name = g_strdup(purple_roomlist_room_get_name(room)); - } - - purple_blist_request_add_chat(account, NULL, NULL, name); - - g_free(name); -} - -static void -pidgin_roomlist_join(PidginRoomlistDialog *dialog) -{ - PurpleRoomlistRoom *room = NULL; - - room = gtk_single_selection_get_selected_item(dialog->selection); - if(PURPLE_IS_ROOMLIST_ROOM(room)) { - purple_roomlist_join_room(dialog->roomlist, room); - } -} - -/****************************************************************************** - * Actions - *****************************************************************************/ -static void -pidgin_roomlist_add_to_blist_cb(G_GNUC_UNUSED GSimpleAction *action, - G_GNUC_UNUSED GVariant *parameter, - gpointer data) -{ - pidgin_roomlist_add_to_blist(data); -} - - -static void -pidgin_roomlist_join_cb(G_GNUC_UNUSED GSimpleAction *action, - G_GNUC_UNUSED GVariant *parameter, - gpointer data) -{ - pidgin_roomlist_join(data); -} - -static GActionEntry actions[] = { - { - .name = "add", - .activate = pidgin_roomlist_add_to_blist_cb, - }, { - .name = "join", - .activate = pidgin_roomlist_join_cb, - }, -}; - -/****************************************************************************** - * Callbacks - *****************************************************************************/ -static void -pidgin_roomlist_response_cb(GtkDialog *gtk_dialog, gint response_id, - G_GNUC_UNUSED gpointer data) -{ - PidginRoomlistDialog *dialog = PIDGIN_ROOMLIST_DIALOG(gtk_dialog); - - switch(response_id) { - case RESPONSE_STOP: - pidgin_roomlist_stop_listing(dialog); - break; - case RESPONSE_LIST: - pidgin_roomlist_start_listing(dialog); - break; - case RESPONSE_ADD: - pidgin_roomlist_add_to_blist(dialog); - break; - case RESPONSE_JOIN: - pidgin_roomlist_join(dialog); - break; - case GTK_RESPONSE_CLOSE: - case GTK_RESPONSE_DELETE_EVENT: - gtk_window_destroy(GTK_WINDOW(gtk_dialog)); - break; - } -} - -static gboolean -close_request_cb(GtkWidget *w, G_GNUC_UNUSED gpointer d) -{ - pidgin_roomlist_close(PIDGIN_ROOMLIST_DIALOG(w)); - - gtk_window_destroy(GTK_WINDOW(w)); - - return TRUE; -} - -static void -dialog_select_account_cb(GObject *obj, G_GNUC_UNUSED GParamSpec *pspec, - gpointer data) -{ - PidginRoomlistDialog *dialog = data; - PidginAccountChooser *chooser = PIDGIN_ACCOUNT_CHOOSER(obj); - PurpleAccount *account = pidgin_account_chooser_get_selected(chooser); - gboolean change = (account != dialog->account); - dialog->account = account; - - if (change && dialog->roomlist) { - PidginRoomlist *rl = NULL; - - rl = g_object_get_data(G_OBJECT(dialog->roomlist), - PIDGIN_ROOMLIST_UI_DATA); - - g_clear_object(&rl->model); - g_clear_object(&dialog->roomlist); - } -} - -static void -selection_changed_cb(GtkSelectionModel *self, G_GNUC_UNUSED guint position, - G_GNUC_UNUSED guint n_items, gpointer data) -{ - PidginRoomlistDialog *dialog = data; - guint index = GTK_INVALID_LIST_POSITION; - gboolean found = FALSE; - - /* The passed in position and n_items gives the *range* of selections that - * have changed, so just re-query it exactly since GtkSingleSelection has - * only one. */ - index = gtk_single_selection_get_selected(GTK_SINGLE_SELECTION(self)); - found = index != GTK_INVALID_LIST_POSITION; - - gtk_widget_set_sensitive(dialog->add_button, found); - gtk_widget_set_sensitive(dialog->join_button, found); -} - -static void -row_activated_cb(GtkColumnView *self, guint position, gpointer data) -{ - PidginRoomlistDialog *dialog = data; - PurpleRoomlistRoom *room = NULL; - GtkSelectionModel *model = NULL; - - model = gtk_column_view_get_model(self); - room = g_list_model_get_item(G_LIST_MODEL(model), position); - - if(PURPLE_IS_ROOMLIST_ROOM(room)) { - purple_roomlist_join_room(dialog->roomlist, room); - } - - g_clear_object(&room); -} - -static gboolean -account_filter_func(gpointer item, G_GNUC_UNUSED gpointer data) { - PurpleProtocol *protocol = NULL; - - if(PURPLE_IS_ACCOUNT(item)) { - PurpleAccount *account = PURPLE_ACCOUNT(item); - PurpleConnection *conn = purple_account_get_connection(account); - if(conn && PURPLE_CONNECTION_IS_CONNECTED(conn)) { - protocol = purple_connection_get_protocol(conn); - } - } - - return (protocol && PURPLE_PROTOCOL_IMPLEMENTS(protocol, ROOMLIST, get_list)); -} - -gboolean -pidgin_roomlist_is_showable(void) -{ - GList *c; - PurpleConnection *gc; - - for (c = purple_connections_get_all(); c != NULL; c = c->next) { - gc = c->data; - - if(account_filter_func(purple_connection_get_account(gc), NULL)) { - return TRUE; - } - } - - return FALSE; -} - -static void -pidgin_roomlist_dialog_class_init(PidginRoomlistDialogClass *klass) -{ - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); - - gtk_widget_class_set_template_from_resource( - widget_class, "/im/pidgin/Pidgin3/Roomlist/roomlist.ui"); - - gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, - account_widget); - gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, - view); - gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, - selection); - gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, - filter); - gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, - add_button); - gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, - close_button); - gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, - join_button); - gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, - list_button); - gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, - progress); - gtk_widget_class_bind_template_child(widget_class, PidginRoomlistDialog, - stop_button); - - gtk_widget_class_bind_template_callback(widget_class, close_request_cb); - gtk_widget_class_bind_template_callback(widget_class, row_activated_cb); - gtk_widget_class_bind_template_callback(widget_class, - dialog_select_account_cb); - gtk_widget_class_bind_template_callback(widget_class, - selection_changed_cb); - gtk_widget_class_bind_template_callback(widget_class, - pidgin_roomlist_response_cb); -} - -static void -pidgin_roomlist_dialog_init(PidginRoomlistDialog *self) -{ - GSimpleActionGroup *group = NULL; - GtkCustomFilter *filter = NULL; - - gtk_widget_init_template(GTK_WIDGET(self)); - - filter = gtk_custom_filter_new(account_filter_func, NULL, NULL); - pidgin_account_chooser_set_filter( - PIDGIN_ACCOUNT_CHOOSER(self->account_widget), - GTK_FILTER(filter)); - g_object_unref(filter); - - /* Now setup our actions. */ - group = g_simple_action_group_new(); - g_action_map_add_action_entries(G_ACTION_MAP(group), actions, - G_N_ELEMENTS(actions), self); - gtk_widget_insert_action_group(GTK_WIDGET(self), "roomlist", - G_ACTION_GROUP(group)); -} - -static PidginRoomlistDialog * -pidgin_roomlist_dialog_new_with_account(PurpleAccount *account) -{ - PidginRoomlistDialog *dialog = NULL; - PidginAccountChooser *chooser = NULL; - - dialog = g_object_new(PIDGIN_TYPE_ROOMLIST_DIALOG, NULL); - dialog->account = account; - - chooser = PIDGIN_ACCOUNT_CHOOSER(dialog->account_widget); - - if (!account) { - /* This is normally NULL, and we normally don't care what the - * first selected item is */ - dialog->account = pidgin_account_chooser_get_selected(chooser); - } else { - pidgin_account_chooser_set_selected(chooser, account); - } - - /* show the dialog window and return the dialog */ - gtk_widget_set_visible(GTK_WIDGET(dialog), TRUE); - - return dialog; -} - -void pidgin_roomlist_dialog_show_with_account(PurpleAccount *account) -{ - PidginRoomlistDialog *dialog = pidgin_roomlist_dialog_new_with_account(account); - - pidgin_roomlist_start_listing(dialog); -} - -void pidgin_roomlist_dialog_show(void) -{ - pidgin_roomlist_dialog_new_with_account(NULL); -} - -static gboolean pidgin_progress_bar_pulse(gpointer data) -{ - PurpleRoomlist *list = data; - PidginRoomlist *rl = NULL; - - rl = g_object_get_data(G_OBJECT(list), PIDGIN_ROOMLIST_UI_DATA); - if (!rl || !rl->dialog || !rl->dialog->pg_needs_pulse) { - if (rl && rl->dialog) - rl->dialog->pg_update_to = 0; - g_object_unref(list); - return FALSE; - } - - gtk_progress_bar_pulse(GTK_PROGRESS_BAR(rl->dialog->progress)); - rl->dialog->pg_needs_pulse = FALSE; - return TRUE; -} - -static void -pidgin_roomlist_add_room(PurpleRoomlist *list, PurpleRoomlistRoom *room) { - PidginRoomlist *rl = NULL; - - rl = g_object_get_data(G_OBJECT(list), PIDGIN_ROOMLIST_UI_DATA); - - if (rl->dialog) { - if (rl->dialog->pg_update_to == 0) { - g_object_ref(list); - rl->dialog->pg_update_to = g_timeout_add(100, pidgin_progress_bar_pulse, list); - gtk_progress_bar_pulse(GTK_PROGRESS_BAR(rl->dialog->progress)); - } else - rl->dialog->pg_needs_pulse = TRUE; - } - - g_list_store_append(rl->model, room); -} - -static void -pidgin_roomlist_in_progress(GObject *obj, G_GNUC_UNUSED GParamSpec *pspec, - gpointer data) -{ - PurpleRoomlist *list = PURPLE_ROOMLIST(obj); - PidginRoomlist *rl = data; - - if (purple_roomlist_get_in_progress(list)) { - if (rl->dialog->account_widget) { - gtk_widget_set_sensitive(rl->dialog->account_widget, FALSE); - } - gtk_widget_set_sensitive(rl->dialog->stop_button, TRUE); - gtk_widget_set_sensitive(rl->dialog->list_button, FALSE); - } else { - rl->dialog->pg_needs_pulse = FALSE; - gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(rl->dialog->progress), 0.0); - if (rl->dialog->account_widget) { - gtk_widget_set_sensitive(rl->dialog->account_widget, TRUE); - } - gtk_widget_set_sensitive(rl->dialog->stop_button, FALSE); - gtk_widget_set_sensitive(rl->dialog->list_button, TRUE); - } -} - -static void -pidgin_roomlist_new(PurpleRoomlist *list) -{ - PidginRoomlist *rl = g_new0(PidginRoomlist, 1); - - g_object_set_data_full(G_OBJECT(list), PIDGIN_ROOMLIST_UI_DATA, rl, - (GDestroyNotify)g_free); - - rl->model = g_list_store_new(PURPLE_TYPE_ROOMLIST_ROOM); - - g_signal_connect(list, "notify::in-progress", - G_CALLBACK(pidgin_roomlist_in_progress), rl); -} - -static PurpleRoomlistUiOps ops = { - .show_with_account = pidgin_roomlist_dialog_show_with_account, - .create = pidgin_roomlist_new, - .add_room = pidgin_roomlist_add_room, -}; - - -void pidgin_roomlist_init(void) -{ - purple_roomlist_set_ui_ops(&ops); -}
--- a/pidgin/gtkroomlist.h Sat Apr 13 21:59:37 2024 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -/* pidgin - * - * Pidgin 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 program 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 program 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 program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - */ - -#if !defined(PIDGIN_GLOBAL_HEADER_INSIDE) && !defined(PIDGIN_COMPILATION) -# error "only <pidgin.h> may be included directly" -#endif - -#ifndef _PIDGINROOMLIST_H_ -#define _PIDGINROOMLIST_H_ - -#include <purple.h> - -#include "pidginversion.h" - -G_BEGIN_DECLS - -/** - * pidgin_roomlist_init: - * - * Initializes the room list subsystem. - * - * Since: 2.0 - */ -PIDGIN_AVAILABLE_IN_ALL -void pidgin_roomlist_init(void); - -/** - * pidgin_roomlist_is_showable: - * - * Determines if showing the room list dialog is a valid action. - * - * Returns: TRUE if there are accounts online that support listing - * chat rooms. Otherwise return FALSE. - * - * Since: 2.0 - */ -PIDGIN_AVAILABLE_IN_ALL -gboolean pidgin_roomlist_is_showable(void); - -/** - * pidgin_roomlist_dialog_show: - * - * Shows a new roomlist dialog. - * - * Since: 2.0 - */ -PIDGIN_AVAILABLE_IN_ALL -void pidgin_roomlist_dialog_show(void); - -/** - * pidgin_roomlist_dialog_show_with_account: - * @account: The account to use. - * - * Shows a new room list dialog and fetches the list for the specified account. - * - * Since: 2.0 - */ -PIDGIN_AVAILABLE_IN_ALL -void pidgin_roomlist_dialog_show_with_account(PurpleAccount *account); - -G_END_DECLS - -#endif /* _PIDGINROOMLIST_H_ */
--- a/pidgin/meson.build Sat Apr 13 21:59:37 2024 -0500 +++ b/pidgin/meson.build Sat Apr 13 22:24:47 2024 -0500 @@ -6,7 +6,6 @@ 'gtkmedia.c', 'gtknotify.c', 'gtkrequest.c', - 'gtkroomlist.c', 'gtkutils.c', 'gtkwhiteboard.c', 'libpidgin.c', @@ -60,7 +59,6 @@ 'gtkmedia.h', 'gtknotify.h', 'gtkrequest.h', - 'gtkroomlist.h', 'gtkutils.h', 'gtkwhiteboard.h', 'pidginabout.h',
--- a/pidgin/pidginapplication.c Sat Apr 13 21:59:37 2024 -0500 +++ b/pidgin/pidginapplication.c Sat Apr 13 22:24:47 2024 -0500 @@ -33,7 +33,6 @@ #include "pidginapplication.h" -#include "gtkroomlist.h" #include "pidginabout.h" #include "pidginaccounteditor.h" #include "pidginaccountmanager.h" @@ -221,16 +220,6 @@ "join-channel", }; -/*< private > - * pidgin_application_room_list_actions: - * - * This list keeps track of which actions should only be enabled if an online - * account supports room lists. - */ -static const gchar *pidgin_application_room_list_actions[] = { - "room-list", -}; - /** * pidgin_action_group_actions_set_enable: (skip) * @group: The #PidginActionGroup instance. @@ -494,14 +483,6 @@ purple_core_quit(); } -static void -pidgin_application_room_list(G_GNUC_UNUSED GSimpleAction *simple, - G_GNUC_UNUSED GVariant *parameter, - G_GNUC_UNUSED gpointer data) -{ - pidgin_roomlist_dialog_show(); -} - static GActionEntry app_entries[] = { { .name = "about", @@ -549,9 +530,6 @@ }, { .name = "quit", .activate = pidgin_application_quit, - }, { - .name = "room-list", - .activate = pidgin_application_room_list, } }; @@ -597,7 +575,6 @@ PidginApplication *application = data; PurpleProtocol *protocol = NULL; gboolean should_enable_channel = FALSE; - gboolean should_enable_room_list = FALSE; guint n_actions = 0; n_actions = G_N_ELEMENTS(pidgin_application_online_actions); @@ -622,19 +599,6 @@ n_actions, TRUE); } - - /* likewise, for the room list, we only care about enabling in this - * handler. - */ - should_enable_room_list = PURPLE_PROTOCOL_IMPLEMENTS(protocol, ROOMLIST, - get_list); - if(should_enable_room_list) { - n_actions = G_N_ELEMENTS(pidgin_application_room_list_actions); - pidgin_application_actions_set_enabled(application, - pidgin_application_room_list_actions, - n_actions, - TRUE); - } } static void @@ -646,7 +610,6 @@ GList *connected = NULL; gboolean should_disable_actions = TRUE; gboolean should_disable_channel = TRUE; - gboolean should_disable_room_list = TRUE; guint n_actions = 0; connected = purple_account_manager_get_connected(manager); @@ -667,13 +630,8 @@ should_disable_channel = FALSE; } - /* Check if the protocol implements the room list interface. */ - if(PURPLE_PROTOCOL_IMPLEMENTS(protocol, ROOMLIST, get_list)) { - should_disable_room_list = FALSE; - } - /* If we can't disable anything we can exit the loop early. */ - if(!should_disable_channel && !should_disable_room_list) { + if(!should_disable_channel) { g_clear_list(&connected, NULL); break; @@ -697,14 +655,6 @@ n_actions, FALSE); } - - if(should_disable_room_list) { - n_actions = G_N_ELEMENTS(pidgin_application_room_list_actions); - pidgin_application_actions_set_enabled(application, - pidgin_application_room_list_actions, - n_actions, - FALSE); - } } static void @@ -949,12 +899,6 @@ pidgin_application_channel_actions, n_actions, online); - - n_actions = G_N_ELEMENTS(pidgin_application_room_list_actions); - pidgin_application_actions_set_enabled(application, - pidgin_application_room_list_actions, - n_actions, - online); } static void
--- a/pidgin/pidginui.c Sat Apr 13 21:59:37 2024 -0500 +++ b/pidgin/pidginui.c Sat Apr 13 22:24:47 2024 -0500 @@ -32,7 +32,6 @@ #include "gtkmedia.h" #include "gtknotify.h" -#include "gtkroomlist.h" #include "gtkrequest.h" #include "gtkwhiteboard.h" #include "pidgincore.h" @@ -131,7 +130,6 @@ pidgin_request_init(); pidgin_commands_init(); - pidgin_roomlist_init(); pidgin_medias_init(); pidgin_notify_init();
--- a/pidgin/resources/Roomlist/roomlist.ui Sat Apr 13 21:59:37 2024 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,212 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -Pidgin - Internet Messenger -Copyright (C) Pidgin Developers <devel@pidgin.im> - -This program 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 program 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/>. ---> -<interface> - <requires lib="gtk" version="4.0"/> - <requires lib="pidgin" version="3.0"/> - <!-- interface-license-type gplv2 --> - <!-- interface-name Pidgin --> - <!-- interface-description Internet Messenger --> - <!-- interface-copyright Pidgin Developers <devel@pidgin.im> --> - <template class="PidginRoomlistDialog" parent="GtkDialog"> - <property name="title" translatable="1">Room List</property> - <signal name="close-request" handler="close_request_cb" swapped="no"/> - <signal name="response" handler="pidgin_roomlist_response_cb" swapped="no"/> - <child internal-child="content_area"> - <object class="GtkBox"> - <property name="orientation">vertical</property> - <property name="spacing">12</property> - <child> - <object class="GtkBox"> - <property name="spacing">5</property> - <child> - <object class="GtkLabel" id="label1"> - <property name="halign">start</property> - <property name="label" translatable="1">_Account:</property> - <property name="use-underline">1</property> - <property name="mnemonic-widget">account_widget</property> - </object> - </child> - <child> - <object class="PidginAccountChooser" id="account_widget"> - <property name="hexpand">1</property> - <property name="can-focus">1</property> - <signal name="notify::account" handler="dialog_select_account_cb" swapped="no"/> - <accessibility> - <relation name="labelled-by">label1</relation> - </accessibility> - </object> - </child> - </object> - </child> - <child> - <object class="GtkScrolledWindow" id="sw"> - <property name="vexpand">1</property> - <property name="focusable">1</property> - <property name="min-content-height">250</property> - <property name="child"> - <object class="GtkColumnView" id="view"> - <property name="focusable">1</property> - <property name="model"> - <object class="GtkSingleSelection" id="selection"> - <property name="model"> - <object class="GtkFilterListModel" id="filter"> - <property name="filter"> - <object class="GtkStringFilter"> - <property name="expression"> - <lookup name="name" type="PurpleRoomlistRoom"></lookup> - </property> - <binding name="search"> - <lookup name="text">search-entry</lookup> - </binding> - </object> - </property> - </object> - </property> - <signal name="selection-changed" handler="selection_changed_cb" swapped="no"/> - </object> - </property> - <signal name="activate" handler="row_activated_cb" swapped="no"/> - <child> - <object class="GtkColumnViewColumn"> - <property name="title" translatable="1">Name</property> - <property name="factory"> - <object class="GtkBuilderListItemFactory"> - <property name="bytes"> -<![CDATA[ -<?xml version="1.0" encoding="UTF-8"?> -<interface> - <template class="GtkListItem"> - <property name="child"> - <object class="GtkLabel"> - <property name="xalign">0</property> - <binding name="label"> - <lookup name="name" type="PurpleRoomlistRoom"> - <lookup name="item">GtkListItem</lookup> - </lookup> - </binding> - </object> - </property> - </template> -</interface> -]]> - </property> - </object> - </property> - </object> - </child> - <child> - <object class="GtkColumnViewColumn"> - <property name="expand">1</property> - <property name="title" translatable="1">Description</property> - <property name="factory"> - <object class="GtkBuilderListItemFactory"> - <property name="bytes"> -<![CDATA[ -<?xml version="1.0" encoding="UTF-8"?> -<interface> - <template class="GtkListItem"> - <property name="child"> - <object class="GtkLabel"> - <property name="xalign">0</property> - <binding name="label"> - <lookup name="description" type="PurpleRoomlistRoom"> - <lookup name="item">GtkListItem</lookup> - </lookup> - </binding> - </object> - </property> - </template> -</interface> -]]> - </property> - </object> - </property> - </object> - </child> - </object> - </property> - </object> - </child> - <child> - <object class="GtkSearchBar"> - <property name="key-capture-widget">PidginRoomlistDialog</property> - <property name="child"> - <object class="GtkSearchEntry" id="search-entry"> - </object> - </property> - </object> - </child> - <child> - <object class="GtkProgressBar" id="progress"> - </object> - </child> - </object> - </child> - <child type="action"> - <object class="GtkButton" id="stop_button"> - <property name="label">_Stop</property> - <property name="sensitive">0</property> - <property name="focusable">1</property> - <property name="receives-default">1</property> - <property name="use-underline">1</property> - </object> - </child> - <child type="action"> - <object class="GtkButton" id="list_button"> - <property name="label" translatable="1">_Get List</property> - <property name="focusable">1</property> - <property name="receives-default">1</property> - <property name="use-underline">1</property> - </object> - </child> - <child type="action"> - <object class="GtkButton" id="add_button"> - <property name="label" translatable="1">_Add Chat</property> - <property name="sensitive">0</property> - <property name="focusable">1</property> - <property name="receives-default">1</property> - <property name="use-underline">1</property> - </object> - </child> - <child type="action"> - <object class="GtkButton" id="join_button"> - <property name="label" translatable="1">_Join</property> - <property name="sensitive">0</property> - <property name="focusable">1</property> - <property name="receives-default">1</property> - <property name="use-underline">1</property> - </object> - </child> - <child type="action"> - <object class="GtkButton" id="close_button"> - <property name="label">_Close</property> - <property name="focusable">1</property> - <property name="receives-default">1</property> - <property name="use-underline">1</property> - </object> - </child> - <action-widgets> - <action-widget response="0">stop_button</action-widget> - <action-widget response="1">list_button</action-widget> - <action-widget response="2">add_button</action-widget> - <action-widget response="3">join_button</action-widget> - <action-widget response="close">close_button</action-widget> - </action-widgets> - </template> -</interface>
--- a/pidgin/resources/gtk/menus.ui Sat Apr 13 21:59:37 2024 -0500 +++ b/pidgin/resources/gtk/menus.ui Sat Apr 13 22:24:47 2024 -0500 @@ -72,10 +72,6 @@ <attribute name="label" translatable="yes">_File Transfers</attribute> <attribute name="action">app.file-transfers</attribute> </item> - <item> - <attribute name="label" translatable="yes">R_oom List</attribute> - <attribute name="action">app.room-list</attribute> - </item> </section> <section>
--- a/pidgin/resources/pidgin.gresource.xml Sat Apr 13 21:59:37 2024 -0500 +++ b/pidgin/resources/pidgin.gresource.xml Sat Apr 13 22:24:47 2024 -0500 @@ -29,7 +29,6 @@ <file compressed="true" preprocess="xml-stripblanks">Prefs/vv.ui</file> <file compressed="true" preprocess="xml-stripblanks">Protocols/chooser.ui</file> <file compressed="true" preprocess="xml-stripblanks">Protocols/detailed-view.ui</file> - <file compressed="true" preprocess="xml-stripblanks">Roomlist/roomlist.ui</file> <file compressed="true" preprocess="xml-stripblanks">Whiteboard/whiteboard.ui</file> <file compressed="true" preprocess="xml-stripblanks">gtk/help-overlay.ui</file> <file compressed="true" preprocess="xml-stripblanks">gtk/menus.ui</file>
--- a/po/POTFILES.in Sat Apr 13 21:59:37 2024 -0500 +++ b/po/POTFILES.in Sat Apr 13 22:24:47 2024 -0500 @@ -118,7 +118,6 @@ pidgin/gtkmedia.c pidgin/gtknotify.c pidgin/gtkrequest.c -pidgin/gtkroomlist.c pidgin/gtkutils.c pidgin/gtkwhiteboard.c pidgin/libpidgin.c @@ -185,7 +184,6 @@ pidgin/resources/Prefs/vv.ui pidgin/resources/Protocols/chooser.ui pidgin/resources/Protocols/detailed-view.ui -pidgin/resources/Roomlist/roomlist.ui pidgin/resources/Whiteboard/whiteboard.ui pidgin/resources/gtk/menus.ui pidgin/resources/account-row.ui