Remove gtkblist
The only thing that was still being used here was the join chat dialog which
we're migrating everything over to join channel so it didn't make sense to
keep it around.
Testing Done:
Consulted with the turtles and connected a demo and ircv3 account.
Reviewed at https://reviews.imfreedom.org/r/2893/
--- a/doc/reference/pidgin/meson.build Sat Dec 30 18:22:52 2023 -0600
+++ b/doc/reference/pidgin/meson.build Sat Dec 30 18:28:59 2023 -0600
@@ -1,5 +1,4 @@
pidgin_doc_content_files = [
--- a/doc/reference/pidgin/pidgin.toml.in Sat Dec 30 18:22:52 2023 -0600
+++ b/doc/reference/pidgin/pidgin.toml.in Sat Dec 30 18:28:59 2023 -0600
@@ -52,7 +52,6 @@
# The same order will be used when generating the index
--- a/doc/reference/pidgin/signals_gtkblist.md Sat Dec 30 18:22:52 2023 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-Title: Buddy List Signals
-void user_function(PurpleBuddyList *blist, gpointer user_data);
-Emitted when the buddy list is created.
-: User data set when the signal handler was connected.
-void user_function(PurpleBlistNode *node, GString *text, gboolean full, gpointer user_data);
-Emitted just before a tooltip is displayed. `text` is a standard GString, so
-the plugin can modify the text that will be displayed.
-: The blist node for the tooltip.
-: A pointer to the text that will be displayed.
-: Whether we're doing a full tooltip for the priority buddy or a compact
-tooltip for a non-priority buddy.
-: User data set when the signal handler was connected.
--- a/pidgin/gtkblist.c Sat Dec 30 18:22:52 2023 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,467 +0,0 @@
- * 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
- * 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 <purpleconfig.h>
-#include <glib/gi18n-lib.h>
-#include "gtkroomlist.h"
-#include "pidgin/pidginaccountchooser.h"
-#include "pidgin/pidginaccountfilterconnected.h"
-#include "pidgin/pidginaddbuddydialog.h"
- PurpleAccount *account;
- GtkWidget *account_menu;
-} PidginBlistRequestData;
- PidginBlistRequestData rq_data;
- gchar *default_chat_name;
-G_DEFINE_TYPE(PidginBuddyList, pidgin_buddy_list, PURPLE_TYPE_BUDDY_LIST)
-/******************************************************************************
- *****************************************************************************/
-static void gtk_blist_join_chat(PurpleChat *chat)
- PurpleAccount *account;
- GHashTable *components;
- account = purple_chat_get_account(chat);
- components = purple_chat_get_components(chat);
- purple_serv_join_chat(purple_account_get_connection(account), components);
-/******************************************************************************
- *****************************************************************************/
-do_join_chat(PidginChatData *data)
- GHashTable *components =
- g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
- for (tmp = data->entries; tmp != NULL; tmp = tmp->next)
- if (g_object_get_data(tmp->data, "is_spin"))
- g_hash_table_replace(components,
- g_strdup(g_object_get_data(tmp->data, "identifier")),
- gtk_spin_button_get_value_as_int(tmp->data)));
- g_hash_table_replace(components,
- g_strdup(g_object_get_data(tmp->data, "identifier")),
- g_strdup(gtk_editable_get_text(GTK_EDITABLE(tmp->data))));
- chat = purple_chat_new(data->rq_data.account, NULL, components);
- gtk_blist_join_chat(chat);
- purple_blist_remove_chat(chat);
-do_joinchat(GtkWidget *dialog, int id, PidginChatData *info)
- pidgin_roomlist_dialog_show_with_account(info->rq_data.account);
- gtk_window_destroy(GTK_WINDOW(dialog));
- g_list_free(info->entries);
- * Check the values of all the text entry boxes. If any required input
- * strings are empty then don't allow the user to click on "OK."
-set_sensitive_if_input_chat_cb(G_GNUC_UNUSED GtkWidget *entry,
- PurpleProtocol *protocol;
- gboolean sensitive = TRUE;
- for (tmp = data->entries; tmp != NULL; tmp = tmp->next)
- if (!g_object_get_data(tmp->data, "is_spin"))
- required = GPOINTER_TO_INT(g_object_get_data(tmp->data, "required"));
- text = gtk_editable_get_text(GTK_EDITABLE(tmp->data));
- if (required && (*text == '\0'))
- gtk_dialog_set_response_sensitive(GTK_DIALOG(data->rq_data.window), GTK_RESPONSE_OK, sensitive);
- gc = purple_account_get_connection(data->rq_data.account);
- protocol = (gc != NULL) ? purple_connection_get_protocol(gc) : NULL;
- sensitive = (protocol != NULL && PURPLE_PROTOCOL_IMPLEMENTS(protocol, ROOMLIST, get_list));
- gtk_dialog_set_response_sensitive(GTK_DIALOG(data->rq_data.window), 1, sensitive);
-chat_account_filter_func(gpointer item, G_GNUC_UNUSED gpointer data) {
- PurpleConnection *gc = NULL;
- PurpleProtocol *protocol = NULL;
- if(!PURPLE_IS_ACCOUNT(item)) {
- gc = purple_account_get_connection(PURPLE_ACCOUNT(item));
- protocol = purple_connection_get_protocol(gc);
- return (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, info));
-pidgin_blist_joinchat_is_showable(void)
- for (c = purple_connections_get_all(); c != NULL; c = c->next) {
- if(chat_account_filter_func(purple_connection_get_account(gc), NULL)) {
-make_blist_request_dialog(PidginBlistRequestData *data, PurpleAccount *account,
- const char *title, const char *label_text,
- GCallback callback_func,
- GtkCustomFilterFunc filter_func,
- GtkWidget *content_area;
- GtkEveryFilter *every = NULL;
- GtkFilter *filter = NULL;
- data->account = account;
- data->window = gtk_dialog_new();
- gtk_window_set_title(GTK_WINDOW(data->window), title);
- gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK);
- gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE);
- content_area = gtk_dialog_get_content_area(GTK_DIALOG(data->window));
- gtk_box_set_spacing(GTK_BOX(content_area), 12);
- hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
- gtk_box_append(GTK_BOX(content_area), hbox);
- img = gtk_image_new_from_icon_name("dialog-question");
- gtk_image_set_icon_size(GTK_IMAGE(img), GTK_ICON_SIZE_LARGE);
- gtk_box_append(GTK_BOX(hbox), img);
- gtk_widget_set_halign(img, GTK_ALIGN_START);
- gtk_widget_set_valign(img, GTK_ALIGN_START);
- vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
- gtk_box_append(GTK_BOX(hbox), vbox);
- label = gtk_label_new(label_text);
- gtk_widget_set_size_request(label, 400, -1);
- gtk_label_set_wrap(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0);
- gtk_label_set_yalign(GTK_LABEL(label), 0);
- gtk_box_append(GTK_BOX(vbox), label);
- data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
- data->account_menu = pidgin_account_chooser_new();
- every = gtk_every_filter_new();
- filter = pidgin_account_filter_connected_new();
- gtk_multi_filter_append(GTK_MULTI_FILTER(every), filter);
- filter = GTK_FILTER(gtk_custom_filter_new(filter_func, NULL, NULL));
- gtk_multi_filter_append(GTK_MULTI_FILTER(every), filter);
- pidgin_account_chooser_set_filter(
- PIDGIN_ACCOUNT_CHOOSER(data->account_menu),
- if(PURPLE_IS_ACCOUNT(account)) {
- pidgin_account_chooser_set_selected(PIDGIN_ACCOUNT_CHOOSER(
- data->account_menu), account);
- pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("A_ccount"), data->sg, data->account_menu, TRUE, NULL);
- g_signal_connect(data->account_menu, "notify::account",
- G_CALLBACK(callback_func), data);
- data->vbox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 5));
- gtk_box_append(GTK_BOX(vbox), GTK_WIDGET(data->vbox));
- g_signal_connect(G_OBJECT(data->window), "response", response_cb, data);
- g_object_unref(data->sg);
-rebuild_chat_entries(PidginChatData *data, const char *default_chat_name)
- PurpleProtocol *protocol;
- GtkWidget *child = NULL;
- GList *list = NULL, *tmp;
- GHashTable *defaults = NULL;
- PurpleProtocolChatEntry *pce;
- g_return_if_fail(data->rq_data.account != NULL);
- gc = purple_account_get_connection(data->rq_data.account);
- protocol = purple_connection_get_protocol(gc);
- child = gtk_widget_get_first_child(GTK_WIDGET(data->rq_data.vbox));
- while (child != NULL) {
- gtk_widget_unparent(child);
- child = gtk_widget_get_first_child(GTK_WIDGET(data->rq_data.vbox));
- g_clear_list(&data->entries, NULL);
- if(!PURPLE_IS_PROTOCOL_CHAT(protocol)) {
- list = purple_protocol_chat_info(PURPLE_PROTOCOL_CHAT(protocol), gc);
- defaults = purple_protocol_chat_info_defaults(PURPLE_PROTOCOL_CHAT(protocol),
- gc, default_chat_name);
- for (tmp = list; tmp; tmp = tmp->next)
- adjust = GTK_ADJUSTMENT(gtk_adjustment_new(pce->min,
- input = gtk_spin_button_new(adjust, 1, 0);
- gtk_widget_set_size_request(input, 50, -1);
- pidgin_add_widget_to_vbox(GTK_BOX(data->rq_data.vbox), pce->label, data->rq_data.sg, input, FALSE, NULL);
- input = gtk_entry_new();
- gtk_entry_set_activates_default(GTK_ENTRY(input), TRUE);
- value = g_hash_table_lookup(defaults, pce->identifier);
- gtk_editable_set_text(GTK_EDITABLE(input), value);
- gtk_entry_set_visibility(GTK_ENTRY(input), FALSE);
- pidgin_add_widget_to_vbox(data->rq_data.vbox, pce->label, data->rq_data.sg, input, TRUE, NULL);
- g_signal_connect(G_OBJECT(input), "changed",
- G_CALLBACK(set_sensitive_if_input_chat_cb), data);
- /* Do the following for any type of input widget */
- gtk_widget_grab_focus(input);
- g_object_set_data(G_OBJECT(input), "identifier", (gpointer)pce->identifier);
- g_object_set_data(G_OBJECT(input), "is_spin", GINT_TO_POINTER(pce->is_int));
- g_object_set_data(G_OBJECT(input), "required", GINT_TO_POINTER(pce->required));
- data->entries = g_list_append(data->entries, input);
- g_hash_table_destroy(defaults);
- /* Set whether the "OK" button should be clickable initially */
- set_sensitive_if_input_chat_cb(NULL, data);
-chat_select_account_cb(GObject *obj, G_GNUC_UNUSED GParamSpec *pspec,
- PidginChatData *data = user_data;
- PidginAccountChooser *chooser = PIDGIN_ACCOUNT_CHOOSER(obj);
- PurpleAccount *account = pidgin_account_chooser_get_selected(chooser);
- g_return_if_fail(data != NULL);
- if (purple_strequal(purple_account_get_protocol_id(data->rq_data.account),
- purple_account_get_protocol_id(account)))
- data->rq_data.account = account;
- data->rq_data.account = account;
- rebuild_chat_entries(data, data->default_chat_name);
-pidgin_blist_joinchat_show(void)
- PidginChatData *data = NULL;
- PidginAccountChooser *chooser = NULL;
- data = g_new0(PidginChatData, 1);
- make_blist_request_dialog((PidginBlistRequestData *)data, NULL,
- _("Please enter the appropriate information about the chat "
- "you would like to join.\n"),
- G_CALLBACK(chat_select_account_cb),
- chat_account_filter_func, (GCallback)do_joinchat);
- gtk_dialog_add_buttons(GTK_DIALOG(data->rq_data.window),
- _("Cancel"), GTK_RESPONSE_CANCEL,
- _("_Join"), GTK_RESPONSE_OK, NULL);
- gtk_dialog_set_default_response(GTK_DIALOG(data->rq_data.window),
- data->default_chat_name = NULL;
- chooser = PIDGIN_ACCOUNT_CHOOSER(data->rq_data.account_menu);
- data->rq_data.account = pidgin_account_chooser_get_selected(chooser);
- rebuild_chat_entries(data, NULL);
- gtk_widget_set_visible(data->rq_data.window, TRUE);
-pidgin_blist_request_add_buddy(G_GNUC_UNUSED PurpleBuddyList *list,
- PurpleAccount *account, const char *username,
- const char *group, const char *alias)
- GtkWidget *dialog = NULL;
- dialog = pidgin_add_buddy_dialog_new(account, username, alias, NULL, group);
- gtk_widget_set_visible(dialog, TRUE);
-add_group_cb(G_GNUC_UNUSED PurpleConnection *connection,
- const char *group_name)
- if ((group_name == NULL) || (*group_name == '\0'))
- group = purple_group_new(group_name);
- purple_blist_add_group(group, NULL);
-pidgin_blist_request_add_group(G_GNUC_UNUSED PurpleBuddyList *list)
- purple_request_input(NULL, _("Add Group"), NULL,
- _("Please enter the name of the group to be added."),
- NULL, FALSE, FALSE, NULL,
- _("Add"), G_CALLBACK(add_group_cb),
-/**************************************************************************
- * GTK Buddy list GObject code
- **************************************************************************/
-pidgin_buddy_list_init(G_GNUC_UNUSED PidginBuddyList *self)
-pidgin_buddy_list_class_init(PidginBuddyListClass *klass) {
- PurpleBuddyListClass *purple_blist_class = PURPLE_BUDDY_LIST_CLASS(klass);
- purple_blist_class->request_add_buddy = pidgin_blist_request_add_buddy;
- purple_blist_class->request_add_group = pidgin_blist_request_add_group;
--- a/pidgin/gtkblist.h Sat Dec 30 18:22:52 2023 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
- * 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
- * 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"
-#include "pidginversion.h"
-#define PIDGIN_TYPE_BUDDY_LIST (pidgin_buddy_list_get_type())
-typedef struct _PidginBuddyList PidginBuddyList;
-/**************************************************************************
- **************************************************************************/
- * The remnants of the buddy list, soon to be lost to the wind.
-struct _PidginBuddyList {
- PurpleBuddyList parent;
-/**************************************************************************
- **************************************************************************/
-G_DECLARE_FINAL_TYPE(PidginBuddyList, pidgin_buddy_list, PIDGIN, BUDDY_LIST,
- * pidgin_blist_joinchat_is_showable:
- * Determines if showing the join chat dialog is a valid action.
- * Returns: Returns TRUE if there are accounts online capable of
- * joining chat rooms. Otherwise returns FALSE.
-gboolean pidgin_blist_joinchat_is_showable(void);
- * pidgin_blist_joinchat_show:
- * Shows the join chat dialog.
-void pidgin_blist_joinchat_show(void);
-#endif /* _PIDGINBLIST_H_ */
--- a/pidgin/gtkdialogs.c Sat Dec 30 18:22:52 2023 -0600
+++ b/pidgin/gtkdialogs.c Sat Dec 30 18:28:59 2023 -0600
@@ -27,7 +27,6 @@
--- a/pidgin/gtknotify.c Sat Dec 30 18:22:52 2023 -0600
+++ b/pidgin/gtknotify.c Sat Dec 30 18:28:59 2023 -0600
@@ -25,7 +25,6 @@
--- a/pidgin/gtkrequest.c Sat Dec 30 18:22:52 2023 -0600
+++ b/pidgin/gtkrequest.c Sat Dec 30 18:28:59 2023 -0600
@@ -24,7 +24,6 @@
#include "pidginaccountdisplay.h"
#include "pidginaccountfilterconnected.h"
--- a/pidgin/meson.build Sat Dec 30 18:22:52 2023 -0600
+++ b/pidgin/meson.build Sat Dec 30 18:28:59 2023 -0600
@@ -3,7 +3,6 @@
@@ -65,7 +64,6 @@
--- a/pidgin/pidginapplication.c Sat Dec 30 18:22:52 2023 -0600
+++ b/pidgin/pidginapplication.c Sat Dec 30 18:28:59 2023 -0600
@@ -33,7 +33,6 @@
#include "pidginapplication.h"
@@ -456,14 +455,6 @@
-pidgin_application_join_chat(G_GNUC_UNUSED GSimpleAction *simple,
- G_GNUC_UNUSED GVariant *parameter,
- G_GNUC_UNUSED gpointer data)
- pidgin_blist_joinchat_show();
pidgin_application_new_message(G_GNUC_UNUSED GSimpleAction *simple,
G_GNUC_UNUSED GVariant *parameter,
G_GNUC_UNUSED gpointer data)
@@ -575,9 +566,6 @@
.activate = pidgin_application_join_channel,
- .activate = pidgin_application_join_chat,
.name = "manage-accounts",
.activate = pidgin_application_accounts,
--- a/pidgin/pidginui.c Sat Dec 30 18:22:52 2023 -0600
+++ b/pidgin/pidginui.c Sat Dec 30 18:28:59 2023 -0600
@@ -30,7 +30,6 @@
@@ -128,7 +127,6 @@
pidgin_ui_protocol_foreach_theme_cb, NULL);
/* Set the UI operation structures. */
- purple_blist_set_ui(PIDGIN_TYPE_BUDDY_LIST);
purple_notify_set_ui_ops(pidgin_notify_get_ui_ops());
purple_request_set_ui_ops(pidgin_request_get_ui_ops());
purple_whiteboard_set_ui_ops(pidgin_whiteboard_get_ui_ops());
--- a/pidgin/resources/gtk/menus.ui Sat Dec 30 18:22:52 2023 -0600
+++ b/pidgin/resources/gtk/menus.ui Sat Dec 30 18:28:59 2023 -0600
@@ -37,10 +37,6 @@
<attribute name="label" translatable="yes">Join Channel</attribute>
<attribute name="action">app.join-channel</attribute>
- <attribute name="label" translatable="yes">Join a _Chat...</attribute>
- <attribute name="action">app.join-chat</attribute>
--- a/po/POTFILES.in Sat Dec 30 18:22:52 2023 -0600
+++ b/po/POTFILES.in Sat Dec 30 18:28:59 2023 -0600
@@ -232,7 +232,6 @@
libpurple/win32/win32dep.c
pidgin/data/im.pidgin.Pidgin3.metainfo.xml