diff -r 0067a0ff5b74 -r 6f490dec468f pidgin/pidginaccountfilterconnected.c --- a/pidgin/pidginaccountfilterconnected.c Sat Oct 29 02:05:16 2022 -0500 +++ b/pidgin/pidginaccountfilterconnected.c Sun Oct 30 03:29:33 2022 -0500 @@ -22,12 +22,10 @@ #include "pidgin/pidginaccountfilterconnected.h" -#include "pidgin/pidginaccountstore.h" - #include struct _PidginAccountFilterConnected { - GtkTreeModelFilter parent; + GtkFilter parent; }; /****************************************************************************** @@ -38,36 +36,35 @@ gpointer data) { PidginAccountFilterConnected *filter = NULL; + PurpleConnectionState state; filter = PIDGIN_ACCOUNT_FILTER_CONNECTED(data); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(filter)); + state = purple_connection_get_state(connection); + gtk_filter_changed(GTK_FILTER(filter), + (state == PURPLE_CONNECTION_STATE_CONNECTED) ? + GTK_FILTER_CHANGE_LESS_STRICT : + GTK_FILTER_CHANGE_MORE_STRICT); } /****************************************************************************** - * GObject Implementation + * GtkFilter Implementation *****************************************************************************/ +static GtkFilterMatch +pidgin_account_filter_connected_get_strictness(G_GNUC_UNUSED GtkFilter *self) { + return GTK_FILTER_MATCH_SOME; +} + static gboolean -pidgin_account_filter_connected_func(GtkTreeModel *model, GtkTreeIter *iter, - gpointer data) +pidgin_account_filter_connected_match(G_GNUC_UNUSED GtkFilter *self, + gpointer item) { - PurpleAccount *account = NULL; gboolean ret = FALSE; - g_return_val_if_fail(GTK_IS_TREE_MODEL(model), FALSE); - g_return_val_if_fail(iter != NULL, FALSE); - - gtk_tree_model_get(model, iter, PIDGIN_ACCOUNT_STORE_COLUMN_ACCOUNT, - &account, -1); - - if(!PURPLE_IS_ACCOUNT(account)) { - return FALSE; + if(PURPLE_IS_ACCOUNT(item)) { + ret = purple_account_is_connected(PURPLE_ACCOUNT(item)); } - ret = purple_account_is_connected(account); - - g_object_unref(G_OBJECT(account)); - return ret; } @@ -75,16 +72,12 @@ * GObject Implementation *****************************************************************************/ G_DEFINE_TYPE(PidginAccountFilterConnected, pidgin_account_filter_connected, - GTK_TYPE_TREE_MODEL_FILTER) + GTK_TYPE_FILTER) static void pidgin_account_filter_connected_init(PidginAccountFilterConnected *filter) { gpointer connections_handle = NULL; - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(filter), - pidgin_account_filter_connected_func, - NULL, NULL); - /* we connect to the connections signals to force a refresh of the filter */ connections_handle = purple_connections_get_handle(); purple_signal_connect(connections_handle, "signed-on", filter, @@ -105,19 +98,19 @@ static void pidgin_account_filter_connected_class_init(PidginAccountFilterConnectedClass *klass) { GObjectClass *obj_class = G_OBJECT_CLASS(klass); + GtkFilterClass *filter_class = GTK_FILTER_CLASS(klass); obj_class->finalize = pidgin_account_filter_connected_finalize; + + filter_class->get_strictness = pidgin_account_filter_connected_get_strictness; + filter_class->match = pidgin_account_filter_connected_match; } /****************************************************************************** * API *****************************************************************************/ -GtkTreeModel * -pidgin_account_filter_connected_new(GtkTreeModel *child_model, - GtkTreePath *root) +GtkFilter * +pidgin_account_filter_connected_new(void) { - g_return_val_if_fail(GTK_IS_TREE_MODEL(child_model), NULL); - - return g_object_new(PIDGIN_TYPE_ACCOUNT_FILTER_CONNECTED, "child-model", - child_model, "virtual-root", root, NULL); + return g_object_new(PIDGIN_TYPE_ACCOUNT_FILTER_CONNECTED, NULL); }