Added an MailAccountEditorNews, for NNTP configuratuion. Based on

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.

svn path=/trunk/; revision=10719
This commit is contained in:
Sam Creasey
2001-07-03 02:56:39 +00:00
committed by Sam Creasy
parent fd6ad06df5
commit e1e2d6393d
10 changed files with 578 additions and 65 deletions

View File

@ -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

View File

@ -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 \

View File

@ -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;
}

View File

@ -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 */

View File

@ -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)
{
load_news (MAIL_ACCOUNTS_DIALOG (data));
}
static void
news_edit (GtkButton *button, 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);
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);
}
static void
news_add (GtkButton *button, gpointer data)
{
MailAccountsDialog *dialog = data;
MailConfigDruid *druid;
MailConfigService *service;
MailAccountEditorNews *editor;
gpointer *send;
druid = mail_config_druid_new (dialog->shell);
gtk_signal_connect (GTK_OBJECT (druid), "destroy",
GTK_SIGNAL_FUNC (news_add_finished), dialog);
gtk_widget_show (GTK_WIDGET (druid));
}
send = g_new(gpointer, 2);
static void
news_edit (GtkButton *button, gpointer data)
{
MailAccountsDialog *dialog = data;
MailConfigService *server;
/* FIXME: open the editor and stuff */
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",

View File

@ -1937,6 +1937,120 @@ Kerberos
</widget>
</widget>
<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>

View File

@ -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);

View File

@ -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));

View File

@ -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);
}
}

View File

@ -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);
}