evolution r35251 - in branches/mbarnes-composer: composer mail



Author: mbarnes
Date: Wed Mar 26 03:25:21 2008
New Revision: 35251
URL: http://svn.gnome.org/viewvc/evolution?rev=35251&view=rev

Log:
First successfully sent message using the new HTML editor.
Fix some signature and header widget bugs.


Modified:
   branches/mbarnes-composer/composer/e-composer-actions.c
   branches/mbarnes-composer/composer/e-composer-autosave.c
   branches/mbarnes-composer/composer/e-composer-autosave.h
   branches/mbarnes-composer/composer/e-composer-header-table.c
   branches/mbarnes-composer/composer/e-msg-composer.c
   branches/mbarnes-composer/composer/e-msg-composer.h
   branches/mbarnes-composer/composer/evolution-composer.ui
   branches/mbarnes-composer/mail/em-composer-utils.c

Modified: branches/mbarnes-composer/composer/e-composer-actions.c
==============================================================================
--- branches/mbarnes-composer/composer/e-composer-actions.c	(original)
+++ branches/mbarnes-composer/composer/e-composer-actions.c	Wed Mar 26 03:25:21 2008
@@ -84,7 +84,7 @@
 	gint response;
 
 	if (!e_msg_composer_is_dirty (composer) &&
-		!e_msg_composer_is_autosaved (composer)) {
+		!e_composer_autosave_get_saved (composer)) {
 
 		gtk_widget_destroy (GTK_WIDGET (composer));
 		return;
@@ -457,7 +457,7 @@
 	  NULL,
 	  N_("Toggles whether the Subject field is displayed"),
 	  G_CALLBACK (action_view_subject_cb),
-	  TRUE },
+	  FALSE },
 
 	{ "view-to",
 	  NULL,

Modified: branches/mbarnes-composer/composer/e-composer-autosave.c
==============================================================================
--- branches/mbarnes-composer/composer/e-composer-autosave.c	(original)
+++ branches/mbarnes-composer/composer/e-composer-autosave.c	Wed Mar 26 03:25:21 2008
@@ -9,13 +9,14 @@
 #include <camel/camel-stream-fs.h>
 
 #define AUTOSAVE_SEED		".evolution-composer.autosave-XXXXXX"
-#define AUTOSAVE_INTERVAL	60000
+#define AUTOSAVE_INTERVAL	60000  /* 60 seconds */
 
 typedef struct _AutosaveState AutosaveState;
 
 struct _AutosaveState {
 	gchar *filename;
 	gboolean enabled;
+	gboolean saved;
 	gint fd;
 };
 
@@ -296,7 +297,7 @@
 	/* Snapshot was successful; set various flags. */
 	e_msg_composer_set_saved (composer);
 	e_msg_composer_unset_changed (composer);
-	e_msg_composer_set_autosaved (composer);
+	e_composer_autosave_set_saved (composer, TRUE);
 
 	camel_object_unref (message);
 	camel_object_unref (stream);
@@ -364,3 +365,30 @@
 
 	state->enabled = enabled;
 }
+
+gboolean
+e_composer_autosave_get_saved (EMsgComposer *composer)
+{
+	AutosaveState *state;
+
+	g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), FALSE);
+
+	state = g_object_get_data (G_OBJECT (composer), "autosave");
+	g_return_val_if_fail (state != NULL, FALSE);
+
+	return state->saved;
+}
+
+void
+e_composer_autosave_set_saved (EMsgComposer *composer,
+                               gboolean saved)
+{
+	AutosaveState *state;
+
+	g_return_if_fail (E_IS_MSG_COMPOSER (composer));
+
+	state = g_object_get_data (G_OBJECT (composer), "autosave");
+	g_return_if_fail (state != NULL);
+
+	state->saved = saved;
+}

Modified: branches/mbarnes-composer/composer/e-composer-autosave.h
==============================================================================
--- branches/mbarnes-composer/composer/e-composer-autosave.h	(original)
+++ branches/mbarnes-composer/composer/e-composer-autosave.h	Wed Mar 26 03:25:21 2008
@@ -15,6 +15,9 @@
 gboolean	e_composer_autosave_get_enabled  (EMsgComposer *composer);
 void		e_composer_autosave_set_enabled	 (EMsgComposer *composer,
 						  gboolean enabled);
+gboolean	e_composer_autosave_get_saved	 (EMsgComposer *composer);
+void		e_composer_autosave_set_saved	 (EMsgComposer *composer,
+						  gboolean saved);
 
 G_END_DECLS
 

Modified: branches/mbarnes-composer/composer/e-composer-header-table.c
==============================================================================
--- branches/mbarnes-composer/composer/e-composer-header-table.c	(original)
+++ branches/mbarnes-composer/composer/e-composer-header-table.c	Wed Mar 26 03:25:21 2008
@@ -670,7 +670,6 @@
 		GTK_LABEL (widget), table->priv->signature_combo_box);
 	table->priv->signature_label = g_object_ref_sink (widget);
 	gtk_widget_show (widget);
-
 }
 
 GType

Modified: branches/mbarnes-composer/composer/e-msg-composer.c
==============================================================================
--- branches/mbarnes-composer/composer/e-msg-composer.c	(original)
+++ branches/mbarnes-composer/composer/e-msg-composer.c	Wed Mar 26 03:25:21 2008
@@ -2524,16 +2524,11 @@
 	editor_class->paste_clipboard = msg_composer_paste_clipboard;
 	editor_class->select_all = msg_composer_select_all;
 
-	/* These callbacks are in the mail component. */
-	class->send = em_utils_composer_send_cb;
-	class->save_draft = em_utils_composer_save_draft_cb;
-
 	signals[SEND] = g_signal_new (
 		"send",
 		E_TYPE_MSG_COMPOSER,
 		G_SIGNAL_RUN_LAST,
-		G_STRUCT_OFFSET (EMsgComposerClass, send),
-		NULL, NULL,
+		0, NULL, NULL,
 		g_cclosure_marshal_VOID__VOID,
 		G_TYPE_NONE, 0);
 
@@ -2541,8 +2536,7 @@
 		"save-draft",
 		E_TYPE_MSG_COMPOSER,
 		G_SIGNAL_RUN_LAST,
-		G_STRUCT_OFFSET (EMsgComposerClass, save_draft),
-		NULL, NULL,
+		0, NULL, NULL,
 		g_cclosure_marshal_VOID__BOOLEAN,
 		G_TYPE_NONE, 1,
 		G_TYPE_BOOLEAN);
@@ -2977,7 +2971,9 @@
 	const gchar *subject;
 	gint button;
 
-	if (!e_msg_composer_is_dirty (composer) && !e_msg_composer_is_autosaved (composer)) {
+	if (!e_msg_composer_is_dirty (composer) &&
+		!e_composer_autosave_get_saved (composer)) {
+
 		gtk_widget_destroy (GTK_WIDGET (composer));
 		return;
 	}
@@ -3065,9 +3061,6 @@
 	g_signal_connect_swapped (
 		table, "notify::subject",
 		G_CALLBACK (e_msg_composer_set_changed), composer);
-	g_signal_connect_swapped (
-		table, "notify::signature",
-		G_CALLBACK (e_msg_composer_show_sig_file), composer);
 
 	account_changed_cb (composer);
 
@@ -3555,7 +3548,7 @@
 	editor = GTKHTML_EDITOR (composer);
 	table = e_msg_composer_get_header_table (composer);
 
-	if (!gtkhtml_editor_search_by_data (editor, 1, "ClueFlow", "signature"))
+	if (!gtkhtml_editor_search_by_data (editor, 1, "ClueFlow", "signature", "1"))
 		return;
 
 	data = gtkhtml_editor_get_paragraph_data (editor, "signature_name");
@@ -3951,7 +3944,7 @@
 
 	/* XXX This should be elsewhere. */
 	e_msg_composer_unset_changed (composer);
-	e_msg_composer_unset_autosaved (composer);
+	e_composer_autosave_set_saved (composer, FALSE);
 }
 
 static GList *
@@ -4600,79 +4593,64 @@
 	return msg;
 }
 
-
-static void
-delete_old_signature (EMsgComposer *composer)
+/**
+ * e_msg_composer_show_sig:
+ * @composer: A message composer widget
+ *
+ * Set a signature
+ **/
+void
+e_msg_composer_show_sig_file (EMsgComposer *composer)
 {
 	GtkhtmlEditor *editor;
+	GtkHTML *html;
+	gchar *html_text;
 
 	g_return_if_fail (E_IS_MSG_COMPOSER (composer));
 
 	editor = GTKHTML_EDITOR (composer);
+	html = gtkhtml_editor_get_html (editor);
+
+	if (composer->priv->redirect)
+		return;
+
+	composer->priv->in_signature_insert = TRUE;
 
+	gtkhtml_editor_freeze (editor);
+	gtkhtml_editor_run_command (editor, "cursor-position-save");
+	gtkhtml_editor_undo_begin (editor, "Set signature", "Reset signature");
+
+	/* Delete the old signature. */
 	gtkhtml_editor_run_command (editor, "block-selection");
 	gtkhtml_editor_run_command (editor, "cursor-bod");
-
-	if (gtkhtml_editor_search_by_data (editor, 1, "ClueFlow", "signature")) {
+	if (gtkhtml_editor_search_by_data (editor, 1, "ClueFlow", "signature", "1")) {
 		gtkhtml_editor_run_command (editor, "select-paragraph");
 		gtkhtml_editor_run_command (editor, "delete");
 		gtkhtml_editor_set_paragraph_data (editor, "signature", "0");
 		gtkhtml_editor_run_command (editor, "delete-back");
 	}
-
 	gtkhtml_editor_run_command (editor, "unblock-selection");
-}
-
-/**
- * e_msg_composer_show_sig:
- * @composer: A message composer widget
- *
- * Set a signature
- **/
-void
-e_msg_composer_show_sig_file (EMsgComposer *composer)
-{
-#if 0 /* GTKHTML-EDITOR */
-	CORBA_Environment ev;
-	gchar *html;
-	EMsgComposerPrivate *p = composer->priv;
-	g_return_if_fail (E_IS_MSG_COMPOSER (composer));
 
-	/* printf ("e_msg_composer_show_sig_file\n"); */
-	/* printf ("set sig '%s' '%s'\n", sig_file, p->sig_file); */
-	if (!p->redirect) {
-		p->in_signature_insert = TRUE;
-		CORBA_exception_init (&ev);
-		GNOME_GtkHTML_Editor_Engine_freeze (p->eeditor_engine, &ev);
-		GNOME_GtkHTML_Editor_Engine_runCommand (p->eeditor_engine, "cursor-position-save", &ev);
-		GNOME_GtkHTML_Editor_Engine_undoBegin (p->eeditor_engine, "Set signature", "Reset signature", &ev);
-
-		delete_old_signature (composer);
-		html = get_signature_html (composer);
-		if (html) {
-			GNOME_GtkHTML_Editor_Engine_runCommand (p->eeditor_engine, "insert-paragraph", &ev);
-			if (!GNOME_GtkHTML_Editor_Engine_runCommand (p->eeditor_engine, "cursor-backward", &ev))
-				GNOME_GtkHTML_Editor_Engine_runCommand (p->eeditor_engine, "insert-paragraph", &ev);
-			else
-				GNOME_GtkHTML_Editor_Engine_runCommand (p->eeditor_engine, "cursor-forward", &ev);
-		/* printf ("insert %s\n", html); */
-			GNOME_GtkHTML_Editor_Engine_setParagraphData (p->eeditor_engine, "orig", "0", &ev);
-			GNOME_GtkHTML_Editor_Engine_runCommand (p->eeditor_engine, "indent-zero", &ev);
-			GNOME_GtkHTML_Editor_Engine_runCommand (p->eeditor_engine, "style-normal", &ev);
-			GNOME_GtkHTML_Editor_Engine_insertHTML (p->eeditor_engine, html, &ev);
-			g_free (html);
-		}
-
-		GNOME_GtkHTML_Editor_Engine_undoEnd (p->eeditor_engine, &ev);
-		GNOME_GtkHTML_Editor_Engine_runCommand (p->eeditor_engine, "cursor-position-restore", &ev);
-		GNOME_GtkHTML_Editor_Engine_thaw (p->eeditor_engine, &ev);
-		CORBA_exception_free (&ev);
-		p->in_signature_insert = FALSE;
+	html_text = get_signature_html (composer);
+	if (html_text) {
+		gtkhtml_editor_run_command (editor, "insert-paragraph");
+		if (!gtkhtml_editor_run_command (editor, "cursor-backward"))
+			gtkhtml_editor_run_command (editor, "insert-paragraph");
+		else
+			gtkhtml_editor_run_command (editor, "cursor-forward");
+		gtkhtml_editor_set_paragraph_data (editor, "orig", "0");
+		gtkhtml_editor_run_command (editor, "indent-zero");
+		gtkhtml_editor_run_command (editor, "style-normal");
+		gtkhtml_editor_insert_html (editor, html_text);
+		g_free (html_text);
 	}
-	/* printf ("e_msg_composer_show_sig_file end\n"); */
-#endif /* GTKHTML-EDITOR */
-}
 
+	gtkhtml_editor_undo_end (editor);
+	gtkhtml_editor_run_command (editor, "cursor-position-restore");
+	gtkhtml_editor_thaw (editor);
+
+	composer->priv->in_signature_insert = FALSE;
+}
 
 /**
  * e_msg_composer_get_request_receipt
@@ -4880,43 +4858,27 @@
 }
 
 /**
- * e_msg_composer_set_autosaved:
- * @composer: An EMsgComposer object.
- *
- * Mark the composer as autosaved, so before the composer gets destroyed
- * the user will be prompted about unsaved changes.
- **/
-void
-e_msg_composer_set_autosaved (EMsgComposer *composer)
-{
-	e_composer_autosave_set_saved (composer, TRUE);
-}
-
-
-/**
- * e_msg_composer_unset_autosaved:
- * @composer: An EMsgComposer object.
- *
- * Mark the composer as unautosaved, so no prompt about unsaved changes
- * will appear before destroying the composer.
- **/
-void
-e_msg_composer_unset_autosaved (EMsgComposer *composer)
-{
-	e_composer_autosave_set_saved (composer, FALSE);
-}
-
-/**
  * e_msg_composer_get_raw_message_text:
  *
  * Returns the text/plain of the message from composer
  **/
-const gchar *
+GByteArray *
 e_msg_composer_get_raw_message_text (EMsgComposer *composer)
 {
+	GtkhtmlEditor *editor;
+	GByteArray *array;
+	gchar *text;
+	gsize length;
+
 	g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), NULL);
 
