summaryrefslogtreecommitdiff
path: root/pidgin/pidginaccountfilterprotocol.c
diff options
context:
space:
mode:
authorElliott Sales de Andrade <quantum.analyst@gmail.com>2022-10-30 03:29:33 -0500
committerElliott Sales de Andrade <quantum.analyst@gmail.com>2022-10-30 03:29:33 -0500
commit9d89a78e071aaeb6be6d59a46af3711da33d16a6 (patch)
treed5266c912e32c3a0c99bd7522697583f9d292f49 /pidgin/pidginaccountfilterprotocol.c
parent0e3009d23a64db3b2ffb0ed492e3450f6fb26cb2 (diff)
downloadpidgin-9d89a78e071aaeb6be6d59a46af3711da33d16a6.tar.gz
Move PidginAccountChooser to GtkDropDown
The chooser connects to the default account manager automatically. Additionally, re-parent the `GtkTreeModelFilter` subclasses to `GtkFilter`, and use them on the `filter` property. This also means the previous `filter_func` that was moved to `GtkFilter` in /r/1995 are now used again. Testing Done: Opened most of the affected dialogs. Disabled XMPP account and saw that it was removed from all connected-only filtered choosers. Re-enabled account and it was back in the choosers. Confirmed that only XMPP, and not Demo accounts appeared in the two XMPP-specific plugins. Request API is still only compile-tested. Reviewed at https://reviews.imfreedom.org/r/1992/
Diffstat (limited to 'pidgin/pidginaccountfilterprotocol.c')
-rw-r--r--pidgin/pidginaccountfilterprotocol.c65
1 files changed, 30 insertions, 35 deletions
diff --git a/pidgin/pidginaccountfilterprotocol.c b/pidgin/pidginaccountfilterprotocol.c
index 6ce6e20969..b3edb7ac6a 100644
--- a/pidgin/pidginaccountfilterprotocol.c
+++ b/pidgin/pidginaccountfilterprotocol.c
@@ -22,12 +22,10 @@
#include "pidgin/pidginaccountfilterprotocol.h"
-#include "pidgin/pidginaccountstore.h"
-
#include <purple.h>
struct _PidginAccountFilterProtocol {
- GtkTreeModelFilter parent;
+ GtkFilter parent;
gchar *protocol_id;
};
@@ -48,34 +46,36 @@ pidgin_account_filter_protocol_set_protocol_id(PidginAccountFilterProtocol *filt
{
g_free(filter->protocol_id);
filter->protocol_id = g_strdup(protocol_id);
+
+ gtk_filter_changed(GTK_FILTER(filter), GTK_FILTER_CHANGE_DIFFERENT);
+}
+
+/******************************************************************************
+ * GtkFilter Implementation
+ *****************************************************************************/
+static GtkFilterMatch
+pidgin_account_filter_protocol_get_strictness(G_GNUC_UNUSED GtkFilter *self) {
+ return GTK_FILTER_MATCH_SOME;
}
static gboolean
-pidgin_account_filter_protocol_func(GtkTreeModel *model, GtkTreeIter *iter,
- gpointer data)
+pidgin_account_filter_protocol_match(G_GNUC_UNUSED GtkFilter *self,
+ gpointer item)
{
- PidginAccountFilterProtocol *filter = NULL;
- PurpleAccount *account = NULL;
gboolean ret = FALSE;
- g_return_val_if_fail(PIDGIN_IS_ACCOUNT_FILTER_PROTOCOL(data), FALSE);
- g_return_val_if_fail(GTK_IS_TREE_MODEL(model), FALSE);
- g_return_val_if_fail(iter != NULL, FALSE);
-
- filter = PIDGIN_ACCOUNT_FILTER_PROTOCOL(data);
+ g_return_val_if_fail(PIDGIN_IS_ACCOUNT_FILTER_PROTOCOL(self), FALSE);
- gtk_tree_model_get(model, iter, PIDGIN_ACCOUNT_STORE_COLUMN_ACCOUNT,
- &account, -1);
+ if(PURPLE_IS_ACCOUNT(item)) {
+ PidginAccountFilterProtocol *filter = NULL;
+ PurpleAccount *account = NULL;
- if(!PURPLE_IS_ACCOUNT(account)) {
- return FALSE;
+ filter = PIDGIN_ACCOUNT_FILTER_PROTOCOL(self);
+ account = PURPLE_ACCOUNT(item);
+ ret = purple_strequal(purple_account_get_protocol_id(account),
+ filter->protocol_id);
}
- ret = purple_strequal(purple_account_get_protocol_id(account),
- filter->protocol_id);
-
- g_object_unref(G_OBJECT(account));
-
return ret;
}
@@ -83,7 +83,7 @@ pidgin_account_filter_protocol_func(GtkTreeModel *model, GtkTreeIter *iter,
* GObject Implementation
*****************************************************************************/
G_DEFINE_TYPE(PidginAccountFilterProtocol, pidgin_account_filter_protocol,
- GTK_TYPE_TREE_MODEL_FILTER)
+ GTK_TYPE_FILTER)
static void
pidgin_account_filter_protocol_get_property(GObject *obj, guint param_id,
@@ -130,20 +130,22 @@ pidgin_account_filter_protocol_finalize(GObject *obj) {
}
static void
-pidgin_account_filter_protocol_init(PidginAccountFilterProtocol *filter) {
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(filter),
- pidgin_account_filter_protocol_func,
- filter, NULL);
+pidgin_account_filter_protocol_init(G_GNUC_UNUSED PidginAccountFilterProtocol *filter)
+{
}
static void
pidgin_account_filter_protocol_class_init(PidginAccountFilterProtocolClass *klass) {
GObjectClass *obj_class = G_OBJECT_CLASS(klass);
+ GtkFilterClass *filter_class = GTK_FILTER_CLASS(klass);
obj_class->get_property = pidgin_account_filter_protocol_get_property;
obj_class->set_property = pidgin_account_filter_protocol_set_property;
obj_class->finalize = pidgin_account_filter_protocol_finalize;
+ filter_class->get_strictness = pidgin_account_filter_protocol_get_strictness;
+ filter_class->match = pidgin_account_filter_protocol_match;
+
/**
* PidginAccountFilterProtocol:protocol-id:
*
@@ -160,18 +162,11 @@ pidgin_account_filter_protocol_class_init(PidginAccountFilterProtocolClass *klas
/******************************************************************************
* API
*****************************************************************************/
-GtkTreeModel *
-pidgin_account_filter_protocol_new(const gchar *protocol_id,
- GtkTreeModel *child_model,
- GtkTreePath *root)
-{
- g_return_val_if_fail(GTK_IS_TREE_MODEL(child_model), NULL);
-
+GtkFilter *
+pidgin_account_filter_protocol_new(const gchar *protocol_id) {
return g_object_new(
PIDGIN_TYPE_ACCOUNT_FILTER_PROTOCOL,
"protocol-id", protocol_id,
- "child-model", child_model,
- "virtual-root", root,
NULL);
}