pidgin/pidgin

Parents 0cb7833d756b
Children 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/
--- 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>