Convert the dynamic fields of PidginAccountEditor to AdwEntryRow

Sat, 29 Oct 2022 02:05:16 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Sat, 29 Oct 2022 02:05:16 -0500
changeset 41863
0067a0ff5b74
parent 41862
0cb7833d756b
child 41864
6f490dec468f

Convert the dynamic fields of PidginAccountEditor to AdwEntryRow

This includes usersplits and account options for strings and integers.

Testing Done:
Created and XMPP account and set a bunch of settings and verified they were saved and loaded properly.

Reviewed at https://reviews.imfreedom.org/r/2000/

pidgin/pidginaccounteditor.c file | annotate | diff | comparison | revisions
pidgin/resources/Accounts/editor.ui file | annotate | diff | comparison | revisions
--- a/pidgin/pidginaccounteditor.c	Sat Oct 29 01:42:13 2022 -0500
+++ b/pidgin/pidginaccounteditor.c	Sat Oct 29 02:05:16 2022 -0500
@@ -41,7 +41,6 @@
 	GtkWidget *require_password_row;
 	GtkWidget *require_password;
 
-	GList *user_split_entries;
 	GList *user_split_rows;
 
 	/* User Options */
@@ -90,28 +89,18 @@
 pidgin_account_editor_add_user_split(gpointer data, gpointer user_data) {
 	PurpleAccountUserSplit *split = data;
 	PidginAccountEditor *editor = user_data;
-	GtkWidget *entry = NULL;
 
 	if(!purple_account_user_split_is_constant(split)) {
 		GtkWidget *row = NULL;
 
-		row = adw_action_row_new();
+		row = adw_entry_row_new();
 		editor->user_split_rows = g_list_append(editor->user_split_rows, row);
 		gtk_list_box_append(GTK_LIST_BOX(editor->user_splits), row);
 
 		gtk_widget_set_focusable(row, FALSE);
 		adw_preferences_row_set_title(ADW_PREFERENCES_ROW(row),
 		                              purple_account_user_split_get_text(split));
-
-		entry = gtk_entry_new();
-		gtk_widget_set_hexpand(entry, TRUE);
-		gtk_widget_set_valign(entry, GTK_ALIGN_CENTER);
-		adw_action_row_add_suffix(ADW_ACTION_ROW(row), entry);
-		adw_action_row_set_activatable_widget(ADW_ACTION_ROW(row), entry);
 	}
-
-	editor->user_split_entries = g_list_append(editor->user_split_entries,
-	                                           entry);
 }
 
 static gboolean
@@ -121,14 +110,11 @@
 	PurpleProtocolOptions options;
 	GList *user_splits = NULL;
 	GList *split_item = NULL;
-	GList *entry_item = NULL;
+	GList *row_item = NULL;
 	gchar *username = NULL;
 	gboolean require_password = FALSE;
 	gboolean ret = FALSE;
 
-	/* Clear out the old user splits from our list. */
-	g_clear_pointer(&editor->user_split_entries, g_list_free);
-
 	/* Now remove the rows we added to the preference group for each non
 	 * constant user split.
 	 */
@@ -158,9 +144,9 @@
 	 * the username.
 	 */
 	split_item = g_list_last(user_splits);
-	entry_item = g_list_last(editor->user_split_entries);
-	while(split_item != NULL && entry_item != NULL) {
-		GtkWidget *entry = entry_item->data;
+	row_item = g_list_last(editor->user_split_rows);
+	while(split_item != NULL && row_item != NULL) {
+		GtkWidget *row = row_item->data;
 		PurpleAccountUserSplit *split = split_item->data;
 		gchar *ptr = NULL;
 		const gchar *value = NULL;
@@ -187,12 +173,12 @@
 			value = purple_account_user_split_get_default_value(split);
 		}
 
-		if(value != NULL && GTK_IS_ENTRY(entry)) {
-			gtk_editable_set_text(GTK_EDITABLE(entry), value);
+		if(value != NULL && GTK_IS_EDITABLE(row)) {
+			gtk_editable_set_text(GTK_EDITABLE(row), value);
 		}
 
 		split_item = split_item->prev;
-		entry_item = entry_item->prev;
+		row_item = row_item->prev;
 	}
 
 	/* Free the user splits. */
@@ -331,7 +317,6 @@
                                        PurpleAccountOption *option)
 {
 	GtkWidget *row = NULL;
-	GtkWidget *entry = NULL;
 	gint value = 0;
 	gchar *title = NULL;
 	gchar *svalue = NULL;
@@ -346,7 +331,57 @@
 	}
 
 	/* Create the row and set its title with a mnemonic. */
