--- a/pidgin/gtkblist.c Sat Oct 29 00:08:34 2022 -0500
+++ b/pidgin/gtkblist.c Sat Oct 29 00:52:04 2022 -0500
@@ -948,13 +948,18 @@
-chat_account_filter_func(PurpleAccount *account)
- PurpleConnection *gc = purple_account_get_connection(account);
+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);
@@ -970,8 +975,9 @@
for (c = purple_connections_get_all(); c != NULL; c = c->next) {
- if (chat_account_filter_func(purple_connection_get_account(gc)))
+ if(chat_account_filter_func(purple_connection_get_account(gc), NULL)) { @@ -980,7 +986,7 @@
make_blist_request_dialog(PidginBlistRequestData *data, PurpleAccount *account,
const char *title, const char *window_role, const char *label_text,
- GCallback callback_func, PurpleFilterAccountFunc filter_func,
+ GCallback callback_func, GtkCustomFilterFunc filter_func, @@ -990,6 +996,7 @@
GtkTreeModel *model = NULL, *filter = NULL;
+ GtkCustomFilter *custom_filter = NULL; PidginBuddyList *gtkblist;
@@ -1040,8 +1047,12 @@
gtk_combo_box_set_active(GTK_COMBO_BOX(data->account_menu), 0);
- pidgin_account_chooser_set_filter_func(
- PIDGIN_ACCOUNT_CHOOSER(data->account_menu), filter_func);
+ custom_filter = gtk_custom_filter_new(filter_func, NULL, NULL); + pidgin_account_chooser_set_filter( + PIDGIN_ACCOUNT_CHOOSER(data->account_menu), + GTK_FILTER(custom_filter)); + g_object_unref(custom_filter); pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("A_ccount"), data->sg, data->account_menu, TRUE, NULL);
g_signal_connect(data->account_menu, "changed",
G_CALLBACK(callback_func), data);
--- a/pidgin/gtkrequest.c Sat Oct 29 00:08:34 2022 -0500
+++ b/pidgin/gtkrequest.c Sat Oct 29 00:52:04 2022 -0500
@@ -1385,11 +1385,24 @@
+field_custom_account_filter_cb(gpointer item, G_GNUC_UNUSED gpointer data) { + PurpleFilterAccountFunc func = data; + if(PURPLE_IS_ACCOUNT(item)) { + ret = func(PURPLE_ACCOUNT(item)); create_account_field(PurpleRequestField *field)
+ GtkCustomFilter *custom_filter = NULL; widget = pidgin_account_chooser_new();
account = purple_request_field_account_get_default_value(field);
@@ -1415,9 +1428,15 @@
pidgin_account_chooser_set_selected(PIDGIN_ACCOUNT_CHOOSER(widget),
- pidgin_account_chooser_set_filter_func(
+ custom_filter = gtk_custom_filter_new( + field_custom_account_filter_cb, + purple_request_field_account_get_filter(field), + pidgin_account_chooser_set_filter( PIDGIN_ACCOUNT_CHOOSER(widget),
- purple_request_field_account_get_filter(field));
+ GTK_FILTER(custom_filter)); + g_object_unref(custom_filter); g_signal_connect(widget, "changed", G_CALLBACK(field_account_cb),
--- a/pidgin/gtkroomlist.c Sat Oct 29 00:08:34 2022 -0500
+++ b/pidgin/gtkroomlist.c Sat Oct 29 00:52:04 2022 -0500
@@ -444,13 +444,17 @@
-static gboolean account_filter_func(PurpleAccount *account)
- PurpleConnection *conn = purple_account_get_connection(account);
+account_filter_func(gpointer item, G_GNUC_UNUSED gpointer data) { PurpleProtocol *protocol = NULL;
- if (conn && PURPLE_CONNECTION_IS_CONNECTED(conn))
- protocol = purple_connection_get_protocol(conn);
+ 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));
@@ -464,8 +468,9 @@
for (c = purple_connections_get_all(); c != NULL; c = c->next) {
- if (account_filter_func(purple_connection_get_account(gc)))
+ if(account_filter_func(purple_connection_get_account(gc), NULL)) { @@ -517,12 +522,15 @@
pidgin_roomlist_dialog_init(PidginRoomlistDialog *self)
GSimpleActionGroup *group = NULL;
+ GtkCustomFilter *filter = NULL; gtk_widget_init_template(GTK_WIDGET(self));
- pidgin_account_chooser_set_filter_func(
+ filter = gtk_custom_filter_new(account_filter_func, NULL, NULL); + pidgin_account_chooser_set_filter( PIDGIN_ACCOUNT_CHOOSER(self->account_widget),
+ g_object_unref(filter); gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(self->tree),
_search_func, NULL, NULL);
--- a/pidgin/pidginaccountchooser.c Sat Oct 29 00:08:34 2022 -0500
+++ b/pidgin/pidginaccountchooser.c Sat Oct 29 00:52:04 2022 -0500
@@ -29,13 +29,14 @@
struct _PidginAccountChooser {
- PurpleFilterAccountFunc filter_func;
@@ -64,6 +65,9 @@
g_value_set_object(value, pidgin_account_chooser_get_selected(chooser));
+ g_value_set_object(value, pidgin_account_chooser_get_filter(chooser)); G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
@@ -81,6 +85,10 @@
pidgin_account_chooser_set_selected(chooser,
g_value_get_object(value));
+ pidgin_account_chooser_set_filter(chooser, + g_value_get_object(value)); G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
@@ -99,7 +107,14 @@
properties[PROP_ACCOUNT] = g_param_spec_object(
"account", "Account", "The account that is currently selected.",
- PURPLE_TYPE_ACCOUNT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + properties[PROP_FILTER] = g_param_spec_object( + "The filter to be applied on the list of accounts.", + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(obj_class, PROP_LAST, properties);
@@ -129,13 +144,22 @@
return GTK_WIDGET(chooser);
+pidgin_account_chooser_get_filter(PidginAccountChooser *chooser) { + g_return_val_if_fail(PIDGIN_IS_ACCOUNT_CHOOSER(chooser), NULL); + return chooser->filter; -pidgin_account_chooser_set_filter_func(PidginAccountChooser *chooser,
- PurpleFilterAccountFunc filter_func)
+pidgin_account_chooser_set_filter(PidginAccountChooser *chooser, g_return_if_fail(PIDGIN_IS_ACCOUNT_CHOOSER(chooser));
- chooser->filter_func = filter_func;
+ if(g_set_object(&chooser->filter, filter)) { + g_object_notify_by_pspec(G_OBJECT(chooser), properties[PROP_FILTER]); --- a/pidgin/pidginaccountchooser.h Sat Oct 29 00:08:34 2022 -0500
+++ b/pidgin/pidginaccountchooser.h Sat Oct 29 00:52:04 2022 -0500
@@ -49,17 +49,28 @@
GtkWidget *pidgin_account_chooser_new(void);
- * pidgin_account_chooser_set_filter_func:
- * @chooser: The account chooser combo box.
- * @filter_func: (scope notified): A function for checking if an account should be shown. This
- * can be %NULL to remove any filter.
+ * pidgin_account_chooser_get_filter: + * @chooser: The chooser. - * Set the filter function used to determine which accounts to show.
+ * Gets the filter used to determine which accounts to show. + * Returns: (transfer none): Returns the #GtkFilter that is currently -void pidgin_account_chooser_set_filter_func(
- PidginAccountChooser *chooser, PurpleFilterAccountFunc filter_func);
+GtkFilter *pidgin_account_chooser_get_filter(PidginAccountChooser *chooser); + * pidgin_account_chooser_set_filter: + * @chooser: The chooser. + * Sets the current list filter for the account chooser. +void pidgin_account_chooser_set_filter(PidginAccountChooser *chooser, GtkFilter *filter); * pidgin_account_chooser_get_selected: