aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-callbacks.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/mail-callbacks.c')
-rw-r--r--mail/mail-callbacks.c74
1 files changed, 57 insertions, 17 deletions
diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c
index 377cea95d0..c3223ea15e 100644
--- a/mail/mail-callbacks.c
+++ b/mail/mail-callbacks.c
@@ -1407,7 +1407,8 @@ previous_unread_msg (GtkWidget *button, gpointer user_data)
0, CAMEL_MESSAGE_SEEN);
}
-static void expunged_folder(CamelFolder *f, void *data)
+static void
+expunged_folder (CamelFolder *f, void *data)
{
FolderBrowser *fb = data;
@@ -1427,8 +1428,18 @@ expunge_folder (BonoboUIComponent *uih, void *user_data, const char *path)
}
}
+/********************** Begin Filter Editor ********************/
+
+static GtkWidget *filter_editor = NULL;
+
+static void
+filter_editor_destroy (GtkWidget *dialog, gpointer user_data)
+{
+ filter_editor = NULL;
+}
+
static void
-filter_druid_clicked (GtkWidget *dialog, int button, FolderBrowser *fb)
+filter_editor_clicked (GtkWidget *dialog, int button, FolderBrowser *fb)
{
FilterContext *fc;
@@ -1458,7 +1469,11 @@ filter_edit (BonoboUIComponent *uih, void *user_data, const char *path)
FolderBrowser *fb = FOLDER_BROWSER (user_data);
FilterContext *fc;
char *user, *system;
- GtkWidget *dialog;
+
+ if (filter_editor) {
+ /* FIXME: raise the filter_editor dialog? */
+ return;
+ }
fc = filter_context_new ();
user = g_strdup_printf ("%s/filters.xml", evolution_dir);
@@ -1467,6 +1482,7 @@ filter_edit (BonoboUIComponent *uih, void *user_data, const char *path)
g_free (user);
if (((RuleContext *)fc)->error) {
+ GtkWidget *dialog;
gchar *err;
err = g_strdup_printf (_("Error loading filter information:\n%s"),
@@ -1478,14 +1494,17 @@ filter_edit (BonoboUIComponent *uih, void *user_data, const char *path)
return;
}
- dialog = (GtkWidget *)filter_editor_new (fc, filter_source_names);
- gtk_window_set_title (GTK_WINDOW (dialog), _("Filters"));
-
- gtk_object_set_data_full (GTK_OBJECT (dialog), "context", fc, (GtkDestroyNotify)gtk_object_unref);
- gtk_signal_connect (GTK_OBJECT (dialog), "clicked", filter_druid_clicked, fb);
- gtk_widget_show (GTK_WIDGET (dialog));
+ filter_editor = (GtkWidget *)filter_editor_new (fc, filter_source_names);
+ gtk_window_set_title (GTK_WINDOW (filter_editor), _("Filters"));
+
+ gtk_object_set_data_full (GTK_OBJECT (filter_editor), "context", fc, (GtkDestroyNotify)gtk_object_unref);
+ gtk_signal_connect (GTK_OBJECT (filter_editor), "clicked", filter_editor_clicked, fb);
+ gtk_signal_connect (GTK_OBJECT (filter_editor), "destroy", filter_editor_destroy, NULL);
+ gtk_widget_show (GTK_WIDGET (filter_editor));
}
+/********************** End Filter Editor ********************/
+
void
vfolder_edit_vfolders (BonoboUIComponent *uih, void *user_data, const char *path)
{
@@ -1495,11 +1514,15 @@ vfolder_edit_vfolders (BonoboUIComponent *uih, void *user_data, const char *path
void
providers_config (BonoboUIComponent *uih, void *user_data, const char *path)
{
- /* FIXME: should we block until mail-config is done? */
- MailAccountsDialog *dialog;
+ static MailAccountsDialog *dialog = NULL;
- dialog = mail_accounts_dialog_new ((FOLDER_BROWSER (user_data))->shell);
- gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
+ if (!dialog) {
+ dialog = mail_accounts_dialog_new ((FOLDER_BROWSER (user_data))->shell);
+ gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
+ dialog = NULL;
+ } else {
+ /* FIXME: raise the dialog? */
+ }
}
/*
@@ -1601,15 +1624,32 @@ print_preview_msg (GtkWidget *button, gpointer user_data)
mail_print_preview_msg (fb->mail_display);
}
+/******************** Begin Subscription Dialog ***************************/
+
+static GtkWidget *subscribe_dialog = NULL;
+
+static void
+subscribe_dialog_destroy (GtkWidget *widget, gpointer user_data)
+{
+ subscribe_dialog = NULL;
+}
+
void
manage_subscriptions (BonoboUIComponent *uih, void *user_data, const char *path)
{
- /* XXX pass in the selected storage */
- GtkWidget *subscribe = subscribe_dialog_new ((FOLDER_BROWSER (user_data))->shell);
-
- gtk_widget_show (subscribe);
+ if (!subscribe_dialog) {
+ subscribe_dialog = subscribe_dialog_new ((FOLDER_BROWSER (user_data))->shell);
+ gtk_signal_connect (GTK_OBJECT (subscribe_dialog), "destroy",
+ subscribe_dialog_destroy, NULL);
+
+ gtk_widget_show (subscribe_dialog);
+ } else {
+ /* FIXME: raise the subscription dialog window... */
+ }
}
+/******************** End Subscription Dialog ***************************/
+
void
configure_folder (BonoboUIComponent *uih, void *user_data, const char *path)
{