[evolution] Convert "default-mailer" plugin to an extension.



commit 0b60ec7c89f99eaf4ac8c655ed953d705cf034c3
Author: Matthew Barnes <mbarnes redhat com>
Date:   Thu May 13 09:17:25 2010 -0400

    Convert "default-mailer" plugin to an extension.

 configure.ac                                       |    4 +-
 mail/em-utils.c                                    |    2 +-
 modules/Makefile.am                                |    1 +
 modules/mailto-handler/Makefile.am                 |   54 ++++
 ...-evolution-mail-prompts-checkdefault.schemas.in |    0
 modules/mailto-handler/evolution-mailto-handler.c  |  274 ++++++++++++++++++++
 plugins/default-mailer/Makefile.am                 |   66 -----
 plugins/default-mailer/default-mailer.c            |  106 --------
 .../org-gnome-default-mailer.eplug.xml             |   20 --
 .../org-gnome-default-mailer.error.xml             |   10 -
 shell/main.c                                       |    3 +
 11 files changed, 335 insertions(+), 205 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index f4e00a9..5afd891 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1419,7 +1419,7 @@ plugins_base_always="calendar-file calendar-http itip-formatter plugin-manager d
 plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN"
 dist_plugins_base="$plugins_base_always calendar-weather sa-junk-plugin bogo-junk-plugin"
 
-plugins_standard_always="bbdb subject-thread save-calendar mail-to-task mailing-list-actions default-mailer prefer-plain mail-notification attachment-reminder backup-restore email-custom-header templates vcard-inline"
+plugins_standard_always="bbdb subject-thread save-calendar mail-to-task mailing-list-actions prefer-plain mail-notification attachment-reminder backup-restore email-custom-header templates vcard-inline"
 
 plugins_standard="$plugins_standard_always"
 dist_plugins_standard="$plugins_standard audio-inline image-inline pst-import"
@@ -1755,6 +1755,7 @@ modules/Makefile
 modules/addressbook/Makefile
 modules/calendar/Makefile
 modules/mail/Makefile
+modules/mailto-handler/Makefile
 modules/network-manager/Makefile
 modules/connman/Makefile
 modules/plugin-lib/Makefile
@@ -1772,7 +1773,6 @@ plugins/caldav/Makefile
 plugins/calendar-file/Makefile
 plugins/calendar-http/Makefile
 plugins/calendar-weather/Makefile
-plugins/default-mailer/Makefile
 plugins/default-source/Makefile
 plugins/email-custom-header/Makefile
 plugins/external-editor/Makefile
