diff options
-rw-r--r-- | mail/ChangeLog | 6 | ||||
-rw-r--r-- | mail/Makefile.am | 2 | ||||
-rw-r--r-- | mail/folder-browser-factory.c | 193 | ||||
-rw-r--r-- | mail/folder-browser-factory.h | 23 | ||||
-rw-r--r-- | mail/mail-component.c | 38 |
5 files changed, 39 insertions, 223 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 17a38d9be6..32c12a7581 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,8 +1,14 @@ 2003-11-14 Jeffrey Stedfast <fejj@ximian.com> + * folder-browser-factory.[c,h]: Removed. + * mail-component.c (folder_selected_cb): Don't create a new view anymore, simply set the new folder uri on the folder browser. This makes the mailer use a lot less memory than in 1.x + (view_control_activate_cb): Moved here from + folder-browser-factory.c + (impl_createControls): Connect to the activate signal on the view + control. 2003-11-14 Jeffrey Stedfast <fejj@ximian.com> diff --git a/mail/Makefile.am b/mail/Makefile.am index 858f25c3de..b3a5e6e828 100644 --- a/mail/Makefile.am +++ b/mail/Makefile.am @@ -119,8 +119,6 @@ libevolution_mail_la_SOURCES = \ em-junk-plugin.h \ em-html-stream.c \ em-html-stream.h \ - folder-browser-factory.c \ - folder-browser-factory.h \ mail-account-editor.c \ mail-account-editor.h \ mail-account-gui.c \ diff --git a/mail/folder-browser-factory.c b/mail/folder-browser-factory.c deleted file mode 100644 index 194396b062..0000000000 --- a/mail/folder-browser-factory.c +++ /dev/null @@ -1,193 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: Miguel de Icaza <miguel@ximian.com> - * - * Copyright 2002 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 <string.h> - -#include <bonobo/bonobo-main.h> -#include <bonobo/bonobo-object.h> -#include <bonobo/bonobo-generic-factory.h> -#include <bonobo/bonobo-control.h> -#include <bonobo/bonobo-ui-component.h> -#include <bonobo/bonobo-ui-util.h> - -#include <gal/util/e-util.h> -#include <gal/widgets/e-gui-utils.h> - -#include "widgets/menus/gal-view-menus.h" - -#include <gal/menus/gal-view-factory-etable.h> -#include <gal/menus/gal-view-etable.h> - -#include "folder-browser-factory.h" - -#include "mail.h" -#include "shell/Evolution.h" -#include "mail-config.h" -#include "mail-ops.h" -#include "mail-session.h" -#include "mail-folder-cache.h" - -#include "em-folder-browser.h" -#include "em-format.h" - -#include "evolution-shell-component-utils.h" - -/* The FolderBrowser BonoboControls we have. */ -static EList *control_list = NULL; - -/* copied from mail-display.c for now.... */ -static GNOME_Evolution_ShellView -fb_get_svi (BonoboControl *control) -{ - Bonobo_ControlFrame control_frame; - GNOME_Evolution_ShellView shell_view_interface; - CORBA_Environment ev; - - control_frame = bonobo_control_get_control_frame (control, NULL); - - if (control_frame == NULL) - return CORBA_OBJECT_NIL; - - CORBA_exception_init (&ev); - shell_view_interface = Bonobo_Unknown_queryInterface (control_frame, - "IDL:GNOME/Evolution/ShellView:1.0", - &ev); - CORBA_exception_free (&ev); - - if (shell_view_interface == CORBA_OBJECT_NIL) - g_warning ("Control frame doesn't have Evolution/ShellView."); - - return shell_view_interface; -} - -static void -control_activate_cb (BonoboControl *control, - gboolean activate, - gpointer user_data) -{ - BonoboUIComponent *uic; - - uic = bonobo_control_get_ui_component(control); - g_assert (uic != NULL); - - if (activate) { - Bonobo_UIContainer container; - - container = bonobo_control_get_remote_ui_container(control, NULL); - bonobo_ui_component_set_container(uic, container, NULL); - bonobo_object_release_unref(container, NULL); - - g_assert(container == bonobo_ui_component_get_container(uic)); - g_return_if_fail(container != CORBA_OBJECT_NIL); - - em_folder_view_activate(user_data, uic, activate); - } else { - em_folder_view_activate(user_data, uic, activate); - bonobo_ui_component_unset_container(uic, NULL); - } -} - -static void -control_destroy_cb (GtkObject *fb, GObject *control) -{ - e_list_remove (control_list, control); -} - -BonoboControl * -folder_browser_factory_new_control (const char *uri) -{ - BonoboControl *control; - GtkWidget *fb; - -#if 0 - if (!(fb = folder_browser_new (uri))) - return NULL; - - FOLDER_BROWSER (fb)->pref_master = TRUE; /* save UI settings changed in this FB */ -#endif - fb = em_folder_browser_new(); - gtk_widget_show (fb); - em_folder_view_set_folder_uri((EMFolderView *)fb, uri); - em_format_set_session((EMFormat *)((EMFolderView *)fb)->preview, session); - - control = bonobo_control_new (fb); - - if (control == NULL) { - g_object_unref (fb); - return NULL; - } - - g_signal_connect (control, "activate", G_CALLBACK (control_activate_cb), fb); - - g_object_weak_ref (G_OBJECT(control), (GWeakNotify) control_destroy_cb, fb); - - if (!control_list) - control_list = e_list_new (NULL, NULL, NULL); - - e_list_append (control_list, control); - - return control; -} - -EList * -folder_browser_factory_get_control_list (void) -{ - if (!control_list) - control_list = e_list_new (NULL, NULL, NULL); - return control_list; -} - -struct _EMFolderBrowser * -folder_browser_factory_get_browser(const char *uri) -{ - EList *controls; - EIterator *it; - BonoboControl *control; - EMFolderBrowser *fb = NULL; - - return NULL; - - if (control_list == NULL) - return NULL; - - controls = folder_browser_factory_get_control_list (); - - it = e_list_get_iterator (controls); - while (e_iterator_is_valid (it)) { - control = BONOBO_CONTROL (e_iterator_get (it)); - fb = (EMFolderBrowser *)bonobo_control_get_widget(control); - if (((EMFolderView *)fb)->folder_uri && strcmp (((EMFolderView *)fb)->folder_uri, uri) == 0) - break; - fb = NULL; - - e_iterator_next (it); - } - - g_object_unref (it); - - return fb; -} diff --git a/mail/folder-browser-factory.h b/mail/folder-browser-factory.h deleted file mode 100644 index 109938c27e..0000000000 --- a/mail/folder-browser-factory.h +++ /dev/null @@ -1,23 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * folder-browser-factory.c: A Bonobo Control factory for Folder Browsers - * - * Author: - * Miguel de Icaza (miguel@ximian.com) - * - * (C) 2000 Ximian, Inc. - */ - -#ifndef _FOLDER_BROWSER_FACTORY_H -#define _FOLDER_BROWSER_FACTORY_H - -#include <bonobo/bonobo-control.h> -#include "Evolution.h" -#include "e-util/e-list.h" - -BonoboControl *folder_browser_factory_new_control (const char *uri); -EList *folder_browser_factory_get_control_list (void); - -struct _EMFolderBrowser *folder_browser_factory_get_browser(const char *uri); - -#endif /* _FOLDER_BROWSER_FACTORY_H */ diff --git a/mail/mail-component.c b/mail/mail-component.c index c036deac8b..a551eb26ce 100644 --- a/mail/mail-component.c +++ b/mail/mail-component.c @@ -33,12 +33,14 @@ #include <fcntl.h> #include <errno.h> +#include "em-popup.h" +#include "em-utils.h" +#include "em-format.h" #include "em-folder-tree.h" #include "em-folder-browser.h" #include "em-folder-selector.h" #include "em-folder-selection.h" -#include "folder-browser-factory.h" #include "mail-config.h" #include "mail-component.h" #include "mail-folder-cache.h" @@ -49,8 +51,6 @@ #include "mail-send-recv.h" #include "mail-session.h" -#include "em-popup.h" -#include "em-utils.h" #include "em-migrate.h" #include <gtk/gtklabel.h> @@ -232,6 +232,31 @@ folder_selected_cb (EMFolderTree *emft, const char *path, const char *uri, EMFol em_folder_view_set_folder_uri (view, uri); } +static void +view_control_activate_cb (BonoboControl *control, gboolean activate, EMFolderView *view) +{ + BonoboUIComponent *uic; + + uic = bonobo_control_get_ui_component (control); + g_assert (uic != NULL); + + if (activate) { + Bonobo_UIContainer container; + + container = bonobo_control_get_remote_ui_container (control, NULL); + bonobo_ui_component_set_container (uic, container, NULL); + bonobo_object_release_unref (container, NULL); + + g_assert (container == bonobo_ui_component_get_container(uic)); + g_return_if_fail (container != CORBA_OBJECT_NIL); + + em_folder_view_activate (view, uic, activate); + } else { + em_folder_view_activate (view, uic, activate); + bonobo_ui_component_unset_container (uic, NULL); + } +} + /* GObject methods. */ @@ -304,6 +329,7 @@ impl_createControls (PortableServer_Servant servant, tree_widget = (GtkWidget *) priv->emft; view_widget = em_folder_browser_new (); + em_format_set_session ((EMFormat *) ((EMFolderView *) view_widget)->preview, session); gtk_widget_show (tree_widget); gtk_widget_show (view_widget); @@ -314,6 +340,8 @@ impl_createControls (PortableServer_Servant servant, *corba_tree_control = CORBA_Object_duplicate (BONOBO_OBJREF (tree_control), ev); *corba_view_control = CORBA_Object_duplicate (BONOBO_OBJREF (view_control), ev); + g_signal_connect (view_control, "activate", G_CALLBACK (view_control_activate_cb), view_widget); + g_signal_connect (tree_widget, "folder-selected", G_CALLBACK (folder_selected_cb), view_widget); } @@ -396,7 +424,7 @@ mail_component_init (MailComponent *component) if (camel_mkdir (priv->base_directory, 0777) == -1 && errno != EEXIST) abort (); - priv->emft = em_folder_tree_new (); + priv->emft = (EMFolderTree *) em_folder_tree_new (); /* EPFIXME: Turn into an object? */ mail_session_init (priv->base_directory); @@ -642,7 +670,7 @@ mail_component_get_tree_model (MailComponent *component) { EMFolderTreeModel *model; - model = em_folder_tree_get_model ((GtkTreeView *) component->priv->emft); + model = em_folder_tree_get_model (component->priv->emft); g_object_ref (model); return model; |