summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>2013-05-11 16:26:40 +0200
committerTomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>2013-05-11 16:26:40 +0200
commit56847e4be0bb1b4fee4c02eda4cc65877da9bd85 (patch)
tree06b4ea4b8e80f67f563db5f6d9acf3a4d9f6e895
parent1a05dbdb9c87bcd7ba12597344ff10f5749fba54 (diff)
downloadpidgin-56847e4be0bb1b4fee4c02eda4cc65877da9bd85.tar.gz
Group and string support for keyring settings
-rw-r--r--libpurple/plugins/keyrings/internalkeyring.c11
-rw-r--r--pidgin/gtkprefs.c46
-rw-r--r--pidgin/gtkutils.c12
3 files changed, 57 insertions, 12 deletions
diff --git a/libpurple/plugins/keyrings/internalkeyring.c b/libpurple/plugins/keyrings/internalkeyring.c
index 9bad7703a9..3033a4bad0 100644
--- a/libpurple/plugins/keyrings/internalkeyring.c
+++ b/libpurple/plugins/keyrings/internalkeyring.c
@@ -195,7 +195,16 @@ internal_keyring_read_settings(void)
field = purple_request_field_bool_new("encrypt", "Use encryption", FALSE);
purple_request_field_group_add_field(group, field);
- /* TODO: master password setting */
+ group = purple_request_field_group_new("Master password");
+ purple_request_fields_add_group(fields, group);
+
+ field = purple_request_field_string_new("passphrase1", "New passphrase:", "", FALSE);
+ purple_request_field_string_set_masked(field, TRUE);
+ purple_request_field_group_add_field(group, field);
+
+ field = purple_request_field_string_new("passphrase2", "Re-enter passphrase:", "", FALSE);
+ purple_request_field_string_set_masked(field, TRUE);
+ purple_request_field_group_add_field(group, field);
return fields;
}
diff --git a/pidgin/gtkprefs.c b/pidgin/gtkprefs.c
index 503734883e..003758f6b9 100644
--- a/pidgin/gtkprefs.c
+++ b/pidgin/gtkprefs.c
@@ -2655,8 +2655,20 @@ keyring_page_settings_toggled(GtkToggleButton *togglebutton, gpointer _unused)
gtk_toggle_button_get_active(togglebutton));
}
+static void
+keyring_page_settings_string_changed(GtkWidget *widget, gpointer _unused)
+{
+ PurpleRequestField *setting;
+
+ gtk_widget_set_sensitive(keyring_apply, TRUE);
+
+ setting = g_object_get_data(G_OBJECT(widget), "setting");
+ purple_request_field_string_set_value(setting,
+ gtk_entry_get_text(GTK_ENTRY(widget)));
+}
+
static GtkWidget *
-keyring_page_add_settings_field(PurpleRequestField *setting)
+keyring_page_add_settings_field(GtkBox *vbox, PurpleRequestField *setting)
{
GtkWidget *widget, *hbox;
PurpleRequestFieldType field_type;
@@ -2672,15 +2684,23 @@ keyring_page_add_settings_field(PurpleRequestField *setting)
purple_request_field_bool_get_default_value(setting));
g_signal_connect(G_OBJECT(widget), "toggled",
G_CALLBACK(keyring_page_settings_toggled), NULL);
+ } else if (field_type == PURPLE_REQUEST_FIELD_STRING) {
+ widget = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(widget),
+ purple_request_field_string_get_default_value(setting));
+ if (purple_request_field_string_is_masked(setting))
+ gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE);
+ g_signal_connect(G_OBJECT(widget), "changed",
+ G_CALLBACK(keyring_page_settings_string_changed), NULL);
} else {
purple_debug_error("gtkprefs", "Unsupported field type\n");
return NULL;
}
g_object_set_data(G_OBJECT(widget), "setting", setting);
- hbox = pidgin_add_widget_to_vbox(keyring_vbox, label, NULL, widget,
+ hbox = pidgin_add_widget_to_vbox(vbox, label, NULL, widget,
FALSE, NULL);
- return ((void*)hbox == (void*)keyring_vbox) ? widget : hbox;
+ return ((void*)hbox == (void*)vbox) ? widget : hbox;
}
/* XXX: it could be available for all plugins, not keyrings only */
@@ -2694,13 +2714,26 @@ keyring_page_add_settings(PurpleRequestFields *settings)
groups = purple_request_fields_get_groups(settings);
for (it = g_list_first(groups); it != NULL; it = g_list_next(it)) {
GList *it2, *fields;
+ GtkBox *vbox;
+ PurpleRequestFieldGroup *group;
+ const gchar *group_title;
+
+ group = it->data;
+ group_title = purple_request_field_group_get_title(group);
+ if (group_title) {
+ vbox = GTK_BOX(pidgin_make_frame(
+ GTK_WIDGET(keyring_vbox), group_title));
+ added_fields = g_list_prepend(added_fields,
+ g_object_get_data(G_OBJECT(vbox), "main-vbox"));
+ } else
+ vbox = keyring_vbox;
- fields = purple_request_field_group_get_fields(it->data);
+ fields = purple_request_field_group_get_fields(group);
for (it2 = g_list_first(fields); it2 != NULL;
it2 = g_list_next(it2)) {
- GtkWidget *added = keyring_page_add_settings_field(
+ GtkWidget *added = keyring_page_add_settings_field(vbox,
it2->data);
- if (added == NULL)
+ if (added == NULL || vbox != keyring_vbox)
continue;
added_fields = g_list_prepend(added_fields, added);
}
@@ -2793,6 +2826,7 @@ keyring_page_pref_changed(GtkComboBox *combo_box, PidginPrefValue value)
gtk_container_remove(
GTK_CONTAINER(gtk_widget_get_parent(widget)), widget);
}
+ gtk_widget_show_all(keyring_page_instance);
g_list_free(keyring_settings_fields);
keyring_settings_fields = NULL;
if (keyring_settings)
diff --git a/pidgin/gtkutils.c b/pidgin/gtkutils.c
index 3372c9df3f..d98ebfe8e1 100644
--- a/pidgin/gtkutils.c
+++ b/pidgin/gtkutils.c
@@ -483,7 +483,7 @@ GtkWidget *pidgin_new_item_from_stock(GtkWidget *menu, const char *str, const ch
GtkWidget *
pidgin_make_frame(GtkWidget *parent, const char *title)
{
- GtkWidget *vbox, *label, *hbox;
+ GtkWidget *vbox, *vbox2, *label, *hbox;
char *labeltitle;
vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
@@ -509,11 +509,13 @@ pidgin_make_frame(GtkWidget *parent, const char *title)
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
gtk_widget_show(label);
- vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
- gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
- gtk_widget_show(vbox);
+ vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0);
+ gtk_widget_show(vbox2);
+
+ g_object_set_data(G_OBJECT(vbox2), "main-vbox", vbox);
- return vbox;
+ return vbox2;
}
static gpointer