diff options
-rw-r--r-- | mail/ChangeLog | 23 | ||||
-rw-r--r-- | mail/Makefile.am | 3 | ||||
-rw-r--r-- | mail/folder-browser.c | 19 | ||||
-rw-r--r-- | mail/folder-browser.h | 3 | ||||
-rw-r--r-- | mail/mail-callbacks.c | 14 | ||||
-rw-r--r-- | mail/mail-types.h | 1 | ||||
-rw-r--r-- | mail/mail-view.c | 256 | ||||
-rw-r--r-- | mail/message-browser.c | 282 | ||||
-rw-r--r-- | mail/message-browser.h | 60 | ||||
-rw-r--r-- | mail/message-list.c | 28 | ||||
-rw-r--r-- | mail/message-list.h | 3 |
11 files changed, 425 insertions, 267 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 1ceda1f344..d42fca5110 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,18 @@ +2001-04-23 Jeffrey Stedfast <fejj@ximian.com> + + * mail-callbacks.c (do_view_message): Use the message-browser + widget rather than the mail-view window. + + * mail-view.c: Removed. + + * folder-browser.c: Added a folder_loaded signal. + + * message-browser.[c,h]: New window to solve all our message + browsing needs. This replaces mail-view.c. + + * message-list.c (message_list_select_uid): New function needed by + the new message-browser window. + 2001-04-23 Dan Winship <danw@ximian.com> * mail-callbacks.c (save_msg): Append a "/" to the result of @@ -14,10 +29,10 @@ 2001-04-22 Gediminas Paulauskas <menesis@delfi.lt> - * folder-browser.c, mail-autofilter.c, mail-callbacks.c, mail-ops.c, - mail-summary.c, mail-vfolder.c: use system = EVOLUTION_DATADIR "/file" - instead of g_strdup_printf. Rename userrules to user (and system) to be - consistent. + * folder-browser.c, mail-autofilter.c, mail-callbacks.c, + mail-ops.c, mail-summary.c, mail-vfolder.c: use system = + EVOLUTION_DATADIR "/file" instead of g_strdup_printf. Rename + userrules to user (and system) to be consistent. * mail-send-recv.c: set window icon to send-receive.xpm diff --git a/mail/Makefile.am b/mail/Makefile.am index de0b3c92e1..ed3cdf3b2b 100644 --- a/mail/Makefile.am +++ b/mail/Makefile.am @@ -92,7 +92,8 @@ evolution_mail_SOURCES = \ mail-types.h \ mail-vfolder.c \ mail-vfolder.h \ - mail-view.c \ + message-browser.c \ + message-browser.h \ main.c \ message-list.c \ message-list.h \ diff --git a/mail/folder-browser.c b/mail/folder-browser.c index 7cf89d58f7..e7416e50b5 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -52,6 +52,13 @@ static void fb_resize_cb (GtkWidget *w, GtkAllocation *a); static GtkObjectClass *folder_browser_parent_class; +enum { + FOLDER_LOADED, + LAST_SIGNAL +}; + +static guint folder_browser_signals [LAST_SIGNAL] = {0, }; + static void folder_browser_destroy (GtkObject *object) { @@ -92,6 +99,16 @@ folder_browser_class_init (GtkObjectClass *object_class) object_class->destroy = folder_browser_destroy; folder_browser_parent_class = gtk_type_class (PARENT_TYPE); + + folder_browser_signals[FOLDER_LOADED] = + gtk_signal_new ("folder_loaded", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (FolderBrowserClass, folder_loaded), + gtk_marshal_NONE__STRING, + GTK_TYPE_NONE, 1, GTK_TYPE_STRING); + + gtk_object_class_add_signals (object_class, folder_browser_signals, LAST_SIGNAL); } /* @@ -189,6 +206,8 @@ done: /* Sigh, i dont like this (it can be set in reconfigure folder), but its just easier right now to do it this way */ fb->reconfigure = FALSE; + + gtk_signal_emit (GTK_OBJECT (fb), folder_browser_signals [FOLDER_LOADED], fb->uri); } gboolean diff --git a/mail/folder-browser.h b/mail/folder-browser.h index 9e4531b055..94f70b225d 100644 --- a/mail/folder-browser.h +++ b/mail/folder-browser.h @@ -63,6 +63,9 @@ struct _FolderBrowser { typedef struct { GtkTableClass parent_class; + + /* signals - select a message */ + void (*folder_loaded) (FolderBrowser *fb, const char *uri); } FolderBrowserClass; struct fb_ondemand_closure { diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c index 46a38030fa..083c3e89ff 100644 --- a/mail/mail-callbacks.c +++ b/mail/mail-callbacks.c @@ -42,6 +42,7 @@ #include <gal/widgets/e-gui-utils.h> #include <filter/filter-editor.h> #include "mail.h" +#include "message-browser.h" #include "mail-callbacks.h" #include "mail-config.h" #include "mail-accounts.h" @@ -1522,15 +1523,16 @@ configure_folder (BonoboUIComponent *uih, void *user_data, const char *path) } static void -do_view_message(CamelFolder *folder, char *uid, CamelMimeMessage *message, void *data) +do_view_message (CamelFolder *folder, char *uid, CamelMimeMessage *message, void *data) { - /*FolderBrowser *fb = data;*/ - GtkWidget *view; + FolderBrowser *fb = FOLDER_BROWSER (data); - if (message) { + if (message && fb) { + GtkWidget *mb; + camel_folder_set_message_flags (folder, uid, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN); - view = mail_view_create(folder, uid, message); - gtk_widget_show(view); + mb = message_browser_new (fb->shell, fb->uri, uid); + gtk_widget_show (mb); } } diff --git a/mail/mail-types.h b/mail/mail-types.h index 74e650fd4f..3a71f2c8a2 100644 --- a/mail/mail-types.h +++ b/mail/mail-types.h @@ -29,6 +29,7 @@ extern "C" { typedef struct _FolderBrowser FolderBrowser; +typedef struct _MessageBrowser MessageBrowser; typedef struct _SubscribeDialog SubscribeDialog; typedef struct _MessageList MessageList; typedef struct _MailDisplay MailDisplay; diff --git a/mail/mail-view.c b/mail/mail-view.c deleted file mode 100644 index 196533b6d5..0000000000 --- a/mail/mail-view.c +++ /dev/null @@ -1,256 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: Jeffrey Stedfast <fejj@helixcode.com> - * - * Copyright 2000 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. - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <libgnomeui/gnome-app.h> -#include <libgnomeui/gnome-app-helper.h> -#include <libgnomeui/gnome-stock.h> -#include "mail.h" -#include "mail-ops.h" -#include "camel/camel.h" -#include "mail-display.h" -#include "mail-callbacks.h" - -typedef struct mail_view_data_s { - CamelFolder *source; - gchar *uid; - CamelMimeMessage *msg; - MailDisplay *md; -} mail_view_data; - -#define MINIMUM_WIDTH 600 -#define MINIMUM_HEIGHT 400 - -/* Size of the window last time it was changed. */ -static GtkAllocation last_allocation = { 0, 0 }; - -static void -mail_view_data_free (gpointer mvd) -{ - mail_view_data *data = (mail_view_data *) mvd; - - if (data->uid) - g_free (data->uid); - if (data->msg) - camel_object_unref (CAMEL_OBJECT (data->msg)); - if (data->source) - camel_object_unref (CAMEL_OBJECT (data->source)); - - g_free (data); -} - -static mail_view_data * -mail_view_data_new (CamelFolder *source, const gchar *uid, CamelMimeMessage *msg) -{ - mail_view_data *data; - - data = g_new (mail_view_data, 1); - data->source = source; - camel_object_ref (CAMEL_OBJECT (data->source)); - data->msg = msg; - camel_object_ref (CAMEL_OBJECT (data->msg)); - data->uid = g_strdup (uid); - - return data; -} - -static void -on_close (GtkWidget *menuitem, gpointer user_data) -{ - GtkWidget *view_window; - - view_window = gtk_object_get_data (GTK_OBJECT (menuitem), "view-window"); - g_return_if_fail (view_window); - gtk_widget_destroy (GTK_WIDGET (view_window)); -} - -static void -view_reply_to_sender (GtkWidget *widget, gpointer user_data) -{ - mail_view_data *data = (mail_view_data *) user_data; - - mail_reply (data->source, data->msg, data->uid, FALSE); -} - -static void -view_reply_to_all (GtkWidget *widget, gpointer user_data) -{ - mail_view_data *data = (mail_view_data *) user_data; - - mail_reply (data->source, data->msg, data->uid, TRUE); -} - -static void -view_forward_msg (GtkWidget *widget, gpointer user_data) -{ - mail_view_data *data = (mail_view_data *) user_data; - GPtrArray *uids; - - uids = g_ptr_array_new (); - g_ptr_array_add (uids, g_strdup (data->uid)); - forward_messages (data->source, uids, FORWARD_ATTACHED); -} - -static void -view_print_msg (GtkWidget *widget, gpointer user_data) -{ - mail_view_data *data = (mail_view_data *) user_data; - - mail_print_msg (data->md); -} - -static void -view_delete_msg (GtkWidget *button, gpointer user_data) -{ - mail_view_data *data = (mail_view_data *) user_data; - - camel_folder_set_message_flags(data->source, data->uid, CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN); -} - -static void -view_size_allocate_cb (GtkWidget *widget, - GtkAllocation *allocation) -{ - last_allocation = *allocation; -} - -static GnomeUIInfo mail_view_toolbar [] = { - - /*GNOMEUIINFO_ITEM_STOCK (N_("Save"), N_("Save this message"), - save_msg, GNOME_STOCK_PIXMAP_SAVE),*/ - - GNOMEUIINFO_ITEM_STOCK (N_("Reply"), N_("Reply to the sender of this message"), - view_reply_to_sender, GNOME_STOCK_PIXMAP_MAIL_RPL), - - GNOMEUIINFO_ITEM_STOCK (N_("Reply to All"), N_("Reply to all recipients of this message"), - view_reply_to_all, GNOME_STOCK_PIXMAP_MAIL_RPL), - - GNOMEUIINFO_ITEM_STOCK (N_("Forward"), N_("Forward this message"), view_forward_msg, GNOME_STOCK_PIXMAP_MAIL_FWD), - - GNOMEUIINFO_SEPARATOR, - - GNOMEUIINFO_ITEM_STOCK (N_("Print"), N_("Print the selected message"), view_print_msg, GNOME_STOCK_PIXMAP_PRINT), - - GNOMEUIINFO_ITEM_STOCK (N_("Delete"), N_("Delete this message"), view_delete_msg, GNOME_STOCK_PIXMAP_TRASH), - - /*GNOMEUIINFO_SEPARATOR,*/ - - /*GNOMEUIINFO_ITEM_STOCK (N_("Next"), N_("Next message"), mail_view_next_msg, GNOME_STOCK_PIXMAP_NEXT), - - GNOMEUIINFO_ITEM_STOCK (N_("Previous"), N_("Previous message"), mail_view_prev_msg, GNOME_STOCK_PIXMAP_PREVIOUS),*/ - - GNOMEUIINFO_END -}; - -static GnomeUIInfo file_menu[] = { - /*GNOMEUIINFO_MENU_SAVE_ITEM (save, NULL),*/ - /*GNOMEUIINFO_MENU_SAVE_AS_ITEM (save_as, NULL),*/ - /*GNOMEUIINFO_SEPARATOR,*/ - GNOMEUIINFO_MENU_CLOSE_ITEM (on_close, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_menu[] = -{ - GNOMEUIINFO_END -}; - -static GnomeUIInfo mail_view_menubar[] = -{ - GNOMEUIINFO_MENU_FILE_TREE (file_menu), - GNOMEUIINFO_MENU_VIEW_TREE (view_menu), - GNOMEUIINFO_END -}; - -static void -set_default_size (GtkWidget *widget) -{ - int width, height; - - width = MAX (MINIMUM_WIDTH, last_allocation.width); - height = MAX (MINIMUM_HEIGHT, last_allocation.height); - - gtk_window_set_default_size (GTK_WINDOW (widget), width, height); -} - -GtkWidget * -mail_view_create (CamelFolder *source, const char *uid, CamelMimeMessage *msg) -{ - GtkWidget *window; - GtkWidget *toolbar; - GtkWidget *mail_display; - char *subject; - mail_view_data *data; - - data = mail_view_data_new (source, uid, msg); - - subject = (char *) camel_mime_message_get_subject (msg); - if (!subject) - subject = ""; - - window = gnome_app_new ("Evolution", subject); - - toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH); - - gnome_app_fill_toolbar_with_data (GTK_TOOLBAR (toolbar), - mail_view_toolbar, - NULL, data); - - gnome_app_set_toolbar (GNOME_APP (window), GTK_TOOLBAR (toolbar)); - gnome_app_create_menus (GNOME_APP (window), mail_view_menubar); - - gtk_object_set_data_full (GTK_OBJECT (window), "mvd", data, - mail_view_data_free); - - gtk_widget_ref (mail_view_menubar[0].widget); - gtk_object_set_data_full (GTK_OBJECT (window), "file", - mail_view_menubar[0].widget, - (GtkDestroyNotify) gtk_widget_unref); - - gtk_widget_ref (file_menu[0].widget); - gtk_object_set_data (GTK_OBJECT (file_menu[0].widget), "view-window", window); - gtk_object_set_data_full (GTK_OBJECT (window), "close", - file_menu[0].widget, - (GtkDestroyNotify) gtk_widget_unref); - - gtk_widget_ref (mail_view_menubar[1].widget); - gtk_object_set_data_full (GTK_OBJECT (window), "view", - mail_view_menubar[1].widget, - (GtkDestroyNotify) gtk_widget_unref); - - mail_display = mail_display_new (); - mail_display_set_message (MAIL_DISPLAY (mail_display), CAMEL_MEDIUM (msg)); - data->md = MAIL_DISPLAY (mail_display); - gnome_app_set_contents (GNOME_APP (window), mail_display); - gtk_widget_grab_focus (GTK_WIDGET (MAIL_DISPLAY (mail_display)->html)); - - gtk_signal_connect (GTK_OBJECT (window), "size_allocate", - GTK_SIGNAL_FUNC (view_size_allocate_cb), NULL); - - set_default_size (window); - - return window; -} - diff --git a/mail/message-browser.c b/mail/message-browser.c new file mode 100644 index 0000000000..2286772f50 --- /dev/null +++ b/mail/message-browser.c @@ -0,0 +1,282 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Jeffrey Stedfast <fejj@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 "message-browser.h" + +#include "mail.h" +#include "mail-callbacks.h" +#include "mail-tools.h" +#include "message-list.h" +#include "mail-ops.h" +#include "mail-vfolder.h" +#include "mail-autofilter.h" +#include "mail-mlist-magic.h" +#include "mail-mt.h" + +#include "mail-local.h" +#include "mail-config.h" + +#define d(x) x + +#define MINIMUM_WIDTH 600 +#define MINIMUM_HEIGHT 400 + +#define PARENT_TYPE (gnome_app_get_type ()) + +/* Size of the window last time it was changed. */ +static GtkAllocation last_allocation = { 0, 0 }; + +static GnomeAppClass *message_browser_parent_class; + +static void +message_browser_destroy (GtkObject *object) +{ + MessageBrowser *message_browser; + + message_browser = MESSAGE_BROWSER (object); + + gtk_object_unref (GTK_OBJECT (message_browser->fb)); + + gtk_widget_destroy (GTK_WIDGET (message_browser)); +} + +static void +message_browser_class_init (GtkObjectClass *object_class) +{ + object_class->destroy = message_browser_destroy; + + message_browser_parent_class = gtk_type_class (PARENT_TYPE); +} + +static void +message_browser_init (GtkObject *object) +{ + +} + +static void +message_browser_close (GtkWidget *menuitem, gpointer user_data) +{ + gtk_widget_destroy (GTK_WIDGET (user_data)); +} + +static void +message_browser_reply_to_sender (GtkWidget *widget, gpointer user_data) +{ + MessageBrowser *mb = MESSAGE_BROWSER (user_data); + + reply_to_sender (NULL, mb->fb); +} + +static void +message_browser_reply_to_all (GtkWidget *widget, gpointer user_data) +{ + MessageBrowser *mb = MESSAGE_BROWSER (user_data); + + reply_to_all (NULL, mb->fb); +} + +static void +message_browser_forward_msg (GtkWidget *widget, gpointer user_data) +{ + MessageBrowser *mb = MESSAGE_BROWSER (user_data); + + forward_attached (NULL, mb->fb); +} + +static void +message_browser_print_msg (GtkWidget *widget, gpointer user_data) +{ + MessageBrowser *mb = MESSAGE_BROWSER (user_data); + + mail_print_msg (mb->fb->mail_display); +} + +static void +message_browser_delete_msg (GtkWidget *button, gpointer user_data) +{ + MessageBrowser *mb = MESSAGE_BROWSER (user_data); + + delete_msg (NULL, mb->fb); +} + +static void +message_browser_next_msg (GtkWidget *button, gpointer user_data) +{ + MessageBrowser *mb = MESSAGE_BROWSER (user_data); + + next_msg (NULL, mb->fb); +} + +static void +message_browser_prev_msg (GtkWidget *button, gpointer user_data) +{ + MessageBrowser *mb = MESSAGE_BROWSER (user_data); + + previous_msg (NULL, mb->fb); +} + +static void +message_browser_message_selected (MessageList *ml, const char *uid, MessageBrowser *mb) +{ + CamelMimeMessage *message; + char *subject = NULL; + + g_warning ("got 'message_selected' event"); + + message = mb->fb->mail_display->current_message; + + if (message) + subject = (char *) camel_mime_message_get_subject (message); + + gtk_window_set_title (GTK_WINDOW (mb), subject ? subject : ""); +} + +static void +message_browser_folder_loaded (FolderBrowser *fb, const char *uri, MessageBrowser *mb) +{ + const char *uid = gtk_object_get_data (GTK_OBJECT (mb), "uid"); + + g_warning ("got 'folder_loaded' event"); + + gtk_signal_connect (GTK_OBJECT (fb->message_list), "message_selected", + message_browser_message_selected, mb); + + message_list_select_uid (fb->message_list, uid); +} + +static GnomeUIInfo message_browser_toolbar [] = { + + /*GNOMEUIINFO_ITEM_STOCK (N_("Save"), N_("Save this message"), + save_msg, GNOME_STOCK_PIXMAP_SAVE),*/ + + GNOMEUIINFO_ITEM_STOCK (N_("Reply"), N_("Reply to the sender of this message"), + message_browser_reply_to_sender, GNOME_STOCK_PIXMAP_MAIL_RPL), + + GNOMEUIINFO_ITEM_STOCK (N_("Reply to All"), N_("Reply to all recipients of this message"), + message_browser_reply_to_all, GNOME_STOCK_PIXMAP_MAIL_RPL), + + GNOMEUIINFO_ITEM_STOCK (N_("Forward"), N_("Forward this message"), + message_browser_forward_msg, GNOME_STOCK_PIXMAP_MAIL_FWD), + + GNOMEUIINFO_SEPARATOR, + + GNOMEUIINFO_ITEM_STOCK (N_("Print"), N_("Print the selected message"), + message_browser_print_msg, GNOME_STOCK_PIXMAP_PRINT), + + GNOMEUIINFO_ITEM_STOCK (N_("Delete"), N_("Delete this message"), + message_browser_delete_msg, GNOME_STOCK_PIXMAP_TRASH), + + GNOMEUIINFO_SEPARATOR, + + GNOMEUIINFO_ITEM_STOCK (N_("Previous"), N_("Previous message"), + message_browser_prev_msg, GNOME_STOCK_PIXMAP_BACK), + + GNOMEUIINFO_ITEM_STOCK (N_("Next"), N_("Next message"), + message_browser_next_msg, GNOME_STOCK_PIXMAP_FORWARD), + + GNOMEUIINFO_END +}; + +static GnomeUIInfo file_menu[] = { + /*GNOMEUIINFO_MENU_SAVE_ITEM (save, NULL),*/ + /*GNOMEUIINFO_MENU_SAVE_AS_ITEM (save_as, NULL),*/ + /*GNOMEUIINFO_SEPARATOR,*/ + GNOMEUIINFO_MENU_CLOSE_ITEM (message_browser_close, NULL), + GNOMEUIINFO_END +}; + +static GnomeUIInfo view_menu[] = +{ + GNOMEUIINFO_END +}; + +static GnomeUIInfo message_browser_menubar[] = +{ + GNOMEUIINFO_MENU_FILE_TREE (file_menu), + GNOMEUIINFO_MENU_VIEW_TREE (view_menu), + GNOMEUIINFO_END +}; + +static void +set_default_size (GtkWidget *widget) +{ + int width, height; + + width = MAX (MINIMUM_WIDTH, last_allocation.width); + height = MAX (MINIMUM_HEIGHT, last_allocation.height); + + gtk_window_set_default_size (GTK_WINDOW (widget), width, height); +} + +GtkWidget * +message_browser_new (const GNOME_Evolution_Shell shell, const char *uri, const char *uid) +{ + GtkWidget *toolbar, *vbox; + MessageBrowser *new; + FolderBrowser *fb; + + new = gtk_type_new (message_browser_get_type ()); + + gnome_app_construct (GNOME_APP (new), "Evolution", ""); + + gtk_object_set_data_full (GTK_OBJECT (new), "uid", g_strdup (uid), g_free); + + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH); + gnome_app_fill_toolbar_with_data (GTK_TOOLBAR (toolbar), + message_browser_toolbar, + NULL, new); + + gnome_app_set_toolbar (GNOME_APP (new), GTK_TOOLBAR (toolbar)); + gnome_app_create_menus (GNOME_APP (new), message_browser_menubar); + + fb = FOLDER_BROWSER (folder_browser_new (shell)); + new->fb = fb; + + /* some evil hackery action... */ + vbox = gtk_vbox_new (TRUE, 0); + gtk_widget_ref (GTK_WIDGET (fb->mail_display)); + gtk_widget_reparent (GTK_WIDGET (fb->mail_display), vbox); + gtk_widget_show (GTK_WIDGET (fb->mail_display)); + gtk_widget_show (vbox); + + gnome_app_set_contents (GNOME_APP (new), vbox); + gtk_widget_grab_focus (GTK_WIDGET (MAIL_DISPLAY (fb->mail_display)->html)); + + set_default_size (GTK_WIDGET (new)); + + /* more evil hackery... */ + gtk_signal_connect (GTK_OBJECT (fb), "folder_loaded", + message_browser_folder_loaded, new); + + folder_browser_set_uri (fb, uri); + + return GTK_WIDGET (new); +} + + +E_MAKE_TYPE (message_browser, "MessageBrowser", MessageBrowser, message_browser_class_init, + message_browser_init, PARENT_TYPE); diff --git a/mail/message-browser.h b/mail/message-browser.h new file mode 100644 index 0000000000..365a2cd6da --- /dev/null +++ b/mail/message-browser.h @@ -0,0 +1,60 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Jeffrey Stedfast <fejj@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. + * + */ + +#ifndef _MESSAGE_BROWSER_H_ +#define _MESSAGE_BROWSER_H_ + +#include <gnome.h> +#include <camel/camel-folder.h> +#include "folder-browser.h" +#include "mail-display.h" +#include "mail-types.h" + +#define MESSAGE_BROWSER_TYPE (message_browser_get_type ()) +#define MESSAGE_BROWSER(o) (GTK_CHECK_CAST ((o), MESSAGE_BROWSER_TYPE, MessageBrowser)) +#define MESSAGE_BROWSER_CLASS(k) (GTK_CHECK_CLASS_CAST((k), MESSAGE_BROWSER_TYPE, MessageBrowserClass)) +#define IS_MESSAGE_BROWSER(o) (GTK_CHECK_TYPE ((o), MESSAGE_BROWSER_TYPE)) +#define IS_MESSAGE_BROWSER_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MESSAGE_BROWSER_TYPE)) + + +struct _MessageBrowser { + GnomeApp parent; + + /* + * The current URI being displayed by the MessageBrowser + */ + FolderBrowser *fb; +}; + + +typedef struct { + GnomeAppClass parent_class; + +} MessageBrowserClass; + +GtkType message_browser_get_type (void); + +GtkWidget *message_browser_new (const GNOME_Evolution_Shell shell, + const char *uri, const char *uid); + +#endif /* _MESSAGE_BROWSER_H_ */ + diff --git a/mail/message-list.c b/mail/message-list.c index dc4eff7ef0..35f413e674 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -420,6 +420,34 @@ message_list_select (MessageList *message_list, int base_row, gtk_signal_emit(GTK_OBJECT (message_list), message_list_signals [MESSAGE_SELECTED], NULL); } + +/** + * message_list_select_uid: + * @message_list: + * @uid: + * + * Selects the message with the given UID. + **/ +void +message_list_select_uid (MessageList *message_list, const char *uid) +{ + ETreePath node; + + node = g_hash_table_lookup (message_list->uid_nodemap, uid); + if (node) { + CamelMessageInfo *info; + + info = get_message_info (message_list, node); + e_tree_set_cursor (message_list->tree, node); + gtk_signal_emit (GTK_OBJECT (message_list), message_list_signals[MESSAGE_SELECTED], + camel_message_info_uid (info)); + } else { + g_free (message_list->cursor_uid); + message_list->cursor_uid = NULL; + gtk_signal_emit (GTK_OBJECT (message_list), message_list_signals [MESSAGE_SELECTED], uid); + } +} + static void add_uid (MessageList *ml, const char *uid, gpointer data) { diff --git a/mail/message-list.h b/mail/message-list.h index da959de1bf..a856396ecf 100644 --- a/mail/message-list.h +++ b/mail/message-list.h @@ -112,6 +112,9 @@ void message_list_select (MessageList *message_list, MessageListSelectDirection direction, guint32 flags, guint32 mask); +void message_list_select_uid (MessageList *message_list, + const char *uid); + /* info */ unsigned int message_list_length(MessageList *ml); |