--- a/pidgin/plugins/xmppconsole/console.ui Wed May 25 23:52:45 2022 -0500
+++ b/pidgin/plugins/xmppconsole/console.ui Wed May 25 23:52:45 2022 -0500
@@ -21,10 +21,19 @@
<requires lib="gtk+" version="3.18"/>
+ <requires lib="pidgin" version="3.0"/> <!-- interface-license-type gplv2 -->
<!-- interface-name Pidgin -->
<!-- interface-description Internet Messenger -->
<!-- interface-copyright Pidgin Developers <devel@pidgin.im> -->
+ <object class="PidginAccountStore" id="accounts"/> + <object class="PidginAccountFilterConnected" id="connected_accounts"> + <property name="child-model">accounts</property> + <object class="PidginAccountFilterProtocol" id="connected_xmpp_accounts"> + <property name="child-model">connected_accounts</property> + <property name="protocol-id">prpl-jabber</property> <object class="GtkTextBuffer" id="entry_buffer">
<signal name="changed" handler="entry_changed_cb" object="PidginXmppConsole" swapped="no"/>
@@ -93,7 +102,7 @@
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
- <object class="GtkBox" id="hbox">
+ <object class="GtkBox"> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">6</property>
@@ -111,9 +120,11 @@
- <object class="GtkComboBoxText" id="dropdown">
+ <object class="PidginAccountChooser"> <property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="model">connected_xmpp_accounts</property> + <property name="active">0</property> <signal name="changed" handler="dropdown_changed_cb" object="PidginXmppConsole" swapped="no"/>
--- a/pidgin/plugins/xmppconsole/xmppconsole.c Wed May 25 23:52:45 2022 -0500
+++ b/pidgin/plugins/xmppconsole/xmppconsole.c Wed May 25 23:52:45 2022 -0500
@@ -36,8 +36,6 @@
@@ -52,8 +50,6 @@
GtkTextBuffer *entry_buffer;
@@ -87,16 +83,6 @@
/******************************************************************************
*****************************************************************************/
-xmppconsole_is_xmpp_account(PurpleAccount *account)
- const gchar *prpl_name;
- prpl_name = purple_account_get_protocol_id(account);
- return purple_strequal("prpl-jabber", prpl_name);
xmppconsole_append_xmlnode(PidginXmppConsole *console, PurpleXmlNode *node,
gint indent_level, GtkTextIter *iter,
@@ -485,98 +471,40 @@
-signing_on_cb(PurpleConnection *gc)
- PurpleAccount *account;
- account = purple_connection_get_account(gc);
- if (!xmppconsole_is_xmpp_account(account))
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(console->dropdown),
- purple_account_get_username(account));
- console->accounts = g_list_append(console->accounts, gc);
- if (console->count == 1) {
- gtk_text_buffer_set_text(console->buffer, "", 0);
- gtk_combo_box_set_active(GTK_COMBO_BOX(console->dropdown), 0);
- gtk_widget_show_all(console->hbox);
-signed_off_cb(PurpleConnection *gc)
- i = g_list_index(console->accounts, gc);
- gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(console->dropdown), i);
- console->accounts = g_list_remove(console->accounts, gc);
- if (gc == console->gc) {
- gtk_text_buffer_get_end_iter(console->buffer, &end);
- gtk_text_buffer_insert_with_tags(console->buffer, &end, _("Logged out."), -1,
- console->tags.info, NULL);
dropdown_changed_cb(GtkComboBox *widget, gpointer data) {
PidginXmppConsole *console = data;
+ PidginAccountChooser *chooser = PIDGIN_ACCOUNT_CHOOSER(widget); + PurpleAccount *account = NULL; - console->gc = g_list_nth_data(console->accounts,
- gtk_combo_box_get_active(widget));
- gtk_text_buffer_set_text(console->buffer, "", 0);
+ account = pidgin_account_chooser_get_selected(chooser); + if(PURPLE_IS_ACCOUNT(account)) { + console->gc = purple_account_get_connection(account); + gtk_text_buffer_set_text(console->buffer, "", 0); + GtkTextIter start, end; + gtk_text_buffer_set_text(console->buffer, _("Not connected to XMPP"), -1); + gtk_text_buffer_get_bounds(console->buffer, &start, &end); + gtk_text_buffer_apply_tag(console->buffer, console->tags.info, &start, &end); /******************************************************************************
*****************************************************************************/
-pidgin_xmpp_console_finalize(GObject *obj) {
- PidginXmppConsole *console = PIDGIN_XMPP_CONSOLE(obj);
- g_clear_pointer(&console->accounts, g_list_free);
- G_OBJECT_CLASS(pidgin_xmpp_console_parent_class)->finalize(obj);
pidgin_xmpp_console_class_finalize(PidginXmppConsoleClass *klass) {
pidgin_xmpp_console_class_init(PidginXmppConsoleClass *klass) {
- GObjectClass *obj_class = G_OBJECT_CLASS(klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
- obj_class->finalize = pidgin_xmpp_console_finalize;
gtk_widget_class_set_template_from_resource(
"/im/pidgin/Pidgin3/Plugin/XMPPConsole/console.ui"
- gtk_widget_class_bind_template_child(widget_class, PidginXmppConsole,
- gtk_widget_class_bind_template_child(widget_class, PidginXmppConsole,
gtk_widget_class_bind_template_callback(widget_class, dropdown_changed_cb);
gtk_widget_class_bind_template_child(widget_class, PidginXmppConsole,
@@ -653,32 +581,11 @@
pidgin_xmpp_console_init(PidginXmppConsole *console) {
GtkCssProvider *entry_css;
GtkStyleContext *context;
gtk_widget_init_template(GTK_WIDGET(console));
- for (connections = purple_connections_get_all(); connections; connections = connections->next) {
- PurpleConnection *gc = connections->data;
- if (xmppconsole_is_xmpp_account(purple_connection_get_account(gc))) {
- console->accounts = g_list_append(console->accounts, gc);
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(console->dropdown),
- purple_account_get_username(purple_connection_get_account(gc)));
- gtk_combo_box_set_active(GTK_COMBO_BOX(console->dropdown), 0);
- if (console->count == 0) {
- GtkTextIter start, end;
- gtk_text_buffer_set_text(console->buffer, _("Not connected to XMPP"), -1);
- gtk_text_buffer_get_bounds(console->buffer, &start, &end);
- gtk_text_buffer_apply_tag(console->buffer, console->tags.info, &start, &end);
entry_css = gtk_css_provider_new();
gtk_css_provider_load_from_data(entry_css,
"textview." GTK_STYLE_CLASS_ERROR " text {background-color:#ffcece;}",
@@ -689,10 +596,6 @@
entry_changed_cb(console->entry_buffer, console);
- if (console->count < 2) {
- gtk_widget_hide(console->hbox);
gtk_widget_show(GTK_WIDGET(console));
@@ -767,11 +670,6 @@
purple_signal_connect(xmpp, "jabber-sending-text", plugin,
G_CALLBACK(purple_xmlnode_sent_cb), NULL);
- purple_signal_connect(purple_connections_get_handle(), "signing-on",
- plugin, G_CALLBACK(signing_on_cb), NULL);
- purple_signal_connect(purple_connections_get_handle(), "signed-off",
- plugin, G_CALLBACK(signed_off_cb), NULL);