-	return gtkhtml_editor_get_text_plain (GTKHTML_EDITOR (composer), NULL);
+	array = g_byte_array_new ();
+	editor = GTKHTML_EDITOR (composer);
+	text = gtkhtml_editor_get_text_plain (editor, &length);
+	g_byte_array_append (array, (guint8 *) text, (guint) length);
+	g_free (text);
+
+	return array;
 }
 
 EAttachmentBar*
@@ -4927,12 +4889,6 @@
        return (EAttachmentBar*) p->attachment_bar;
 }
 
-gboolean
-e_msg_composer_is_autosaved (EMsgComposer *composer)
-{
-	return e_composer_autosave_get_saved (composer);
-}
-
 void
 e_msg_composer_set_enable_autosave  (EMsgComposer *composer, gboolean enabled)
 {

Modified: branches/mbarnes-composer/composer/e-msg-composer.h
==============================================================================
--- branches/mbarnes-composer/composer/e-msg-composer.h	(original)
+++ branches/mbarnes-composer/composer/e-msg-composer.h	Wed Mar 26 03:25:21 2008
@@ -64,10 +64,6 @@
 
 struct _EMsgComposerClass {
 	GtkhtmlEditorClass parent_class;
-
-	void		(*send)			(EMsgComposer *composer);
-	void		(*save_draft)		(EMsgComposer *composer,
-						 gboolean quit);
 };
 
 struct _EAttachmentBar;
@@ -138,9 +134,6 @@
 void                     e_msg_composer_set_changed                      (EMsgComposer      *composer);
 void                     e_msg_composer_unset_changed                    (EMsgComposer      *composer);
 gboolean                 e_msg_composer_is_dirty                         (EMsgComposer      *composer);
-void                     e_msg_composer_set_autosaved                    (EMsgComposer      *composer);
-void                     e_msg_composer_unset_autosaved                  (EMsgComposer      *composer);
-gboolean                 e_msg_composer_is_autosaved                     (EMsgComposer      *composer);
 void                     e_msg_composer_set_enable_autosave              (EMsgComposer      *composer,
 									  gboolean           enabled);
 
@@ -171,7 +164,7 @@
 void			 e_msg_composer_set_saved			 (EMsgComposer *composer);
 void			 e_msg_composer_set_send_options		 (EMsgComposer *composer,
 									  gboolean      send_enable);
-const gchar *            e_msg_composer_get_raw_message_text              (EMsgComposer *composer);
+GByteArray *		e_msg_composer_get_raw_message_text              (EMsgComposer *composer);
 
 struct _EAttachmentBar*          e_msg_composer_get_attachment_bar                (EMsgComposer *composer);
 

Modified: branches/mbarnes-composer/composer/evolution-composer.ui
==============================================================================
--- branches/mbarnes-composer/composer/evolution-composer.ui	(original)
+++ branches/mbarnes-composer/composer/evolution-composer.ui	Wed Mar 26 03:25:21 2008
@@ -22,6 +22,7 @@
         <menuitem action='view-reply-to'/>
         <menuitem action='view-cc'/>
         <menuitem action='view-bcc'/>
+        <menuitem action='view-subject'/>
       </menu>
     </placeholder>
     <menu action='security-menu'>

Modified: branches/mbarnes-composer/mail/em-composer-utils.c
==============================================================================
--- branches/mbarnes-composer/mail/em-composer-utils.c	(original)
+++ branches/mbarnes-composer/mail/em-composer-utils.c	Wed Mar 26 03:25:21 2008
@@ -621,6 +621,9 @@
 		emcs->drafts_uid = g_strdup (drafts_uid);
 	}
 
+	g_signal_connect (composer, "send", G_CALLBACK (em_utils_composer_send_cb), emcs);
+	g_signal_connect (composer, "save-draft", G_CALLBACK (em_utils_composer_save_draft_cb), emcs);
+
 	g_object_weak_ref ((GObject *) composer, (GWeakNotify) composer_destroy_cb, emcs);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]