diff options
-rw-r--r-- | mail/ChangeLog | 36 | ||||
-rw-r--r-- | mail/Makefile.am | 8 | ||||
-rw-r--r-- | mail/mail-account-editor-news.c | 193 | ||||
-rw-r--r-- | mail/mail-account-editor-news.h | 72 | ||||
-rw-r--r-- | mail/mail-accounts.c | 160 | ||||
-rw-r--r-- | mail/mail-config.glade | 114 | ||||
-rw-r--r-- | mail/mail-display.c | 20 | ||||
-rw-r--r-- | mail/message-browser.c | 11 | ||||
-rw-r--r-- | mail/message-list.c | 20 | ||||
-rw-r--r-- | mail/subscribe-dialog.c | 3 |
10 files changed, 575 insertions, 62 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 3da62b9f80..19362691ab 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,39 @@ +2001-07-02 Sam Creasey <sammy@oh.verio.com> + * mail-account-editor-news.c: Added an MailAccountEditorNews, for + NNTP configuratuion. Based on MailAccountEditor, but stripped. + + * Makefile.am: added mail-account-editor-news.c and + mail-account-editor-news.h to SOURCES if ENABLE_NNTP is defined. + + * mail-accounts.c (load_news): Moved this function, and fixed some + slight brokenness. + (news_edit): Added functional code using MailAccountEditorNews + (news_add): Added functional code using news_edit after + allocation. + + * mail-config.glade: news_editor_window widget added. Used by + MailAccountEditorNews. + + * mail-display.c (save_data_cb): Store the pathname used when + saving messages so that the next save box will default to the + previous path. + + * message-browser.c (message_browser_new): add signal handler for + size_allocate on the message browser. Thus new windows are size + as they were last allocated. + (message_browser_size_allocate_cb): handler to store allocations. + + * message-list.c (message_list_setup_etree): connect to the + info_changed signals for the state of the message_list->tree. + Save the folder state to disk, so that when additional + message_lists are created, they are consistant. e.g. the next + buttons do the same thing in the browser, and in the message + viewer after changing sorting options. + + * subscribe-dialog.c (build_tree): freeze sc->folder model while + building the tree. Not doing so takes a very long time over 40000 + newsgroups. + 2001-07-02 Jeffrey Stedfast <fejj@ximian.com> * mail-accounts.c (construct): Setup the Empty Trash On Exit diff --git a/mail/Makefile.am b/mail/Makefile.am index 76566dea47..4fb0ddcf50 100644 --- a/mail/Makefile.am +++ b/mail/Makefile.am @@ -35,8 +35,16 @@ EVOLUTION_MAIL_CORBA_GENERATED = \ Mail-skels.c \ Mail-stubs.c +if ENABLE_NNTP +EVOLUTION_MAIL_NNTP = \ + mail-account-editor-news.c \ + mail-account-editor-news.h +endif + + evolution_mail_SOURCES = \ $(EVOLUTION_MAIL_CORBA_GENERATED) \ + $(EVOLUTION_MAIL_NNTP) \ component-factory.c \ component-factory.h \ e-searching-tokenizer.c \ diff --git a/mail/mail-account-editor-news.c b/mail/mail-account-editor-news.c new file mode 100644 index 0000000000..1c980a9d6d --- /dev/null +++ b/mail/mail-account-editor-news.c @@ -0,0 +1,193 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Cloned from mail-account-editor by Sam Creasey <sammy@oh.verio.com> + * + * Authors: + * Jeffrey Stedfast <fejj@ximian.com> + * Dan Winship <danw@ximian.com> + * + * Copyright 2001 Ximian, Inc. (www.ximian.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <libgnomeui/gnome-messagebox.h> +#include <libgnomeui/gnome-stock.h> +#include <camel/camel-url.h> +#include <gal/widgets/e-unicode.h> +#include <gal/widgets/e-gui-utils.h> + +#include "mail-account-editor-news.h" +#include "mail-session.h" + +static void mail_account_editor_news_class_init (MailAccountEditorNewsClass *class); +static void mail_account_editor_news_finalize (GtkObject *obj); + +static GnomeDialogClass *parent_class; + + +GtkType +mail_account_editor_news_get_type () +{ + static GtkType type = 0; + + if (!type) { + GtkTypeInfo type_info = { + "MailAccountEditorNews", + sizeof (MailAccountEditorNews), + sizeof (MailAccountEditorNewsClass), + (GtkClassInitFunc) mail_account_editor_news_class_init, + (GtkObjectInitFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL + }; + + type = gtk_type_unique (gnome_dialog_get_type (), &type_info); + } + + return type; +} + +static void +mail_account_editor_news_class_init (MailAccountEditorNewsClass *class) +{ + GtkObjectClass *object_class; + + object_class = (GtkObjectClass *) class; + parent_class = gtk_type_class (gnome_dialog_get_type ()); + + object_class->finalize = mail_account_editor_news_finalize; +} + +static void +mail_account_editor_news_finalize (GtkObject *obj) +{ + MailAccountEditorNews *editor = (MailAccountEditorNews *) obj; + + gtk_object_unref (GTK_OBJECT (editor->xml)); + + ((GtkObjectClass *)(parent_class))->finalize (obj); +} + +static gboolean +apply_changes(MailAccountEditorNews *editor) +{ + + CamelURL *url; + GtkEntry *service_ent; + + service_ent = GTK_ENTRY(glade_xml_get_widget(editor->xml, "source_name")); + url = g_new0 (CamelURL, 1); + + url->protocol = g_strdup("nntp"); + url->host = g_strdup(gtk_entry_get_text(service_ent)); + if(strlen(url->host) == 0) { + e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, _("You have not filled in all of the required information.")); + camel_url_free(url); + return FALSE; + } + + if(editor->service->url == NULL) + mail_config_add_news(editor->service); + + editor->service->url = camel_url_to_string(url, 0); + + mail_config_write(); + return TRUE; +} + +static void +apply_clicked (GtkWidget *widget, gpointer data) +{ + MailAccountEditorNews *editor = data; + + apply_changes (editor); +} + +static void +ok_clicked (GtkWidget *widget, gpointer data) +{ + MailAccountEditorNews *editor = data; + + if (apply_changes (editor)) + gtk_widget_destroy (GTK_WIDGET (editor)); +} + +static void +cancel_clicked (GtkWidget *widget, gpointer data) +{ + MailAccountEditorNews *editor = data; + + gtk_widget_destroy (GTK_WIDGET (editor)); +} + +MailAccountEditorNews * +mail_account_editor_news_new (MailConfigService *service) +{ + MailAccountEditorNews *editor; + GtkEntry *service_ent; + + editor = (MailAccountEditorNews *) gtk_type_new (mail_account_editor_news_get_type ()); + + editor->service = service; + editor->xml = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", NULL); + + /* get our toplevel widget and reparent it */ + editor->notebook = GTK_NOTEBOOK (glade_xml_get_widget (editor->xml, "news_editor_notebook")); + gtk_widget_reparent (GTK_WIDGET (editor->notebook), GNOME_DIALOG (editor)->vbox); + + /* give our dialog an OK button and title */ + gtk_window_set_title (GTK_WINDOW (editor), _("Evolution News Editor")); + gtk_window_set_policy (GTK_WINDOW (editor), FALSE, TRUE, TRUE); + gtk_window_set_modal (GTK_WINDOW (editor), TRUE); + gnome_dialog_append_buttons (GNOME_DIALOG (editor), + GNOME_STOCK_BUTTON_OK, + GNOME_STOCK_BUTTON_APPLY, + GNOME_STOCK_BUTTON_CANCEL, + NULL); + + gnome_dialog_button_connect (GNOME_DIALOG (editor), 0 /* OK */, + GTK_SIGNAL_FUNC (ok_clicked), + editor); + gnome_dialog_button_connect (GNOME_DIALOG (editor), 1 /* APPLY */, + GTK_SIGNAL_FUNC (apply_clicked), + editor); + gnome_dialog_button_connect (GNOME_DIALOG (editor), 2 /* CANCEL */, + GTK_SIGNAL_FUNC (cancel_clicked), + editor); + + if(service->url) { + CamelURL *url; + + url = camel_url_new(service->url, NULL); + + if(url->host) { + service_ent = GTK_ENTRY(glade_xml_get_widget(editor->xml, "source_name")); + gtk_entry_set_text(service_ent, url->host); + } + + camel_url_free(url); + } + + return editor; +} diff --git a/mail/mail-account-editor-news.h b/mail/mail-account-editor-news.h new file mode 100644 index 0000000000..69e5194c6d --- /dev/null +++ b/mail/mail-account-editor-news.h @@ -0,0 +1,72 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Cloned from mail-account-editor by Sam Creasey <sammy@oh.verio.com> + * + * Authors: Jeffrey Stedfast <fejj@helixcode.com> + * + * Copyright 2001 Helix Code, Inc. (www.helixcode.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifndef MAIL_ACCOUNT_EDITOR_NEWS_H +#define MAIL_ACCOUNT_EDITOR_NEWS_H + +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus */ + +#include <libgnomeui/gnome-dialog.h> +#include <libgnomeui/gnome-file-entry.h> +#include <gtk/gtk.h> +#include <glade/glade-xml.h> +#include <camel/camel-provider.h> + +#include "mail-config.h" + +#define MAIL_ACCOUNT_EDITOR_NEWS_TYPE (mail_account_editor_news_get_type ()) +#define MAIL_ACCOUNT_EDITOR_NEWS(o) (GTK_CHECK_CAST ((o), MAIL_ACCOUNT_EDITOR_NEWS_TYPE, MailAccountEditorNews)) +#define MAIL_ACCOUNT_EDITOR_NEWS_CLASS(k) (GTK_CHECK_CLASS_CAST((k), MAIL_ACCOUNT_EDITOR_NEWS_TYPE, MailAccountEditorNewsClass)) +#define MAIL_IS_ACCOUNT_EDITOR_NEWS(o) (GTK_CHECK_TYPE ((o), MAIL_ACCOUNT_EDITOR_NEWS_TYPE)) +#define MAIL_IS_ACCOUNT_EDITOR_NEWS_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MAIL_ACCOUNT_EDITOR_NEWS_TYPE)) + +struct _MailAccountEditorNews { + GnomeDialog parent; + + GladeXML *xml; + MailConfigService *service; + GtkNotebook *notebook; +}; + +typedef struct _MailAccountEditorNews MailAccountEditorNews; + +typedef struct { + GnomeDialogClass parent_class; + + /* signals */ + +} MailAccountEditorNewsClass; + +GtkType mail_account_editor_news_get_type (void); + +MailAccountEditorNews *mail_account_editor_news_new (MailConfigService *service); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* MAIL_ACCOUNT_EDITOR_NEWS_H */ diff --git a/mail/mail-accounts.c b/mail/mail-accounts.c index 0be25756f0..f084d163e7 100644 --- a/mail/mail-accounts.c +++ b/mail/mail-accounts.c @@ -38,6 +38,9 @@ #include "mail-config.h" #include "mail-config-druid.h" #include "mail-account-editor.h" +#ifdef ENABLE_NNTP +#include "mail-account-editor-news.h" +#endif #include "mail-session.h" static void mail_accounts_dialog_class_init (MailAccountsDialogClass *class); @@ -149,50 +152,6 @@ load_accounts (MailAccountsDialog *dialog) mail_unselect (dialog->mail_accounts, 0, 0, NULL, dialog); } -#ifdef ENABLE_NNTP -static void -load_news (MailAccountsDialog *dialog) -{ - const MailConfigAccount *account; - const GSList *node = dialog->accounts; - int i = 0; - - gtk_clist_freeze (dialog->news_accounts); - - gtk_clist_clear (dialog->news_accounts); - - while (node) { - CamelURL *url; - gchar *text[3]; - - account = node->data; - - if (account->source && account->source->url) - url = camel_url_new (account->source->url, NULL); - else - url = NULL; - - text[0] = (account->source && account->source->enabled) ? "+" : ""; - text[1] = account->name; - text[2] = g_strdup_printf ("%s%s", url && url->protocol ? url->protocol : _("None"), - account->default_account ? _(" (default)") : ""); - - if (url) - camel_url_free (url); - - gtk_clist_append (dialog->news_accounts, text); - g_free (text[2]); - - /* set the account on the row */ - gtk_clist_set_row_data (dialog->news_accounts, i, (gpointer) account); - - node = node->next; - i++; - } - - gtk_clist_thaw (dialog->news_accounts); -} -#endif /* mail callbacks */ static void @@ -396,6 +355,47 @@ mail_able (GtkButton *button, gpointer data) } #ifdef ENABLE_NNTP +static void +load_news (MailAccountsDialog *dialog) +{ + const MailConfigService *service; + const GSList *node = dialog->news; + int i = 0; + + gtk_clist_freeze (dialog->news_accounts); + + gtk_clist_clear (dialog->news_accounts); + + while (node) { + CamelURL *url; + gchar *text[1]; + + service = node->data; + + if (service->url) + url = camel_url_new (service->url, NULL); + else + url = NULL; + + text[0] = g_strdup_printf ("%s", url && url->host ? url->host : _("None")); + + if (url) + camel_url_free (url); + + gtk_clist_append (dialog->news_accounts, text); + g_free (text[0]); + + /* set the account on the row */ + gtk_clist_set_row_data (dialog->news_accounts, i, (gpointer) service); + + node = node->next; + i++; + } + + gtk_clist_thaw (dialog->news_accounts); +} + + /* news callbacks */ static void news_select (GtkCList *clist, gint row, gint column, GdkEventButton *event, gpointer data) @@ -418,35 +418,75 @@ news_unselect (GtkCList *clist, gint row, gint column, GdkEventButton *event, gp } static void -news_add_finished(GtkWidget *widget, gpointer data) +news_editor_destroyed (GtkWidget *widget, gpointer data) { - /* Either Cancel or Finished was clicked in the druid so reload the accounts */ - MailAccountsDialog *dialog = data; - - dialog->accounts = mail_config_get_accounts (); - load_accounts (dialog); + load_news (MAIL_ACCOUNTS_DIALOG (data)); } + static void -news_add (GtkButton *button, gpointer data) +news_edit (GtkButton *button, gpointer data) { MailAccountsDialog *dialog = data; - MailConfigDruid *druid; - druid = mail_config_druid_new (dialog->shell); - gtk_signal_connect (GTK_OBJECT (druid), "destroy", - GTK_SIGNAL_FUNC (news_add_finished), dialog); + if (dialog->news_row >= 0) { + MailConfigService *service; + MailAccountEditorNews *editor; + + service = gtk_clist_get_row_data (dialog->news_accounts, dialog->news_row); + editor = mail_account_editor_news_new (service); + gtk_signal_connect (GTK_OBJECT (editor), "destroy", + GTK_SIGNAL_FUNC (news_editor_destroyed), + dialog); + gtk_widget_show (GTK_WIDGET (editor)); + } +} + +static void +news_add_destroyed (GtkWidget *widget, gpointer data) +{ + + gpointer *send = data; + MailAccountsDialog *dialog; + MailConfigService *service; + GSList *mini; + + service = send[0]; + dialog = send[1]; + g_free(send); + + dialog->news = mail_config_get_news (); + load_news (dialog); + + mini = g_slist_prepend(NULL, service); + mail_load_storages(dialog->shell, mini, FALSE); + g_slist_free(mini); + + dialog->news = mail_config_get_news (); + load_news (dialog); - gtk_widget_show (GTK_WIDGET (druid)); } static void -news_edit (GtkButton *button, gpointer data) +news_add (GtkButton *button, gpointer data) { MailAccountsDialog *dialog = data; - MailConfigService *server; + MailConfigService *service; + MailAccountEditorNews *editor; + gpointer *send; - /* FIXME: open the editor and stuff */ + send = g_new(gpointer, 2); + + service = g_new0 (MailConfigService, 1); + service->url = NULL; + + editor = mail_account_editor_news_new (service); + send[0] = service; + send[1] = dialog; + gtk_signal_connect (GTK_OBJECT (editor), "destroy", + GTK_SIGNAL_FUNC (news_add_destroyed), + send); + gtk_widget_show (GTK_WIDGET (editor)); } static void @@ -683,7 +723,7 @@ construct (MailAccountsDialog *dialog) GTK_SIGNAL_FUNC (mail_able), dialog); #ifdef ENABLE_NNTP - dialog->news_accounts = GTK_CLIST (glade_xml_get_widget (gui, "clistAccounts")); + dialog->news_accounts = GTK_CLIST (glade_xml_get_widget (gui, "clistNews")); gtk_signal_connect (GTK_OBJECT (dialog->news_accounts), "select-row", GTK_SIGNAL_FUNC (news_select), dialog); gtk_signal_connect (GTK_OBJECT (dialog->news_accounts), "unselect-row", diff --git a/mail/mail-config.glade b/mail/mail-config.glade index f233e30313..40e427d478 100644 --- a/mail/mail-config.glade +++ b/mail/mail-config.glade @@ -1939,6 +1939,120 @@ Kerberos <widget> <class>GtkWindow</class> + <name>news_editor_window</name> + <visible>False</visible> + <title>newswindow1</title> + <type>GTK_WINDOW_TOPLEVEL</type> + <position>GTK_WIN_POS_NONE</position> + <modal>False</modal> + <allow_shrink>False</allow_shrink> + <allow_grow>True</allow_grow> + <auto_shrink>False</auto_shrink> + + <widget> + <class>GtkNotebook</class> + <name>news_editor_notebook</name> + <can_focus>True</can_focus> + <show_tabs>True</show_tabs> + <show_border>True</show_border> + <tab_pos>GTK_POS_TOP</tab_pos> + <scrollable>False</scrollable> + <tab_hborder>2</tab_hborder> + <tab_vborder>2</tab_vborder> + <popup_enable>False</popup_enable> + + <widget> + <class>GtkVBox</class> + <name>source_vbox</name> + <border_width>4</border_width> + <homogeneous>False</homogeneous> + <spacing>4</spacing> + + <widget> + <class>GtkFrame</class> + <name>source_frame</name> + <border_width>3</border_width> + <label>Source Information</label> + <label_xalign>0</label_xalign> + <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkVBox</class> + <name>vbox31</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> + + <widget> + <class>GtkHBox</class> + <name>hbox24</name> + <border_width>3</border_width> + <homogeneous>False</homogeneous> + <spacing>5</spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkLabel</class> + <name>source_name_label</name> + <label>NNTP Server:</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + </widget> + + <widget> + <class>GtkEntry</class> + <name>source_name</name> + <can_focus>True</can_focus> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + </widget> + </widget> + </widget> + </widget> + </widget> + + <widget> + <class>GtkLabel</class> + <child_name>Notebook:tab</child_name> + <name>label38</name> + <label>Source</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + </widget> + + </widget> +</widget> + +<widget> + <class>GtkWindow</class> <name>mail_accounts_window</name> <visible>False</visible> <title>window1</title> diff --git a/mail/mail-display.c b/mail/mail-display.c index a2f5d6eaa5..bdb4c3096a 100644 --- a/mail/mail-display.c +++ b/mail/mail-display.c @@ -67,6 +67,8 @@ struct _PixbufLoader { }; static GHashTable *thumbnail_cache = NULL; +static gchar *save_pathname = NULL; /* preserves last directory in save dialog */ + /*----------------------------------------------------------------------* * Callbacks *----------------------------------------------------------------------*/ @@ -147,12 +149,24 @@ save_data_cb (GtkWidget *widget, gpointer user_data) { GtkFileSelection *file_select = (GtkFileSelection *) gtk_widget_get_ancestor (widget, GTK_TYPE_FILE_SELECTION); + gchar *p; /* uh, this doesn't really feel right, but i dont know what to do better */ gtk_widget_hide (GTK_WIDGET (file_select)); write_data_to_file (user_data, gtk_file_selection_get_filename (file_select), FALSE); + + /* preserve the pathname */ + g_free(save_pathname); + save_pathname = g_strdup(gtk_file_selection_get_filename(file_select)); + if((p = strrchr(save_pathname, '/')) != NULL) + p[0] = 0; + else { + g_free(save_pathname); + save_pathname = NULL; + } + gtk_widget_destroy (GTK_WIDGET (file_select)); } @@ -197,7 +211,11 @@ save_part (CamelMimePart *part) GtkFileSelection *file_select; char *filename; - filename = make_safe_filename (g_get_home_dir (), part); + if(save_pathname == NULL) + save_pathname = g_get_home_dir(); + + filename = make_safe_filename (save_pathname, part); + file_select = GTK_FILE_SELECTION ( gtk_file_selection_new (_("Save Attachment"))); gtk_file_selection_set_filename (file_select, filename); diff --git a/mail/message-browser.c b/mail/message-browser.c index 39ff1249cc..741c663cd8 100644 --- a/mail/message-browser.c +++ b/mail/message-browser.c @@ -138,6 +138,14 @@ message_browser_folder_loaded (FolderBrowser *fb, const char *uri, MessageBrowse message_browser_message_list_built, mb); } +static void +message_browser_size_allocate_cb (GtkWidget *widget, + GtkAllocation *allocation) +{ + last_allocation = *allocation; + +} + /* Construction */ static void @@ -225,6 +233,9 @@ message_browser_new (const GNOME_Evolution_Shell shell, const char *uri, const c gtk_widget_reparent (GTK_WIDGET (fb->mail_display), vbox); gtk_widget_show (GTK_WIDGET (fb->mail_display)); gtk_widget_show (vbox); + + gtk_signal_connect(GTK_OBJECT(new), "size_allocate", + GTK_SIGNAL_FUNC(message_browser_size_allocate_cb), NULL); bonobo_window_set_contents (BONOBO_WINDOW (new), vbox); gtk_widget_grab_focus (GTK_WIDGET (MAIL_DISPLAY (fb->mail_display)->html)); diff --git a/mail/message-list.c b/mail/message-list.c index ca893b9606..61a99abed3 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -1007,9 +1007,17 @@ save_tree_state(MessageList *ml) g_free(filename); } +static void +sort_info_changed (GtkWidget *widget, MessageList *ml) +{ + save_tree_state(ml); +} + static void message_list_setup_etree(MessageList *message_list, gboolean outgoing) { + ETableState *etstate; + /* build the spec based on the folder, and possibly from a saved file */ /* otherwise, leave default */ if (message_list->folder) { @@ -1043,6 +1051,18 @@ message_list_setup_etree(MessageList *message_list, gboolean outgoing) g_free (path); g_free (name); + + etstate = e_tree_get_state_object(message_list->tree); + gtk_signal_connect(GTK_OBJECT(etstate->sort_info), + "sort_info_changed", + GTK_SIGNAL_FUNC(sort_info_changed), + message_list); + gtk_signal_connect(GTK_OBJECT(etstate->sort_info), + "group_info_changed", + GTK_SIGNAL_FUNC(sort_info_changed), + message_list); + + } } diff --git a/mail/subscribe-dialog.c b/mail/subscribe-dialog.c index 34522e6304..b0b49805b9 100644 --- a/mail/subscribe-dialog.c +++ b/mail/subscribe-dialog.c @@ -762,12 +762,13 @@ build_tree (SubscribeDialog *sc, CamelStore *store) return; } + e_tree_memory_freeze(E_TREE_MEMORY(sc->folder_model)); e_tree_memory_node_remove (E_TREE_MEMORY(sc->folder_model), sc->folder_root); sc->folder_root = e_tree_memory_node_insert (E_TREE_MEMORY(sc->folder_model), NULL, 0, NULL); - build_etree_from_folder_info (sc, sc->folder_root, sc->folder_info); + e_tree_memory_thaw(E_TREE_MEMORY(sc->folder_model)); camel_exception_free (ex); } |