aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-session.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/mail-session.c')
-rw-r--r--mail/mail-session.c178
1 files changed, 85 insertions, 93 deletions
diff --git a/mail/mail-session.c b/mail/mail-session.c
index 011f09edca..11285f8a12 100644
--- a/mail/mail-session.c
+++ b/mail/mail-session.c
@@ -25,14 +25,13 @@
#endif
#include <stdlib.h>
+
+#include <gtk/gtkdialog.h>
+#include <gtk/gtkstock.h>
+
#include <libgnome/gnome-defs.h>
#include <libgnome/gnome-config.h>
#include <libgnome/gnome-sound.h>
-#include <libgnomeui/gnome-dialog.h>
-#include <libgnomeui/gnome-dialog-util.h>
-#include <libgnomeui/gnome-messagebox.h>
-#include <libgnomeui/gnome-stock.h>
-
#include <gal/widgets/e-unicode.h>
#include "camel/camel-filter-driver.h"
@@ -150,9 +149,8 @@ make_key (CamelService *service, const char *item)
/* ********************************************************************** */
-static GnomeDialog *password_dialogue = NULL;
+static GtkDialog *password_dialogue = NULL;
static EDList password_list = E_DLIST_INITIALISER(password_list);
-static int password_destroy_id;
struct _pass_msg {
struct _mail_msg msg;
@@ -167,7 +165,9 @@ struct _pass_msg {
char *service_url;
char *key;
+ MailConfigService *config_service;
GtkWidget *check;
+ GtkWidget *entry;
char *result;
int ismain;
};
@@ -175,29 +175,20 @@ struct _pass_msg {
static void do_get_pass(struct _mail_msg *mm);
static void
-pass_got (char *string, void *data)
+pass_response(GtkDialog *dialogue, int button, void *data)
{
struct _pass_msg *m = data;
-
- if (string) {
- MailConfigService *service = NULL;
- const MailConfigAccount *mca;
+
+ switch(button) {
+ case GTK_RESPONSE_OK: {
gboolean cache, remember;
- m->result = g_strdup (string);
- remember = cache = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m->check));
+ m->result = g_strdup(gtk_entry_get_text((GtkEntry *)m->entry));
+ remember = cache = m->check?gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m->check)):FALSE;
+
if (m->service_url) {
- mca = mail_config_get_account_by_source_url (m->service_url);
- if (mca) {
- service = mca->source;
- } else {
- mca = mail_config_get_account_by_transport_url (m->service_url);
- if (mca)
- service = mca->transport;
- }
-
- if (service) {
- mail_config_service_set_save_passwd (service, cache);
+ if (m->service) {
+ mail_config_service_set_save_passwd (m->config_service, cache);
/* set `cache' to TRUE because people don't want to have to
re-enter their passwords for this session even if they told
@@ -217,14 +208,14 @@ pass_got (char *string, void *data)
if (remember)
e_passwords_remember_password (m->key);
}
- } else {
+ break; }
+ default:
camel_exception_set(m->ex, CAMEL_EXCEPTION_USER_CANCEL, _("User canceled operation."));
+ break;
}
- if (password_destroy_id) {
- gtk_signal_disconnect((GtkObject *)password_dialogue, password_destroy_id);
- password_destroy_id = 0;
- }
+ gtk_widget_destroy((GtkWidget *)dialogue);
+ g_object_unref(dialogue);
password_dialogue = NULL;
e_msgport_reply((EMsg *)m);
@@ -234,22 +225,10 @@ pass_got (char *string, void *data)
}
static void
-request_password_deleted(GtkWidget *w, struct _pass_msg *m)
-{
- password_destroy_id = 0;
- pass_got(NULL, m);
-}
-
-static void
request_password(struct _pass_msg *m)
{
- const MailConfigAccount *mca = NULL;
- GtkWidget *dialogue;
- GtkWidget *check, *check_label, *entry;
- GList *children, *iter;
- gboolean show;
char *title;
- unsigned int accel_key;
+ const MailConfigAccount *mca = NULL;
/* If we already have a password_dialogue up, save this request till later */
if (!m->ismain && password_dialogue) {
@@ -257,6 +236,38 @@ request_password(struct _pass_msg *m)
return;
}
+ if (m->service_url) {
+ if ( (mca = mail_config_get_account_by_source_url(m->service_url)) )
+ m->config_service = mca->source;
+ else if ( (mca = mail_config_get_account_by_transport_url (m->service_url)) )
+ m->config_service = mca->transport;
+ }
+
+ if (mca)
+ title = g_strdup_printf (_("Enter Password for %s"), mca->name);
+ else
+ title = g_strdup (_("Enter Password"));
+
+ password_dialogue = (GtkDialog *)gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, "%s", m->prompt);
+ g_signal_connect(password_dialogue, "response", G_CALLBACK(pass_response), m);
+ gtk_window_set_title (GTK_WINDOW (password_dialogue), title);
+ g_free (title);
+
+ m->entry = gtk_entry_new();
+ gtk_entry_set_visibility((GtkEntry *)m->entry, !m->secret);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (password_dialogue)->vbox), m->entry, TRUE, FALSE, 0);
+ gtk_widget_show(m->entry);
+
+ if (m->service_url == NULL || m->service != NULL) {
+ m->check = gtk_check_button_new_with_mnemonic(m->service_url? _("_Remember this password") :
+ _("_Remember this password for the remainder of this session"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m->check), m->config_service->save_passwd);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (password_dialogue)->vbox), m->check, TRUE, FALSE, 0);
+ gtk_widget_show(m->check);
+ }
+
+#if 0
+
/* FIXME: Remove this total snot */
/* assume we can use any widget to translate string for display */
@@ -264,7 +275,7 @@ request_password(struct _pass_msg *m)
title = e_utf8_to_gtk_string (GTK_WIDGET (check_label), m->prompt);
password_dialogue = (GnomeDialog *)dialogue = gnome_request_dialog (m->secret, title, NULL, 0, pass_got, m, NULL);
g_free(title);
- password_destroy_id = gtk_signal_connect((GtkObject *)dialogue, "destroy", request_password_deleted, m);
+ password_destroy_id = g_signal_connect((GtkObject *)dialogue, "destroy", request_password_deleted, m);
check = gtk_check_button_new ();
gtk_misc_set_alignment (GTK_MISC (check_label), 0.0, 0.5);
@@ -309,7 +320,7 @@ request_password(struct _pass_msg *m)
g_list_free (children);
if (entry) {
- gtk_object_ref (GTK_OBJECT (entry));
+ g_object_ref((entry));
gtk_container_remove (GTK_CONTAINER (GNOME_DIALOG (dialogue)->vbox), entry);
}
@@ -318,7 +329,7 @@ request_password(struct _pass_msg *m)
if (entry) {
gtk_box_pack_end (GTK_BOX (GNOME_DIALOG (dialogue)->vbox), entry, TRUE, FALSE, 0);
gtk_widget_grab_focus (entry);
- gtk_object_unref (GTK_OBJECT (entry));
+ g_object_unref((entry));
}
m->check = check;
@@ -334,11 +345,12 @@ request_password(struct _pass_msg *m)
gtk_window_set_title (GTK_WINDOW (dialogue), title);
g_free (title);
+#endif
if (m->ismain)
- gnome_dialog_run_and_close ((GnomeDialog *)dialogue);
+ gtk_dialog_run(password_dialogue);
else
- gtk_widget_show(dialogue);
+ gtk_widget_show((GtkWidget *)password_dialogue);
}
static void
@@ -444,9 +456,8 @@ forget_password (CamelSession *session, CamelService *service, const char *item,
/* ********************************************************************** */
-static GnomeDialog *message_dialogue;
+static GtkDialog *message_dialogue;
static EDList message_list = E_DLIST_INITIALISER(password_list);
-static guint message_destroy_id;
struct _user_message_msg {
struct _mail_msg msg;
@@ -461,48 +472,31 @@ struct _user_message_msg {
static void do_user_message (struct _mail_msg *mm);
-/* if we dont have to wait for reply, we just check to see if any newly waiting prompts are there */
-static void
-user_message_destroy_noreply(GnomeDialog *gd, void *data)
-{
- struct _user_message_msg *m;
-
- message_dialogue = NULL;
- if ((m = (struct _user_message_msg *)e_dlist_remhead(&message_list)))
- do_user_message((struct _mail_msg *)m);
-}
-
/* clicked, send back the reply */
static void
-user_message_clicked(GnomeDialog *gd, int button, struct _user_message_msg *m)
+user_message_response(GtkDialog *gd, int button, struct _user_message_msg *m)
{
+ gtk_widget_destroy((GtkWidget *)gd);
+ g_object_unref(gd);
+
message_dialogue = NULL;
- if (message_destroy_id) {
- gtk_signal_disconnect((GtkObject *)gd, message_destroy_id);
- message_destroy_id = 0;
+ /* if !allow_cancel, then we've already replied */
+ if (m->allow_cancel) {
+ m->result = button == GTK_RESPONSE_OK;
+ e_msgport_reply((EMsg *)m);
}
- m->result = button == 0;
- e_msgport_reply((EMsg *)m);
-
/* check for pendings */
if ((m = (struct _user_message_msg *)e_dlist_remhead(&message_list)))
do_user_message((struct _mail_msg *)m);
}
static void
-user_message_destroy(GnomeDialog *gd, struct _user_message_msg *m)
-{
- message_destroy_id = 0;
- user_message_clicked(gd, -1, m);
-}
-
-static void
do_user_message (struct _mail_msg *mm)
{
struct _user_message_msg *m = (struct _user_message_msg *)mm;
- const char *msg_type;
+ GtkMessageType msg_type;
if (!m->ismain && message_dialogue != NULL) {
e_dlist_addtail(&message_list, (EDListNode *)m);
@@ -511,35 +505,33 @@ do_user_message (struct _mail_msg *mm)
switch (m->type) {
case CAMEL_SESSION_ALERT_INFO:
- msg_type = GNOME_MESSAGE_BOX_INFO;
+ msg_type = GTK_MESSAGE_INFO;
break;
case CAMEL_SESSION_ALERT_WARNING:
- msg_type = GNOME_MESSAGE_BOX_WARNING;
+ msg_type = GTK_MESSAGE_WARNING;
break;
case CAMEL_SESSION_ALERT_ERROR:
- msg_type = GNOME_MESSAGE_BOX_ERROR;
+ msg_type = GTK_MESSAGE_ERROR;
break;
default:
- msg_type = NULL;
+ msg_type = GTK_MESSAGE_INFO;
}
- message_dialogue = (GnomeDialog *)gnome_message_box_new(m->prompt, msg_type, GNOME_STOCK_BUTTON_OK,
- m->allow_cancel ? GNOME_STOCK_BUTTON_CANCEL : NULL,
- NULL);
- gnome_dialog_set_default(message_dialogue, 1);
- gnome_dialog_set_close(message_dialogue, TRUE);
- gtk_window_set_policy (GTK_WINDOW (message_dialogue), TRUE, TRUE, TRUE);
+ message_dialogue = (GtkDialog *)gtk_message_dialog_new(
+ NULL, 0, msg_type,
+ m->allow_cancel?GTK_BUTTONS_OK_CANCEL:GTK_BUTTONS_OK,
+ m->prompt);
+ gtk_dialog_set_default_response(message_dialogue, m->allow_cancel?GTK_RESPONSE_CANCEL:GTK_RESPONSE_OK);
+ g_object_set(message_dialogue, "allow_shrink", TRUE, "allow_grow", TRUE, NULL);
/* We only need to wait for the result if we allow cancel otherwise show but send result back instantly */
if (m->allow_cancel) {
- gtk_signal_connect((GtkObject*)message_dialogue, "clicked", user_message_clicked, m);
- message_destroy_id = gtk_signal_connect((GtkObject*)message_dialogue, "destroy", user_message_destroy, m);
+ g_signal_connect(message_dialogue, "response", G_CALLBACK(user_message_response), m);
if (m->ismain)
- gnome_dialog_run_and_close ((GnomeDialog *)message_dialogue);
+ gtk_dialog_run(message_dialogue);
else
gtk_widget_show((GtkWidget *)message_dialogue);
} else {
- gtk_signal_connect((GtkObject *)message_dialogue, "destroy", user_message_destroy_noreply, NULL);
gtk_widget_show((GtkWidget *)message_dialogue);
m->result = TRUE;
e_msgport_reply((EMsg *)m);
@@ -760,7 +752,7 @@ register_timeout (CamelSession *session, guint32 interval, CamelTimeoutCallback
MAIL_SESSION_UNLOCK(session, lock);
- camel_object_ref((CamelObject *)ms);
+ camel_object_ref(ms);
mail_async_event_emit(ms->async, MAIL_ASYNC_GUI, (MailAsyncFunc)main_register_timeout, (CamelObject *)session, (void *)ret, NULL);
return ret;
@@ -802,7 +794,7 @@ remove_timeout (CamelSession *session, guint handle)
MAIL_SESSION_UNLOCK(session, lock);
if (remove) {
- camel_object_ref((CamelObject *)ms);
+ camel_object_ref(ms);
mail_async_event_emit(ms->async, MAIL_ASYNC_GUI,
(MailAsyncFunc)main_remove_timeout, (CamelObject *)session, (void *)handle, NULL);
} else
@@ -913,7 +905,7 @@ main_get_filter_driver (CamelSession *session, const char *type, CamelException
g_string_free (fsearch, TRUE);
g_string_free (faction, TRUE);
- gtk_object_unref (GTK_OBJECT (fc));
+ g_object_unref(fc);
return driver;
}