diff options
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 9 | ||||
-rw-r--r-- | mail/mail-local.c | 95 | ||||
-rw-r--r-- | mail/mail-tools.c | 28 | ||||
-rw-r--r-- | mail/mail-tools.h | 2 |
4 files changed, 88 insertions, 46 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index d88aa8b219..d72cf5b544 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,12 @@ +2001-05-11 Jeffrey Stedfast <fejj@ximian.com> + + * mail-local.c (mail_local_reconfigure_folder): Set a title on the + window "Reconfigure %s" where %s is the folder name. Also, don't + allow more than one of these type windows to be opened per folder. + + * mail-tools.c (mail_tool_get_folder_name): Fix Danw's kludge to + actually work :-) + 2001-05-11 Martha Burke <martha@ximian.com> * gui/Makefile.am: sanitize LD_ADDS and CFLAGS so the libtool diff --git a/mail/mail-local.c b/mail/mail-local.c index 597a17b8e1..5c27fb0e0a 100644 --- a/mail/mail-local.c +++ b/mail/mail-local.c @@ -987,67 +987,96 @@ static struct _mail_msg_op reconfigure_folder_op = { reconfigure_folder_free, }; +/* hash table of folders that the user has a reconfig-folder dialog for */ +static GHashTable *reconfigure_folder_hash = NULL; + static void -reconfigure_clicked(GnomeDialog *d, int button, struct _reconfigure_msg *m) +reconfigure_clicked (GnomeDialog *dialog, int button, struct _reconfigure_msg *m) { if (button == 0) { - GtkMenu *menu; + GtkWidget *menu; int type; char *types[] = { "mbox", "maildir", "mh" }; - + /* hack to clear the message list during update */ - message_list_set_folder(m->fb->message_list, NULL); - - menu = (GtkMenu *)gtk_option_menu_get_menu(m->optionlist); - type = g_list_index(GTK_MENU_SHELL(menu)->children, gtk_menu_get_active(menu)); + message_list_set_folder (m->fb->message_list, NULL); + + menu = gtk_option_menu_get_menu (m->optionlist); + type = g_list_index (GTK_MENU_SHELL (menu)->children, + gtk_menu_get_active (GTK_MENU (menu))); if (type < 0 || type > 2) type = 0; - - gtk_widget_set_sensitive(m->frame, FALSE); - gtk_widget_set_sensitive(m->apply, FALSE); - gtk_widget_set_sensitive(m->cancel, FALSE); - + + gtk_widget_set_sensitive (m->frame, FALSE); + gtk_widget_set_sensitive (m->apply, FALSE); + gtk_widget_set_sensitive (m->cancel, FALSE); + m->newtype = g_strdup (types[type]); - e_thread_put(mail_thread_queued, (EMsg *)m); + e_thread_put (mail_thread_queued, (EMsg *)m); } else - mail_msg_free((struct _mail_msg *)m); - + mail_msg_free ((struct _mail_msg *)m); + if (button != -1) - gnome_dialog_close(d); + gnome_dialog_close (dialog); } void -mail_local_reconfigure_folder(FolderBrowser *fb) +mail_local_reconfigure_folder (FolderBrowser *fb) { CamelStore *store; GladeXML *gui; GnomeDialog *gd; struct _reconfigure_msg *m; - + char *name, *title; + if (fb->folder == NULL) { - g_warning("Trying to reconfigure nonexistant folder"); + g_warning ("Trying to reconfigure nonexistant folder"); return; } - - m = mail_msg_new(&reconfigure_folder_op, NULL, sizeof(*m)); - store = camel_folder_get_parent_store(fb->folder); - - gui = glade_xml_new(EVOLUTION_GLADEDIR "/local-config.glade", "dialog_format"); + + if ((gd = g_hash_table_lookup (reconfigure_folder_hash, fb->folder))) { + /* FIXME: raise this dialog?? */ + return; + } + + m = mail_msg_new (&reconfigure_folder_op, NULL, sizeof (*m)); + store = camel_folder_get_parent_store (fb->folder); + + gui = glade_xml_new (EVOLUTION_GLADEDIR "/local-config.glade", "dialog_format"); gd = (GnomeDialog *)glade_xml_get_widget (gui, "dialog_format"); - + + name = mail_tool_get_folder_name (fb->folder); + title = g_strdup_printf ("Reconfigure %s", name); + gtk_window_set_title (GTK_WINDOW (gd), title); + g_free (title); + g_free (name); + m->frame = glade_xml_get_widget (gui, "frame_format"); m->apply = glade_xml_get_widget (gui, "apply_format"); m->cancel = glade_xml_get_widget (gui, "cancel_format"); m->optionlist = (GtkOptionMenu *)glade_xml_get_widget (gui, "option_format"); m->newtype = NULL; m->fb = fb; - gtk_object_ref((GtkObject *)fb); - - gtk_label_set_text((GtkLabel *)glade_xml_get_widget (gui, "label_format"), - ((CamelService *)store)->url->protocol); - - gtk_signal_connect((GtkObject *)gd, "clicked", reconfigure_clicked, m); - gtk_object_unref((GtkObject *)gui); - + gtk_object_ref (GTK_OBJECT (fb)); + + gtk_label_set_text ((GtkLabel *)glade_xml_get_widget (gui, "label_format"), + ((CamelService *)store)->url->protocol); + + gtk_signal_connect (GTK_OBJECT (gd), "clicked", reconfigure_clicked, m); + gtk_object_unref (GTK_OBJECT (gui)); + + if (!reconfigure_folder_hash) + reconfigure_folder_hash = g_hash_table_new (g_direct_hash, g_direct_equal); + + g_hash_table_insert (reconfigure_folder_hash, (gpointer) fb->folder, (gpointer) gd); + gnome_dialog_run_and_close (GNOME_DIALOG (gd)); + + /* remove this folder from our hash since we are done with it */ + g_hash_table_remove (reconfigure_folder_hash, fb->folder); + if (g_hash_table_size (reconfigure_folder_hash) == 0) { + /* additional cleanup */ + g_hash_table_destroy (reconfigure_folder_hash); + reconfigure_folder_hash = NULL; + } } diff --git a/mail/mail-tools.c b/mail/mail-tools.c index 994879953b..abec85f86c 100644 --- a/mail/mail-tools.c +++ b/mail/mail-tools.c @@ -62,23 +62,27 @@ mail_tool_get_folder_from_urlname (const gchar *url, const gchar *name, return folder; } -const gchar * +char * mail_tool_get_folder_name (CamelFolder *folder) { const char *name = camel_folder_get_full_name (folder); - char *path; - + char *path, *pend; + /* This is a kludge. */ - - if (strcmp (name, "//mbox") && strcmp (name, "//mh")) - return name; - + if (strcmp (name, "mbox") && strcmp (name, "mh") && strcmp (name, "maildir")) + return g_strdup (name); + /* For mbox/mh, return the parent store's final path component. */ - path = CAMEL_SERVICE (folder->parent_store)->url->path; - if (strchr (path, '/')) - return strrchr (path, '/') + 1; - else - return path; + path = g_strdup (CAMEL_SERVICE (folder->parent_store)->url->path); + pend = path + strlen (path) - 1; + if (*pend == '/') + *pend = '\0'; + + pend = path; + path = g_strdup (g_basename (path)); + g_free (pend); + + return path; } gchar * diff --git a/mail/mail-tools.h b/mail/mail-tools.h index 5738ea0efa..5cb546a250 100644 --- a/mail/mail-tools.h +++ b/mail/mail-tools.h @@ -34,7 +34,7 @@ mail_tool_get_folder_from_urlname (const gchar *url, const gchar *name, guint32 flags, CamelException *ex); /* Get a useful name for a given CamelFolder (ie, not "mbox") */ -const gchar *mail_tool_get_folder_name (CamelFolder *folder); +char *mail_tool_get_folder_name (CamelFolder *folder); /* Get the url for the local inbox, index returns if the mailbox is indexed */ gchar *mail_tool_get_local_inbox_url (int *index); |