-	row = adw_action_row_new();
+	row = adw_entry_row_new();
+	g_object_bind_property(editor->advanced_toggle, "active", row, "visible",
+	                       G_BINDING_SYNC_CREATE);
+	gtk_widget_set_focusable(row, FALSE);
+	adw_preferences_row_set_use_underline(ADW_PREFERENCES_ROW(row), TRUE);
+	adw_entry_row_set_input_purpose(ADW_ENTRY_ROW(row),
+	                                GTK_INPUT_PURPOSE_NUMBER);
+	title = g_strdup_printf("_%s", purple_account_option_get_text(option));
+	adw_preferences_row_set_title(ADW_PREFERENCES_ROW(row), title);
+	g_free(title);
+
+	adw_preferences_group_add(ADW_PREFERENCES_GROUP(editor->advanced_group),
+	                          row);
+
+	/* Add the row to the editor's list of advanced rows. */
+	editor->advanced_rows = g_list_append(editor->advanced_rows, row);
+
+	/* Set the default value. */
+	svalue = g_strdup_printf("%d", value);
+	gtk_editable_set_text(GTK_EDITABLE(row), svalue);
+	g_free(svalue);
+
+	return row;
+}
+
+static GtkWidget *
+pidgin_account_editor_add_advanced_string(PidginAccountEditor *editor,
+                                          PurpleAccountOption *option)
+{
+	GtkWidget *row = NULL;
+	gchar *title = NULL;
+	const gchar *value = NULL;
+
+	if(pidgin_account_editor_advanced_option_use_default(editor)) {
+		value = purple_account_option_get_default_string(option);
+	} else {
+		const gchar *setting = purple_account_option_get_setting(option);
+		const gchar *def_value = NULL;
+
+		def_value = purple_account_option_get_default_string(option);
+
+		value = purple_account_get_string(editor->account, setting, def_value);
+	}
+
+	/* Create the row depending on the masked hint. */
+	if(purple_account_option_string_get_masked(option)) {
+		row = adw_password_entry_row_new();
+	} else {
+		row = adw_entry_row_new();
+	}
+
 	g_object_bind_property(editor->advanced_toggle, "active", row, "visible",
 	                       G_BINDING_SYNC_CREATE);
 	gtk_widget_set_focusable(row, FALSE);
@@ -361,73 +396,11 @@
 	/* Add the row to the editor's list of advanced rows. */
 	editor->advanced_rows = g_list_append(editor->advanced_rows, row);
 
-	/* Create the input widget. */
-	entry = gtk_entry_new();
-	gtk_entry_set_input_purpose(GTK_ENTRY(entry), GTK_INPUT_PURPOSE_DIGITS);
-	svalue = g_strdup_printf("%d", value);
-	gtk_editable_set_text(GTK_EDITABLE(entry), svalue);
-	g_free(svalue);
-
-	gtk_widget_set_hexpand(entry, TRUE);
-	gtk_widget_set_valign(entry, GTK_ALIGN_CENTER);
-	adw_action_row_add_suffix(ADW_ACTION_ROW(row), entry);
-	adw_action_row_set_activatable_widget(ADW_ACTION_ROW(row), entry);
-
-	return entry;
-}
-
-static GtkWidget *
-pidgin_account_editor_add_advanced_string(PidginAccountEditor *editor,
-                                          PurpleAccountOption *option)
-{
-	GtkWidget *row = NULL;
-	GtkWidget *entry = NULL;
-	gchar *title = NULL;
-	const gchar *value = NULL;
-
-	if(pidgin_account_editor_advanced_option_use_default(editor)) {
-		value = purple_account_option_get_default_string(option);
-	} else {
-		const gchar *setting = purple_account_option_get_setting(option);
-		const gchar *def_value = NULL;
-
-		def_value = purple_account_option_get_default_string(option);
-
-		value = purple_account_get_string(editor->account, setting, def_value);
+	if(value != NULL) {
+		gtk_editable_set_text(GTK_EDITABLE(row), value);
 	}
 
-	/* Create the row and set its title with a mnemonic. */
-	row = adw_action_row_new();
-	g_object_bind_property(editor->advanced_toggle, "active", row, "visible",
-	                       G_BINDING_SYNC_CREATE);
-	gtk_widget_set_focusable(row, FALSE);
-	adw_preferences_row_set_use_underline(ADW_PREFERENCES_ROW(row), TRUE);
-	title = g_strdup_printf("_%s", purple_account_option_get_text(option));
-	adw_preferences_row_set_title(ADW_PREFERENCES_ROW(row), title);
-	g_free(title);
-
-	adw_preferences_group_add(ADW_PREFERENCES_GROUP(editor->advanced_group),
-	                          row);
-
-	/* Add the row to the editor's list of advanced rows. */
-	editor->advanced_rows = g_list_append(editor->advanced_rows, row);
-
-	/* Create the input widget. */
-	if(purple_account_option_string_get_masked(option)) {
-		entry = gtk_password_entry_new();
-	} else {
-		entry = gtk_entry_new();
-	}
-
-	if(value != NULL) {
-		gtk_editable_set_text(GTK_EDITABLE(entry), value);
-	}
-	gtk_widget_set_hexpand(entry, TRUE);
-	gtk_widget_set_valign(entry, GTK_ALIGN_CENTER);
-	adw_action_row_add_suffix(ADW_ACTION_ROW(row), entry);
-	adw_action_row_set_activatable_widget(ADW_ACTION_ROW(row), entry);
-
-	return entry;
+	return row;
 }
 
 static GtkWidget *
@@ -721,10 +694,10 @@
 
 	gtk_widget_set_sensitive(editor->protocol, editable);
 	gtk_editable_set_editable(GTK_EDITABLE(editor->username), editable);
-	for(GList *l = editor->user_split_entries; l != NULL; l = l->next) {
-		GtkWidget *widget = l->data;
+	for(GList *l = editor->user_split_rows; l != NULL; l = l->next) {
+		GtkWidget *row = l->data;
 
-		gtk_editable_set_editable(GTK_EDITABLE(widget), editable);
+		gtk_editable_set_editable(GTK_EDITABLE(row), editable);
 	}
 	gtk_widget_set_sensitive(editor->require_password, editable);
 }
@@ -749,7 +722,8 @@
 static gboolean
 pidgin_account_editor_save_login_options(PidginAccountEditor *editor) {
 	PurpleProtocol *protocol = NULL;
-	GList *split_item = NULL, *entry_item = NULL;
+	GList *split_item = NULL;
+	GList *row_item = NULL;
 	GString *username = NULL;
 	const gchar *protocol_id = NULL;
 	gboolean new_account = FALSE;
@@ -761,18 +735,18 @@
 	username = g_string_new(gtk_editable_get_text(GTK_EDITABLE(editor->username)));
 
 	split_item = purple_protocol_get_user_splits(protocol);
-	entry_item = editor->user_split_entries;
-	while(split_item != NULL && entry_item != NULL) {
+	row_item = editor->user_split_rows;
+	while(split_item != NULL && row_item != NULL) {
 		PurpleAccountUserSplit *split = split_item->data;
-		GtkEntry *entry = entry_item->data;
+		GtkWidget *row = row_item->data;
 		const gchar *value = "";
 		gchar sep = '\0';
 
 		sep = purple_account_user_split_get_separator(split);
 		g_string_append_c(username, sep);
 
-		if(GTK_IS_ENTRY(entry)) {
-			value = gtk_editable_get_text(GTK_EDITABLE(entry));
+		if(GTK_IS_EDITABLE(row)) {
+			value = gtk_editable_get_text(GTK_EDITABLE(row));
 		}
 
 		if(value == NULL || *value == '\0') {
@@ -782,7 +756,7 @@
 		g_string_append(username, value);
 
 		split_item = split_item->next;
-		entry_item = entry_item->next;
+		row_item = row_item->next;
 	}
 
 	if(!PURPLE_IS_ACCOUNT(editor->account)) {
@@ -1202,7 +1176,6 @@
 pidgin_account_editor_finalize(GObject *obj) {
 	PidginAccountEditor *editor = PIDGIN_ACCOUNT_EDITOR(obj);
 
-	g_clear_pointer(&editor->user_split_entries, g_list_free);
 	g_clear_pointer(&editor->user_split_rows, g_list_free);
 
 	g_clear_pointer(&editor->advanced_entries, g_list_free);
--- a/pidgin/resources/Accounts/editor.ui	Sat Oct 29 01:42:13 2022 -0500
+++ b/pidgin/resources/Accounts/editor.ui	Sat Oct 29 02:05:16 2022 -0500
@@ -56,19 +56,11 @@
                       <object class="GtkListBox" id="user_splits">
                         <property name="focusable">0</property>
                         <child>
-                          <object class="AdwActionRow">
-                            <property name="activatable-widget">username</property>
+                          <object class="AdwEntryRow" id="username">
                             <property name="focusable">0</property>
                             <property name="title" translatable="1">_Username</property>
                             <property name="use-underline">1</property>
-                            <child>
-                              <object class="GtkEntry" id="username">
-                                <property name="hexpand">1</property>
-                                <property name="valign">center</property>
-                                <property name="truncate-multiline">1</property>
-                                <signal name="changed" handler="pidgin_account_editor_username_changed_cb" object="PidginAccountEditor" swapped="no"/>
-                              </object>
-                            </child>
+                            <signal name="changed" handler="pidgin_account_editor_username_changed_cb" object="PidginAccountEditor" swapped="no"/>
                           </object>
                         </child>
                       </object>

mercurial