diff options
-rw-r--r-- | mail/ChangeLog | 7 | ||||
-rw-r--r-- | mail/folder-browser-factory.c | 7 | ||||
-rw-r--r-- | mail/mail.h | 1 | ||||
-rw-r--r-- | mail/session.c | 38 |
4 files changed, 51 insertions, 2 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index d5c3ce6abc..6211cd5d7c 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,5 +1,12 @@ 2000-06-05 Dan Winship <danw@helixcode.com> + * session.c (evolution_auth_callback): Remember passwords between + calls. + (forget_passwords): Callback for "Forget Passwords" menu item. + + * folder-browser-factory.c (control_activate): + (control_deactivate): Add "Forget Passwords" menu item. + * mail.h, mail-ops.c: fix some function prototypes * folder-browser.c (etable_key): Add "Delete" = delete message. diff --git a/mail/folder-browser-factory.c b/mail/folder-browser-factory.c index 6cd36daebc..d4629d6e17 100644 --- a/mail/folder-browser-factory.c +++ b/mail/folder-browser-factory.c @@ -88,6 +88,12 @@ control_activate (BonoboControl *control, BonoboUIHandler *uih) 0, 0, 0, providers_config, NULL); + bonobo_ui_handler_menu_new_item (uih, "/Tools/Forget Passwords", N_("Forget _Passwords"), + NULL, -1, + BONOBO_UI_HANDLER_PIXMAP_NONE, + 0, + 0, 0, forget_passwords, NULL); + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH); @@ -120,6 +126,7 @@ control_deactivate (BonoboControl *control, BonoboUIHandler *uih) bonobo_ui_handler_menu_remove (uih, "/Tools/Filter Druid ..."); bonobo_ui_handler_menu_remove (uih, "/Tools/Virtual Folder Druid ..."); bonobo_ui_handler_menu_remove (uih, "/Tools/Mail Configuration ..."); + bonobo_ui_handler_menu_remove (uih, "/Tools/Forget Passwords"); bonobo_ui_handler_dock_remove (uih, "/Toolbar"); } diff --git a/mail/mail.h b/mail/mail.h index 3ee71e0162..190dfa9272 100644 --- a/mail/mail.h +++ b/mail/mail.h @@ -64,4 +64,5 @@ GtkWidget *providers_config_new (void); /* session */ void session_init (void); +void forget_passwords (BonoboUIHandler *uih, void *user_data, const char *path); extern CamelSession *session; diff --git a/mail/session.c b/mail/session.c index b7b24920b0..c9dbb0b1ae 100644 --- a/mail/session.c +++ b/mail/session.c @@ -12,6 +12,7 @@ #include "e-util/e-setup.h" CamelSession *session; +GHashTable *passwords; static void request_callback (gchar *string, gpointer data) @@ -30,9 +31,20 @@ evolution_auth_callback (char *prompt, gboolean secret, CamelException *ex) { GtkWidget *dialog; - char *ans; + char *key = NULL, *ans; - /* XXX look up stored passwords */ + if (service && item) { + key = g_strdup_printf ("%s:%s", camel_url_to_string (service->url, FALSE), item); + + if (passwords) { + ans = g_hash_table_lookup (passwords, key); + if (ans) { + g_free (key); + return g_strdup (ans); + } + } else + passwords = g_hash_table_new (g_str_hash, g_str_equal); + } /* XXX parent window? */ dialog = gnome_request_dialog (secret, prompt, NULL, 0, @@ -40,15 +52,22 @@ evolution_auth_callback (char *prompt, gboolean secret, if (!dialog) { camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, "Could not create dialog box."); + g_free (key); return NULL; } if (gnome_dialog_run_and_close (GNOME_DIALOG (dialog)) == -1 || ans == NULL) { camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, "User cancelled query."); + g_free (key); return NULL; } + if (service && item) + g_hash_table_insert (passwords, key, g_strdup (ans)); + else + g_free (key); + return ans; } @@ -60,3 +79,18 @@ session_init (void) session = camel_session_new (evolution_auth_callback); } + +static gboolean +free_entry (gpointer key, gpointer value, gpointer user_data) +{ + g_free (key); + memset (value, 0, strlen (value)); + g_free (value); + return TRUE; +} + +void +forget_passwords (BonoboUIHandler *uih, void *user_data, const char *path) +{ + g_hash_table_foreach_remove (passwords, free_entry, NULL); +} |