diff --git a/mail/em-utils.c b/mail/em-utils.c
index c2982b6..ed6cef3 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -149,7 +149,7 @@ em_utils_prompt_user(GtkWindow *parent, const gchar *promptkey, const gchar *tag
 	g_object_unref (alert);
 
 	if (promptkey) {
-		check = gtk_check_button_new_with_mnemonic (_("_Do not show this message again."));
+		check = gtk_check_button_new_with_mnemonic (_("_Do not show this message again"));
 		gtk_container_set_border_width((GtkContainer *)check, 12);
 		container = gtk_dialog_get_content_area (GTK_DIALOG (mbox));
 		gtk_box_pack_start (GTK_BOX (container), check, TRUE, TRUE, 0);
diff --git a/modules/Makefile.am b/modules/Makefile.am
index 718cba2..3920b51 100644
--- a/modules/Makefile.am
+++ b/modules/Makefile.am
@@ -22,6 +22,7 @@ SUBDIRS = \
 	addressbook \
 	calendar \
 	mail \
+	mailto-handler \
 	plugin-lib \
 	$(MONO_DIR) \
 	$(PYTHON_DIR) \
diff --git a/modules/mailto-handler/Makefile.am b/modules/mailto-handler/Makefile.am
new file mode 100644
index 0000000..8e61f34
--- /dev/null
+++ b/modules/mailto-handler/Makefile.am
@@ -0,0 +1,54 @@
+module_LTLIBRARIES = libevolution-module-mailto-handler.la
+
+libevolution_module_mailto_handler_la_CPPFLAGS =		\
+	$(AM_CPPFLAGS)						\
+	-I$(top_srcdir)						\
+	-DG_LOG_DOMAIN=\"evolution-mailto-handler\"		\
+	$(GNOME_PLATFORM_CFLAGS)
+
+libevolution_module_mailto_handler_la_SOURCES =			\
+	evolution-mailto-handler.c
+
+libevolution_module_mailto_handler_la_LIBADD =			\
+	$(top_builddir)/e-util/libeutil.la			\
+	$(top_builddir)/shell/libeshell.la			\
+	$(GNOME_PLATFORM_LIBS)
+
+libevolution_module_mailto_handler_la_LDFLAGS =			\
+	-module -avoid-version $(NO_UNDEFINED)
+
+schemadir = $(GCONF_SCHEMA_FILE_DIR)
+schema_in_files = apps-evolution-mail-prompts-checkdefault.schemas.in
+schema_DATA = $(schema_in_files:.schemas.in=.schemas)
+
+ INTLTOOL_SCHEMAS_RULE@
+
+if GCONF_SCHEMAS_INSTALL
+
+if OS_WIN32
+install-data-local:
+	if test -z "$(DESTDIR)" ; then							\
+		for p in $(schema_DATA) ; do						\
+			(echo set GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE);	\
+			 echo $(GCONFTOOL) --makefile-install-rule $$p) >_temp.bat;	\
+			cmd /c _temp.bat; 						\
+			rm _temp.bat;							\
+		done									\
+	fi
+else
+install-data-local:
+	if test -z "$(DESTDIR)" ; then							\
+		for p in $(schema_DATA) ; do						\
+			GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) 		\
+				$(GCONFTOOL) --makefile-install-rule $$p;		\
+		done									\
+	fi
+endif
+
+endif
+
+EXTRA_DIST = $(schema_in_files)
+
+DISTCLEANFILES = $(schema_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/plugins/default-mailer/apps-evolution-mail-prompts-checkdefault.schemas.in b/modules/mailto-handler/apps-evolution-mail-prompts-checkdefault.schemas.in
similarity index 100%
rename from plugins/default-mailer/apps-evolution-mail-prompts-checkdefault.schemas.in
rename to modules/mailto-handler/apps-evolution-mail-prompts-checkdefault.schemas.in
diff --git a/modules/mailto-handler/evolution-mailto-handler.c b/modules/mailto-handler/evolution-mailto-handler.c
new file mode 100644
index 0000000..076f2e0
--- /dev/null
+++ b/modules/mailto-handler/evolution-mailto-handler.c
@@ -0,0 +1,274 @@
+/*
+ * evolution-mailto-handler.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#include <config.h>
+#include <glib/gi18n-lib.h>
+
+#include <shell/e-shell.h>
+#include <e-util/e-binding.h>
+#include <e-util/e-extension.h>
+
+/* Standard GObject macros */
+#define E_TYPE_MAILTO_HANDLER \
+	(e_mailto_handler_get_type ())
+#define E_MAILTO_HANDLER(obj) \
+	(G_TYPE_CHECK_INSTANCE_CAST \
+	((obj), E_TYPE_MAILTO_HANDLER, EMailtoHandler))
+
+#define MAILTO_COMMAND \
+	"evolution --component=mail %s"
+
+typedef struct _EMailtoHandler EMailtoHandler;
+typedef struct _EMailtoHandlerClass EMailtoHandlerClass;
+
+struct _EMailtoHandler {
+	EExtension parent;
+};
+
+struct _EMailtoHandlerClass {
+	EExtensionClass parent_class;
+};
+
+/* Module Entry Points */
+void e_module_load (GTypeModule *type_module);
+void e_module_unload (GTypeModule *type_module);
+
+/* Forward Declarations */
+GType e_mailto_handler_get_type (void);
+
+G_DEFINE_DYNAMIC_TYPE (EMailtoHandler, e_mailto_handler, E_TYPE_EXTENSION)
+
+static EShell *
+mailto_handler_get_shell (EMailtoHandler *extension)
+{
+	EExtensible *extensible;
+
+	extensible = e_extension_get_extensible (E_EXTENSION (extension));
+
+	return E_SHELL (extensible);
+}
+
+static gboolean
+mailto_handler_is_evolution (const gchar *mailto_command)
+{
+	gint argc;
+	gchar **argv;
+	gchar *basename;
+	gboolean is_evolution;
+
+	if (mailto_command == NULL)
+		return FALSE;
+
+	/* Tokenize the mailto command. */
+	if (!g_shell_parse_argv (mailto_command, &argc, &argv, NULL))
+		return FALSE;
+
+	g_return_val_if_fail (argc > 0, FALSE);
+
+	/* Check the basename of the first token. */
+	basename = g_path_get_basename (argv[0]);
+	is_evolution = g_str_has_prefix (basename, "evolution");
+	g_free (basename);
+
+	g_strfreev (argv);
+
+	return is_evolution;
+}
+
+static gboolean
+mailto_handler_prompt (EMailtoHandler *extension)
+{
+	EShell *shell;
+	EShellSettings *shell_settings;
+	GtkWidget *container;
+	GtkWidget *dialog;
+	GtkWidget *widget;
+	const gchar *text;
+	gchar *markup;
+	gint response;
+
+	shell = mailto_handler_get_shell (extension);
+	shell_settings = e_shell_get_shell_settings (shell);
+
+	dialog = gtk_dialog_new_with_buttons (
+		"", NULL, 0,
+		GTK_STOCK_NO, GTK_RESPONSE_NO,
+		GTK_STOCK_YES, GTK_RESPONSE_YES,
+		NULL);
+
+	gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+	gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+
+	container = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+
+	widget = gtk_hbox_new (FALSE, 12);
+	gtk_container_set_border_width (GTK_CONTAINER (widget), 5);
+	gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0);
+	gtk_widget_show (widget);
+
+	container = widget;
+
+	widget = gtk_image_new_from_stock (
+		GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
+	gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+	gtk_widget_show (widget);
+
+	widget = gtk_vbox_new (FALSE, 12);
+	gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0);
+	gtk_widget_show (widget);
+
+	container = widget;
+
+	text = _("Do you want to make Evolution your default email client?");
+	markup = g_markup_printf_escaped ("<b>%s</b>", text);
+	widget = gtk_label_new (NULL);
+	gtk_label_set_markup (GTK_LABEL (widget), markup);
+	gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+	gtk_widget_show (widget);
+	g_free (markup);
+
+	text = _("_Do not show this message again");
+	widget = gtk_check_button_new_with_mnemonic (text);
+	gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 12);
+	gtk_widget_show (widget);
+
+	e_mutual_binding_new_with_negation (
+		shell_settings, "mailto-handler-check",
+		widget, "active");
+
+	/* Direct input focus away from the checkbox. */
+	widget = gtk_dialog_get_widget_for_response (
+		GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+	gtk_widget_grab_focus (widget);
+
+	response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+	gtk_widget_destroy (dialog);
+
+	return (response == GTK_RESPONSE_YES);
+}
+
+static void
+mailto_handler_check (EMailtoHandler *extension)
+{
+	EShell *shell;
+	EShellSettings *shell_settings;
+	gboolean check_mailto_handler = TRUE;
+	gchar *mailto_command = NULL;
+
+	shell = mailto_handler_get_shell (extension);
+	shell_settings = e_shell_get_shell_settings (shell);
+
+	g_object_get (
+		shell_settings,
+		"mailto-handler-command", &mailto_command,
+		"mailto-handler-check", &check_mailto_handler,
+		NULL);
+
+	/* Should we check the "mailto" URI handler? */
+	if (!check_mailto_handler)
+		goto exit;
+
+	/* Is Evolution already handling "mailto" URIs? */
+	if (mailto_handler_is_evolution (mailto_command))
+		goto exit;
+
+	/* Does the user want Evolution to handle them? */
+	if (!mailto_handler_prompt (extension))
+		goto exit;
+
+	/* Configure Evolution to be the "mailto" URI handler. */
+
+	g_object_set (
+		shell_settings,
+		"mailto-handler-command", MAILTO_COMMAND,
+		"mailto-handler-enabled", TRUE,
+		"mailto-handler-needs-terminal", FALSE,
+		NULL);
+
+exit:
+	g_free (mailto_command);
+}
+
+static void
+mailto_handler_constructed (GObject *object)
+{
+	EShell *shell;
+	EShellSettings *shell_settings;
+	EMailtoHandler *extension;
+
+	extension = E_MAILTO_HANDLER (object);
+
+	shell = mailto_handler_get_shell (extension);
+	shell_settings = e_shell_get_shell_settings (shell);
+
+	e_shell_settings_install_property_for_key (
+		"mailto-handler-check",
+		"/apps/evolution/mail/prompts/checkdefault");
+
+	e_shell_settings_install_property_for_key (
+		"mailto-handler-command",
+		"/desktop/gnome/url-handlers/mailto/command");
+
+	e_shell_settings_install_property_for_key (
+		"mailto-handler-enabled",
+		"/desktop/gnome/url-handlers/mailto/enabled");
+
+	e_shell_settings_install_property_for_key (
+		"mailto-handler-needs-terminal",
+		"/desktop/gnome/url-handlers/mailto/needs_terminal");
+
+	g_signal_connect_swapped (
+		shell, "event::ready-to-start",
+		G_CALLBACK (mailto_handler_check), extension);
+}
+
+static void
+e_mailto_handler_class_init (EMailtoHandlerClass *class)
+{
+	GObjectClass *object_class;
+	EExtensionClass *extension_class;
+
+	object_class = G_OBJECT_CLASS (class);
+	object_class->constructed = mailto_handler_constructed;
+
+	extension_class = E_EXTENSION_CLASS (class);
+	extension_class->extensible_type = E_TYPE_SHELL;
+}
+
+static void
+e_mailto_handler_class_finalize (EMailtoHandlerClass *class)
+{
+}
+
+static void
+e_mailto_handler_init (EMailtoHandler *extension)
+{
+}
+
+G_MODULE_EXPORT void
+e_module_load (GTypeModule *type_module)
+{
+	e_mailto_handler_register_type (type_module);
+}
+
+G_MODULE_EXPORT void
+e_module_unload (GTypeModule *type_module)
+{
+}
diff --git a/shell/main.c b/shell/main.c
index 60871e6..c42917c 100644
--- a/shell/main.c
+++ b/shell/main.c
@@ -552,6 +552,9 @@ main (gint argc, gchar **argv)
 	 * as both shell backends and certain plugins hook into this. */
 	e_shell_migrate_attempt (shell);
 
+	/* This is an alternative to the "upgrade.done" EEvent. */
+	e_shell_event (shell, "ready-to-start", NULL);
+
 	g_idle_add ((GSourceFunc) idle_cb, remaining_args);
 
 	gtk_main ();



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