[evolution-exchange] Bug #597123 - Composer's Send Options doesn't work



commit 0824fc932170d8b1172addcf6d0ac429cd2675b4
Author: Milan Crha <mcrha redhat com>
Date:   Tue Oct 13 18:52:48 2009 +0200

    Bug #597123 - Composer's Send Options doesn't work

 eplugin/exchange-mail-send-options.c            |   82 ++++++++++++++++++-----
 eplugin/org-gnome-exchange-operations.eplug.xml |   14 +++-
 2 files changed, 78 insertions(+), 18 deletions(-)
---
diff --git a/eplugin/exchange-mail-send-options.c b/eplugin/exchange-mail-send-options.c
index 04065e4..8c8d1c3 100644
--- a/eplugin/exchange-mail-send-options.c
+++ b/eplugin/exchange-mail-send-options.c
@@ -31,11 +31,12 @@
 #include "mail/em-event.h"
 
 #include "composer/e-msg-composer.h"
+#include "composer/e-composer-from-header.h"
 #include "libedataserver/e-account.h"
 
 #include "exchange-send-options.h"
 
-void org_gnome_exchange_send_options (EPlugin *ep, EMEventTargetComposer *t);
+gboolean eex_ui_composer_actions (GtkUIManager *manager, EMsgComposer *composer);
 
 static ExchangeSendOptionsDialog *dialog=NULL;
 
@@ -164,33 +165,82 @@ send_options_commit (EMsgComposer *comp, gpointer user_data)
 	}
 }
 
-void
-org_gnome_exchange_send_options (EPlugin *ep, EMEventTargetComposer *target)
+static gboolean
+account_is_exchange (EAccount *account)
 {
-	EMsgComposer *composer = target->composer;
-	EComposerHeaderTable *table;
-	EAccount *account = NULL;
-	gchar *temp = NULL;
+	const gchar *url;
 
-	table = e_msg_composer_get_header_table (composer);
-	account = e_composer_header_table_get_account (table);
 	if (!account)
-		return;
+		return FALSE;
+
+	url = e_account_get_string (account, E_ACCOUNT_TRANSPORT_URL);
+	return url && g_str_has_prefix (url, "exchange://");
+}
+
+static void
+from_changed_cb (EComposerFromHeader *header, EMsgComposer *composer)
+{
+	GtkActionGroup *group;
+	GtkAction *action;
+
+	g_return_if_fail (header != NULL);
+	g_return_if_fail (composer != NULL);
+
+	group = gtkhtml_editor_get_action_group (GTKHTML_EDITOR (composer), "composer");
+	g_return_if_fail (group != NULL);
+
+	action = gtk_action_group_get_action (group, "eex-send-options");
+	g_return_if_fail (action != NULL);
+
+	gtk_action_set_visible (action, account_is_exchange (e_composer_from_header_get_active (header)));
+}
+
+static void
+action_send_options_cb (GtkAction *action, EMsgComposer *composer)
+{
+	g_return_if_fail (action != NULL);
+	g_return_if_fail (composer != NULL);
 
-	temp = strstr (account->transport->url, "exchange");
-	if (!temp) {
-		return;
-	}
-	e_msg_composer_set_send_options (composer, TRUE);
 	/*disply the send options dialog*/
 	if (!dialog) {
-		g_print ("New dialog\n\n");
 		dialog = exchange_sendoptions_dialog_new ();
 	}
+
 	exchange_sendoptions_dialog_run (dialog, GTK_WIDGET (composer));
 	g_signal_connect (dialog, "sod_response", G_CALLBACK (append_to_header), GTK_WIDGET (composer));
 
 	g_signal_connect (GTK_WIDGET (composer), "destroy",
 				  G_CALLBACK (send_options_commit), dialog);
+}
+
+gboolean
+eex_ui_composer_actions (GtkUIManager *manager, EMsgComposer *composer)
+{
+	static GtkActionEntry entries[] = {
+		{ "eex-send-options",
+		  NULL,
+		  N_("_Send Options"),
+		  NULL,
+		  N_("Insert Send options"),
+		  G_CALLBACK (action_send_options_cb) }
+	};
+
+	GtkhtmlEditor *editor;
+	EComposerHeaderTable *headers;
+	EComposerHeader *header;
+
+	editor = GTKHTML_EDITOR (composer);
+
+	/* Add actions to the "composer" action group. */
+	gtk_action_group_add_actions (
+		gtkhtml_editor_get_action_group (editor, "composer"),
+		entries, G_N_ELEMENTS (entries), composer);
+
+	headers = e_msg_composer_get_header_table (composer);
+	header = e_composer_header_table_get_header (headers, E_COMPOSER_HEADER_FROM);
+
+	from_changed_cb (E_COMPOSER_FROM_HEADER (header), composer);
+	g_signal_connect (G_OBJECT (header), "changed", G_CALLBACK (from_changed_cb), composer);
 
+	return TRUE;
 }
diff --git a/eplugin/org-gnome-exchange-operations.eplug.xml b/eplugin/org-gnome-exchange-operations.eplug.xml
index fcd6ff0..9069908 100644
--- a/eplugin/org-gnome-exchange-operations.eplug.xml
+++ b/eplugin/org-gnome-exchange-operations.eplug.xml
@@ -46,8 +46,18 @@
 		</group>
 	</hook>
 
-	<hook class="org.gnome.evolution.mail.events:1.0">
-		<event id="composer.selectsendoption" handle="org_gnome_exchange_send_options" target="composer" enable="sendoption"/>
+	<hook class="org.gnome.evolution.ui:1.0">
+		<ui-manager id="org.gnome.evolution.composer" callback="eex_ui_composer_actions">
+			<menubar name="main-menu">
+				<menu action="insert-menu">
+					<placeholder name="insert-menu-top">
+						<placeholder name="send-options">
+							<menuitem action="eex-send-options"/>
+						</placeholder>
+					</placeholder>
+				</menu>
+			</menubar>
+		</ui-manager>
 	</hook>
 
 	<hook class="org.gnome.evolution.ui:1.0">



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