diff options
author | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2022-10-30 03:29:33 -0500 |
---|---|---|
committer | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2022-10-30 03:29:33 -0500 |
commit | 9d89a78e071aaeb6be6d59a46af3711da33d16a6 (patch) | |
tree | d5266c912e32c3a0c99bd7522697583f9d292f49 /pidgin/pidginaccountfilterprotocol.c | |
parent | 0e3009d23a64db3b2ffb0ed492e3450f6fb26cb2 (diff) | |
download | pidgin-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.c | 65 |
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); } |