aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--composer/ChangeLog15
-rw-r--r--composer/Makefile.am2
-rw-r--r--composer/e-msg-composer.c108
-rw-r--r--composer/e-msg-composer.h3
-rw-r--r--mail/ChangeLog6
-rw-r--r--mail/component-factory.c10
-rw-r--r--mail/main.c9
7 files changed, 108 insertions, 45 deletions
diff --git a/composer/ChangeLog b/composer/ChangeLog
index b9f8904f78..ec42f9287a 100644
--- a/composer/ChangeLog
+++ b/composer/ChangeLog
@@ -1,3 +1,18 @@
+2002-05-16 Ettore Perazzoli <ettore@ximian.com>
+
+ * e-msg-composer.c: New local `all_composers'; keeps a list of all
+ the composer windows created. Changed type of `parent_class' to
+ BonoboWindowClass *.
+ (do_exit): Cleaned up a bit. Raise the composer window before
+ showing the message box dialog.
+ (exit_dialog_cb): Removed.
+ (e_msg_composer_request_close_all): New.
+ (create_composer): Add the composer to the all_composers list and
+ weakref it.
+ (msg_composer_destroy_notify): GtkDestroyNotify function for the
+ composer's weakref; remove the composer from the all_composers
+ list.
+
2002-05-15 Jeffrey Stedfast <fejj@ximian.com>
* e-msg-composer-attachment.c (e_msg_composer_attachment_new):
diff --git a/composer/Makefile.am b/composer/Makefile.am
index 505c0c130e..0b9f4a2f7b 100644
--- a/composer/Makefile.am
+++ b/composer/Makefile.am
@@ -22,7 +22,7 @@ $(IDL_GENERATED): $(IDLS) $(selectnamesdir)/Evolution-Addressbook-SelectNames.id
$(ORBIT_IDL) -I $(srcdir) -I $(datadir)/idl `$(GNOME_CONFIG) --cflags idl` \
-I $(selectnamesdir) $(srcdir)/Composer.idl
-Editor-commmon.c: $(GTKHTML_DATADIR)/Editor.idl
+Editor-commmon.c: $(GTKHTML_DATADIR)/Editor.idl
$(HTML_EDITOR_GENERATED): $(GTKHTML_DATADIR)/Editor.idl
$(ORBIT_IDL) -I $(srcdir) `$(GNOME_CONFIG) --cflags idl` -I $(GTKHTML_DATADIR)/gtkhtml $(GTKHTML_DATADIR)/Editor.idl
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index bf93b80762..368797a2ad 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -50,8 +50,10 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <unistd.h>
+
#include <gal/unicode/gunicode.h>
#include <gal/util/e-unicode-i18n.h>
+
#include <libgnome/gnome-defs.h>
#include <libgnome/gnome-exec.h>
#include <libgnomeui/gnome-app.h>
@@ -60,23 +62,25 @@
#include <libgnomeui/gnome-dialog-util.h>
#include <libgnomeui/gnome-stock.h>
#include <libgnomeui/gnome-window-icon.h>
+
#include <bonobo/bonobo-exception.h>
#include <bonobo/bonobo-moniker-util.h>
#include <bonobo/bonobo-object-client.h>
#include <bonobo/bonobo-stream-memory.h>
#include <bonobo/bonobo-ui-util.h>
#include <bonobo/bonobo-widget.h>
+
#include <libgnomevfs/gnome-vfs.h>
#include <glade/glade.h>
+
#include <gal/widgets/e-gui-utils.h>
#include <gal/widgets/e-scroll-frame.h>
#include <gal/e-text/e-entry.h>
+
#include <gtkhtml/gtkhtml.h>
#include <gtkhtml/htmlselection.h>
-/*#include <addressbook/backend/ebook/e-card.h>*/
-
#include "widgets/misc/e-charset-picker.h"
#include "camel/camel.h"
@@ -133,8 +137,14 @@ static GtkTargetEntry drop_types[] = {
static int num_drop_types = sizeof (drop_types) / sizeof (drop_types[0]);
-static GnomeAppClass *parent_class = NULL;
+
+/* The parent class. */
+static BonoboWindowClass *parent_class = NULL;
+
+/* All the composer windows open, for bookkeeping purposes. */
+static GSList *all_composers = NULL;
+
/* local prototypes */
static GList *add_recipients (GList *list, const char *recips, gboolean decode);
@@ -1306,46 +1316,43 @@ menu_file_save_draft_cb (BonoboUIComponent *uic, void *data, const char *path)
/* Exit dialog. (Displays a "Save composition to 'Drafts' before exiting?" warning before actually exiting.) */
-enum { REPLY_YES = 0, REPLY_NO, REPLY_CANCEL };
-
-static void
-exit_dialog_cb (int reply, EMsgComposer *composer)
-{
- switch (reply) {
- case REPLY_YES:
- gtk_signal_emit (GTK_OBJECT (composer), signals[SAVE_DRAFT], TRUE);
- e_msg_composer_unset_changed (composer);
- break;
- case REPLY_NO:
- gtk_widget_destroy (GTK_WIDGET (composer));
- break;
- case REPLY_CANCEL:
- default:
- }
-}
-
static void
do_exit (EMsgComposer *composer)
{
GtkWidget *dialog;
gint button;
- if (e_msg_composer_is_dirty (composer)) {
- dialog = gnome_message_box_new (_("This message has not been sent.\n\nDo you wish to save your changes?"),
- GNOME_MESSAGE_BOX_QUESTION,
- GNOME_STOCK_BUTTON_YES, /* Save */
- GNOME_STOCK_BUTTON_NO, /* Don't save */
- GNOME_STOCK_BUTTON_CANCEL, /* Cancel */
- NULL);
-
- gtk_window_set_title (GTK_WINDOW (dialog), _("Warning: Modified Message"));
- gnome_dialog_set_parent (GNOME_DIALOG (dialog), GTK_WINDOW (composer));
- gnome_dialog_set_default (GNOME_DIALOG (dialog), 0);
- button = gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
+ if (! e_msg_composer_is_dirty (composer)) {
+ gtk_widget_destroy (GTK_WIDGET (composer));
+ return;
+ }
+
+ gdk_window_raise (GTK_WIDGET (composer)->window);
+
+ dialog = gnome_message_box_new (_("This message has not been sent.\n\nDo you wish to save your changes?"),
+ GNOME_MESSAGE_BOX_QUESTION,
+ GNOME_STOCK_BUTTON_YES, /* Save */
+ GNOME_STOCK_BUTTON_NO, /* Don't save */
+ GNOME_STOCK_BUTTON_CANCEL, /* Cancel */
+ NULL);
+
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Warning: Modified Message"));
+ gnome_dialog_set_parent (GNOME_DIALOG (dialog), GTK_WINDOW (composer));
+ gnome_dialog_set_default (GNOME_DIALOG (dialog), 0);
+ button = gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
- exit_dialog_cb (button, composer);
- } else {
+ switch (button) {
+ case 0: /* Save */
+ gtk_signal_emit (GTK_OBJECT (composer), signals[SAVE_DRAFT], TRUE);
+ e_msg_composer_unset_changed (composer);
+ break;
+ case 1: /* Don't save */
gtk_widget_destroy (GTK_WIDGET (composer));
+ break;
+ case 2: /* Cancel */
+ break;
+ default:
+ g_assert_not_reached ();
}
}
@@ -2628,6 +2635,14 @@ map_default_cb (EMsgComposer *composer, gpointer user_data)
CORBA_exception_free (&ev);
}
+static void
+msg_composer_destroy_notify (void *data)
+{
+ EMsgComposer *composer = E_MSG_COMPOSER (data);
+
+ all_composers = g_slist_remove (all_composers, composer);
+}
+
static EMsgComposer *
create_composer (void)
{
@@ -2640,6 +2655,12 @@ create_composer (void)
composer = gtk_type_new (E_TYPE_MSG_COMPOSER);
+ all_composers = g_slist_prepend (all_composers, composer);
+
+ gtk_object_weakref (GTK_OBJECT (composer),
+ msg_composer_destroy_notify,
+ composer);
+
gtk_window_set_default_size (GTK_WINDOW (composer),
DEFAULT_WIDTH, DEFAULT_HEIGHT);
gnome_window_icon_set_from_file (GTK_WINDOW (composer), EVOLUTION_DATADIR
@@ -4321,3 +4342,20 @@ e_msg_composer_drop_editor_undo (EMsgComposer *composer)
GNOME_GtkHTML_Editor_Engine_dropUndo (composer->editor_engine, &ev);
CORBA_exception_free (&ev);
}
+
+
+gboolean
+e_msg_composer_request_close_all (void)
+{
+ GSList *p, *pnext;
+
+ for (p = all_composers; p != NULL; p = pnext) {
+ pnext = p->next;
+ do_exit (E_MSG_COMPOSER (p->data));
+ }
+
+ if (all_composers == NULL)
+ return TRUE;
+ else
+ return FALSE;
+}
diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h
index 921dfc2ee1..b92713bb93 100644
--- a/composer/e-msg-composer.h
+++ b/composer/e-msg-composer.h
@@ -194,6 +194,9 @@ void e_msg_composer_add_message_attachments (EMsgCo
void e_msg_composer_ignore (EMsgComposer *composer,
const gchar *str);
void e_msg_composer_drop_editor_undo (EMsgComposer *composer);
+
+gboolean e_msg_composer_request_close_all (void);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 2f682983a9..1a04992f4f 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,9 @@
+2002-05-16 Ettore Perazzoli <ettore@ximian.com>
+
+ * component-factory.c (request_quit): New.
+ (create_component): Pass it as the @request_quit_fn to
+ evolution_shell_component_new().
+
2002-05-15 Ettore Perazzoli <ettore@ximian.com>
* component-factory.c (create_component): Pass NULL as
diff --git a/mail/component-factory.c b/mail/component-factory.c
index 439e11ccf5..8f6a8b9565 100644
--- a/mail/component-factory.c
+++ b/mail/component-factory.c
@@ -936,6 +936,13 @@ send_receive_cb (EvolutionShellComponent *shell_component,
mail_send_receive ();
}
+static gboolean
+request_quit (EvolutionShellComponent *shell_component,
+ void *closure)
+{
+ return e_msg_composer_request_close_all ();
+}
+
static BonoboObject *
create_component (void)
{
@@ -952,7 +959,8 @@ create_component (void)
xfer_folder,
populate_folder_context_menu,
get_dnd_selection,
- NULL, NULL);
+ request_quit,
+ NULL);
gtk_signal_connect (GTK_OBJECT (shell_component), "send_receive",
GTK_SIGNAL_FUNC (send_receive_cb), NULL);
diff --git a/mail/main.c b/mail/main.c
index d6c2e7ffcb..5abc160999 100644
--- a/mail/main.c
+++ b/mail/main.c
@@ -88,15 +88,8 @@ main (int argc, char *argv [])
CORBA_ORB orb;
struct sigaction sa, osa;
-#ifdef DO_MCHECK
- /* used to make elfence work */
-#if 0
free (malloc (10));
-#else
- /*mtrace();*/
- mcheck(blowup);
-#endif
-#endif
+
bindtextdomain (PACKAGE, EVOLUTION_LOCALEDIR);
textdomain (PACKAGE);