pidgin/pidgin

Parents 78c0e1809b3b
Children 659bd23c9258
Clean up set_account_protocol_cb and change some accessors for PidginProtocolChooser
--- a/pidgin/gtkaccount.c Fri Feb 14 05:02:13 2020 -0600
+++ b/pidgin/gtkaccount.c Fri Feb 14 17:23:08 2020 -0600
@@ -225,44 +225,34 @@
}
static void
-set_account_protocol_cb(GtkWidget *widget, AccountPrefsDialog *dialog)
-{
+set_account_protocol_cb(GtkWidget *widget, AccountPrefsDialog *dialog) {
PidginProtocolChooser *chooser = PIDGIN_PROTOCOL_CHOOSER(widget);
- PurpleProtocol *new_protocol;
- gchar *id = NULL;
-
- id = pidgin_protocol_chooser_get_selected(chooser);
- new_protocol = purple_protocols_find(id);
- g_free(id);
-
- dialog->protocol = new_protocol;
-
- if (dialog->protocol != NULL)
- {
- PurpleProtocol *old_protocol = NULL;
-
- if (dialog->protocol_id)
- old_protocol = purple_protocols_find(dialog->protocol_id);
-
- if (old_protocol != new_protocol) {
- g_free(dialog->protocol_id);
- dialog->protocol_id = g_strdup(purple_protocol_get_id(dialog->protocol));
- }
+ PurpleProtocol *protocol = pidgin_protocol_chooser_get_selected(chooser);
+
+ if(g_set_object(&dialog->protocol, protocol)) {
+ g_clear_pointer(&dialog->protocol_id, g_free);
}
-
- if (dialog->account != NULL)
+ g_object_unref(G_OBJECT(protocol));
+
+ if(PURPLE_IS_PROTOCOL(dialog->protocol)) {
+ dialog->protocol_id = g_strdup(purple_protocol_get_id(dialog->protocol));
+ }
+
+ if (dialog->account != NULL) {
purple_account_clear_settings(dialog->account);
-
- add_login_options(dialog, dialog->top_vbox);
- add_user_options(dialog, dialog->top_vbox);
+ }
+
+ add_login_options(dialog, dialog->top_vbox);
+ add_user_options(dialog, dialog->top_vbox);
add_account_options(dialog);
add_voice_options(dialog);
gtk_widget_grab_focus(dialog->protocol_menu);
- if (!dialog->protocol || !PURPLE_PROTOCOL_IMPLEMENTS(dialog->protocol, SERVER, register_user)) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
- dialog->register_button), FALSE);
+ if (!dialog->protocol ||
+ !PURPLE_PROTOCOL_IMPLEMENTS(dialog->protocol, SERVER, register_user))
+ {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->register_button), FALSE);
gtk_widget_hide(dialog->register_button);
} else {
if (purple_protocol_get_options(dialog->protocol) &
--- a/pidgin/pidginprotocolchooser.c Fri Feb 14 05:02:13 2020 -0600
+++ b/pidgin/pidginprotocolchooser.c Fri Feb 14 17:23:08 2020 -0600
@@ -66,9 +66,24 @@
return GTK_WIDGET(g_object_new(PIDGIN_TYPE_PROTOCOL_CHOOSER, NULL));
}
+PurpleProtocol *
+pidgin_protocol_chooser_get_selected(PidginProtocolChooser *chooser) {
+ GtkTreeIter iter;
+ PurpleProtocol *protocol = NULL;
+
+ g_return_val_if_fail(PIDGIN_IS_PROTOCOL_CHOOSER(chooser), NULL);
+
+ if(gtk_combo_box_get_active_iter(GTK_COMBO_BOX(chooser), &iter)) {
+ gtk_tree_model_get(GTK_TREE_MODEL(chooser->model), &iter,
+ PIDGIN_PROTOCOL_STORE_COLUMN_PROTOCOL, &protocol,
+ -1);
+ }
+
+ return protocol;
+}
+
gchar *
-pidgin_protocol_chooser_get_selected(PidginProtocolChooser *chooser)
-{
+pidgin_protocol_chooser_get_selected_name(PidginProtocolChooser *chooser) {
GtkTreeIter iter;
gchar *name = NULL;
@@ -84,8 +99,8 @@
}
void
-pidgin_protocol_chooser_set_selected(PidginProtocolChooser *chooser,
- const gchar *name)
+pidgin_protocol_chooser_set_selected_name(PidginProtocolChooser *chooser,
+ const gchar *name)
{
GtkTreeIter iter;
gchar *iter_name = NULL;
--- a/pidgin/pidginprotocolchooser.h Fri Feb 14 05:02:13 2020 -0600
+++ b/pidgin/pidginprotocolchooser.h Fri Feb 14 17:23:08 2020 -0600
@@ -33,6 +33,8 @@
#include <gtk/gtk.h>
+#include <purple.h>
+
G_BEGIN_DECLS
#define PIDGIN_TYPE_PROTOCOL_CHOOSER (pidgin_protocol_chooser_get_type())
@@ -55,25 +57,38 @@
* pidgin_protocol_chooser_get_selected:
* @chooser: The #PidginProtocolChooser instance.
*
- * Gets the name of the currently selected protocol from @chooser.
+ * Gets the currently selected protocol from @chooser.
*
- * Returns: (transfer full): Returns the name of the currently selected
- * protocol.
+ * Returns: (transfer full): The selected #PurpleProtocol or %NULL if nothing
+ * is selected
*
* Since: 3.0.0
*/
-gchar *pidgin_protocol_chooser_get_selected(PidginProtocolChooser *chooser);
+PurpleProtocol *pidgin_protocol_chooser_get_selected(PidginProtocolChooser *chooser);
/**
- * pidgin_protocol_chooser_set_selected:
+ * pidgin_protocol_chooser_get_selected_name:
* @chooser: The #PidginProtocolChooser instance.
- * @protocol: The name of the protocol to select.
+ *
+ * Gets the name of the currently selected protocol from @chooser.
+ *
+ * Returns: (transfer full): The selected #PurpleProtocol or %NULL if nothing
+ * is selected
+ *
+ * Since: 3.0.0
+ */
+gchar *pidgin_protocol_chooser_get_selected_name(PidginProtocolChooser *chooser);
+
+/**
+ * pidgin_protocol_chooser_set_selected_name:
+ * @chooser: The #PidginProtocolChooser instance.
+ * @name: The name of the protocol to select.
*
* Sets the currently selected protocol of @chooser to @protocol.
*
* Since: 3.0.0
*/
-void pidgin_protocol_chooser_set_selected(PidginProtocolChooser *chooser, const gchar *protocol);
+void pidgin_protocol_chooser_set_selected_name(PidginProtocolChooser *chooser, const gchar *name);
G_END_DECLS