diff options
author | Dan Winship <danw@src.gnome.org> | 2001-10-01 16:27:02 +0000 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2001-10-01 16:27:02 +0000 |
commit | 850e1a5f2ebc36fa8a8ed8de9f6b7ff524c56126 (patch) | |
tree | db6ac0dfa1eb00bdcdbdc6c4e315a9ab424215be | |
parent | 3b187237e294e37c55fca44747fcaf6bb66b1916 (diff) | |
download | evolution-data-server-850e1a5f2ebc36fa8a8ed8de9f6b7ff524c56126.tar.gz |
New, copied/renamed from mailer and gnome-libs.
* e-passwords.c (e_passwords_ask_password): New, copied/renamed
from mailer and gnome-libs.
-rw-r--r-- | libedataserverui/e-passwords.c | 102 | ||||
-rw-r--r-- | libedataserverui/e-passwords.h | 14 |
2 files changed, 116 insertions, 0 deletions
diff --git a/libedataserverui/e-passwords.c b/libedataserverui/e-passwords.c index c1de3fc44..f9c878018 100644 --- a/libedataserverui/e-passwords.c +++ b/libedataserverui/e-passwords.c @@ -23,8 +23,19 @@ * USA. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "e-passwords.h" +#include <libgnome/gnome-defs.h> +#include <libgnome/gnome-i18n.h> #include <libgnome/gnome-config.h> +#include <libgnomeui/gnome-dialog.h> +#include <libgnomeui/gnome-messagebox.h> +#include <libgnomeui/gnome-stock.h> +#include <gtk/gtkentry.h> +#include <gtk/gtkcheckbutton.h> static char *decode_base64 (char *base64); @@ -138,6 +149,97 @@ e_passwords_add_password (const char *key, const char *passwd) g_hash_table_insert (passwords, (gpointer)key, (gpointer)passwd); } + +/** + * e_passwords_ask_password: + * @title: title for the password dialog + * @key: key to store the password under + * @prompt: prompt string + * @secret: whether or not the password text should be ***ed out + * @remember_type: whether or not to offer to remember the password, + * and for how long. + * @remember: on input, the default state of the remember checkbox. + * on output, the state of the checkbox when the dialog was closed. + * @parent: parent window of the dialog, or %NULL + * + * Asks the user for a password. + * + * Return value: the password, or %NULL if the user cancelled the + * operation. *@remember will be set if the return value is non-%NULL + * and @remember_type is not E_PASSWORDS_DO_NOT_REMEMBER. + **/ +char * +e_passwords_ask_password (const char *title, const char *key, + const char *prompt, gboolean secret, + EPasswordsRememberType remember_type, + gboolean *remember, + GtkWindow *parent) +{ + GtkWidget *dialog; + GtkWidget *check, *entry; + char *password; + int button; + + dialog = gnome_message_box_new (prompt, GNOME_MESSAGE_BOX_QUESTION, + GNOME_STOCK_BUTTON_OK, + GNOME_STOCK_BUTTON_CANCEL, + NULL); + gtk_window_set_title (GTK_WINDOW (dialog), title); + if (parent) + gnome_dialog_set_parent (GNOME_DIALOG (dialog), parent); + gnome_dialog_set_default (GNOME_DIALOG (dialog), 0); + gnome_dialog_set_close (GNOME_DIALOG (dialog), FALSE); + + /* Password entry */ + entry = gtk_entry_new(); + if (secret) + gtk_entry_set_visibility (GTK_ENTRY(entry), FALSE); + + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), + entry, FALSE, FALSE, 4); + gtk_widget_show (entry); + gtk_widget_grab_focus (entry); + + /* If Return is pressed in the text entry, propagate to the buttons */ + gnome_dialog_editable_enters (GNOME_DIALOG(dialog), GTK_EDITABLE(entry)); + + /* Remember the password? */ + if (remember_type != E_PASSWORDS_DO_NOT_REMEMBER) { + const char *label; + + if (remember_type == E_PASSWORDS_REMEMBER_FOREVER) + label = _("Remember this password"); + else + label = _("Remember this password for the remainder of this session"); + check = gtk_check_button_new_with_label (label); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), + *remember); + + gtk_box_pack_end (GTK_BOX (GNOME_DIALOG (dialog)->vbox), + check, TRUE, FALSE, 4); + gtk_widget_show (check); + } + + gtk_widget_show (dialog); + button = gnome_dialog_run (GNOME_DIALOG (dialog)); + + if (button == 0) { + password = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1); + *remember = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)); + + if (*remember || remember_type == E_PASSWORDS_REMEMBER_FOREVER) + e_passwords_add_password (key, password); + if (*remember && remember_type == E_PASSWORDS_REMEMBER_FOREVER) + e_passwords_remember_password (key); + } else + password = NULL; + + gnome_dialog_close (GNOME_DIALOG (dialog)); + return password; +} + + + static char *base64_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; diff --git a/libedataserverui/e-passwords.h b/libedataserverui/e-passwords.h index 7b675b964..9bc0de654 100644 --- a/libedataserverui/e-passwords.h +++ b/libedataserverui/e-passwords.h @@ -26,6 +26,7 @@ #include <glib.h> #include <bonobo/bonobo-ui-component.h> +#include <gtk/gtkwindow.h> #ifdef __cplusplus extern "C" { @@ -34,12 +35,25 @@ extern "C" { void e_passwords_init (void); void e_passwords_shutdown (void); + void e_passwords_remember_password (const char *key); void e_passwords_add_password (const char *key, const char *passwd); const char *e_passwords_get_password (const char *key); void e_passwords_forget_password (const char *key); void e_passwords_forget_passwords (void); +typedef enum { + E_PASSWORDS_DO_NOT_REMEMBER, + E_PASSWORDS_REMEMBER_FOR_SESSION, + E_PASSWORDS_REMEMBER_FOREVER +} EPasswordsRememberType; + +char * e_passwords_ask_password (const char *title, const char *key, + const char *prompt, gboolean secret, + EPasswordsRememberType remember_type, + gboolean *remember, + GtkWindow *parent); + #ifdef __cplusplus } #endif /* __cplusplus */ |