pidgin/pidgin

Add a filter property to PidginAccountChooser

19 months ago, Elliott Sales de Andrade
ff94f8ff8a70
Parents 3c3901fbe549
Children 38e61d11b89f
Add a filter property to PidginAccountChooser

This replaces the old `pidgin_account_chooser_set_filter_func`.

It also currently does nothing, but neither did the old code.

Testing Done:
Compiled only.

Reviewed at https://reviews.imfreedom.org/r/1995/
--- 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 @@
}
static gboolean
-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 (gc == NULL)
+ if(!PURPLE_IS_ACCOUNT(item)) {
return FALSE;
+ }
+
+ gc = purple_account_get_connection(PURPLE_ACCOUNT(item));
+ if(gc == NULL) {
+ return FALSE;
+ }
protocol = purple_connection_get_protocol(gc);
@@ -970,8 +975,9 @@
for (c = purple_connections_get_all(); c != NULL; c = c->next) {
gc = c->data;
- if (chat_account_filter_func(purple_connection_get_account(gc)))
+ if(chat_account_filter_func(purple_connection_get_account(gc), NULL)) {
return TRUE;
+ }
}
return FALSE;
@@ -980,7 +986,7 @@
static void
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,
GCallback response_cb)
{
GtkWidget *label;
@@ -990,6 +996,7 @@
GtkWidget *vbox;
GtkWindow *blist_window;
GtkTreeModel *model = NULL, *filter = NULL;
+ GtkCustomFilter *custom_filter = NULL;
PidginBuddyList *gtkblist;
data->account = account;
@@ -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 @@
return widget;
}
+static gboolean
+field_custom_account_filter_cb(gpointer item, G_GNUC_UNUSED gpointer data) {
+ PurpleFilterAccountFunc func = data;
+ gboolean ret = FALSE;
+
+ if(PURPLE_IS_ACCOUNT(item)) {
+ ret = func(PURPLE_ACCOUNT(item));
+ }
+
+ return ret;
+}
+
static GtkWidget *
create_account_field(PurpleRequestField *field)
{
GtkWidget *widget;
PurpleAccount *account;
+ 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),
account);
- pidgin_account_chooser_set_filter_func(
+ custom_filter = gtk_custom_filter_new(
+ field_custom_account_filter_cb,
+ purple_request_field_account_get_filter(field),
+ NULL);
+ 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),
field);
--- 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 @@
return TRUE;
}
-static gboolean account_filter_func(PurpleAccount *account)
-{
- PurpleConnection *conn = purple_account_get_connection(account);
+static gboolean
+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) {
gc = c->data;
- if (account_filter_func(purple_connection_get_account(gc)))
+ if(account_filter_func(purple_connection_get_account(gc), NULL)) {
return TRUE;
+ }
}
return FALSE;
@@ -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),
- account_filter_func);
+ GTK_FILTER(filter));
+ 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 {
GtkComboBox parent;
- PurpleFilterAccountFunc filter_func;
+ GtkFilter *filter;
};
enum
{
PROP_0,
PROP_ACCOUNT,
+ PROP_FILTER,
PROP_LAST
};
@@ -64,6 +65,9 @@
case PROP_ACCOUNT:
g_value_set_object(value, pidgin_account_chooser_get_selected(chooser));
break;
+ case PROP_FILTER:
+ g_value_set_object(value, pidgin_account_chooser_get_filter(chooser));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
@@ -81,6 +85,10 @@
pidgin_account_chooser_set_selected(chooser,
g_value_get_object(value));
break;
+ case PROP_FILTER:
+ pidgin_account_chooser_set_filter(chooser,
+ g_value_get_object(value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
@@ -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);
+ PURPLE_TYPE_ACCOUNT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_FILTER] = g_param_spec_object(
+ "filter", "filter",
+ "The filter to be applied on the list of accounts.",
+ GTK_TYPE_FILTER,
+ 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);
}
+GtkFilter *
+pidgin_account_chooser_get_filter(PidginAccountChooser *chooser) {
+ g_return_val_if_fail(PIDGIN_IS_ACCOUNT_CHOOSER(chooser), NULL);
+
+ return chooser->filter;
+}
+
void
-pidgin_account_chooser_set_filter_func(PidginAccountChooser *chooser,
- PurpleFilterAccountFunc filter_func)
+pidgin_account_chooser_set_filter(PidginAccountChooser *chooser,
+ GtkFilter *filter)
{
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]);
+ }
}
PurpleAccount *
--- 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
+ * displayed.
*
* Since: 3.0.0
*/
-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.
+ * @filter: The filter.
+ *
+ * Sets the current list filter for the account chooser.
+ *
+ * Since: 3.0.0
+ */
+void pidgin_account_chooser_set_filter(PidginAccountChooser *chooser, GtkFilter *filter);
/**
* pidgin_account_chooser_get_selected: