File evolution-dbus.diff of Package evolution

Index: plugins/default-mailer/Makefile.am
===================================================================
--- plugins/default-mailer/Makefile.am	(revision 33656)
+++ plugins/default-mailer/Makefile.am	(working copy)
@@ -1,6 +1,10 @@
 INCLUDES =						\
 	-I$(top_srcdir)					\
-	$(EVOLUTION_MAIL_CFLAGS)
+	$(EVOLUTION_MAIL_CFLAGS)			\
+	-I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include  
+
+LIBS =							\
+	-ldbus-1
 
 @EVO_PLUGIN_RULE@
 
Index: plugins/default-mailer/default-mailer.c
===================================================================
--- plugins/default-mailer/default-mailer.c	(revision 33656)
+++ plugins/default-mailer/default-mailer.c	(working copy)
@@ -22,11 +22,19 @@
 #include <stdlib.h>
 #include <string.h>
 
+
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
 #include <gconf/gconf-client.h>
 #include <e-util/e-error.h>
 
 #include <mail/em-utils.h>
 #include <shell/es-event.h>
+#include <camel/camel.h>
+
+#define d(x) x
 
 #define GCONF_KEY_CHECKDEFAULT   "/apps/evolution/mail/prompts/checkdefault"
 #define GCONF_KEY_MAILTO_ENABLED "/desktop/gnome/url-handlers/mailto/enabled"
@@ -34,6 +42,7 @@
 #define EVOLUTION_MAILTO_COMMAND "evolution --component=mail %s"
 
 void org_gnome_default_mailer_check_default (EPlugin *ep, ESEventTargetUpgrade *target);
+void org_gnome_shell_started (EPlugin *ep, ESEventTargetShell *target);
 
 static gboolean
 evolution_is_default_mailer (const gchar *mailto_command)
@@ -65,6 +74,132 @@ evolution_is_default_mailer (const gchar
         return is_default;
 }
 
+/* DBus Connection code */
+
+#define DBUS_SERVER_OBJECT_PATH "/org/gnome/myle"
+#define DBUS_BUS "org.gnome.myle"
+static DBusHandlerResult
+dbus_listener_message_handler (DBusConnection *connection,
+                                    DBusMessage    *message,
+                                    void           *user_data);
+
+static DBusConnection *dbus = NULL;
+static DBusObjectPathVTable dbus_listener_vtable =
+{
+  NULL,                             /* unregister_function */
+  &dbus_listener_message_handler    /* message_function */
+};
+
+static DBusConnection *
+e_dbus_connection_get ()
+{
+	DBusError error;
+
+	if (dbus)
+		return dbus;
+
+	dbus_error_init (&error);
+
+	if ((dbus = dbus_bus_get (DBUS_BUS_SESSION, &error))) {
+	          dbus_connection_setup_with_g_main (dbus, NULL);
+		  dbus_connection_set_exit_on_disconnect (dbus, FALSE);
+	} else {
+		g_printerr (("Failed to open connection to bus: %s\n"),
+                	      error.message);
+		dbus_error_free (&error);
+		return NULL;
+	}
+
+	dbus_bus_request_name (dbus,
+				 DBUS_BUS,
+				 0,
+				 &error);
+
+	if (dbus_error_is_set (&error)) {
+		fprintf (stderr, "%s: dbus_bus_request_name error: %s\n",
+			 "EDS", error.message);
+	
+		dbus_error_free (&error);
+
+		return NULL;
+	}
+
+	dbus_error_free (&error);
+
+	return dbus;
+}
+
+static void
+e_dbus_connection_close ()
+{
+	if (dbus)
+		dbus_connection_unref (dbus);
+	dbus = NULL;
+}
+
+static void
+e_dbus_setup_handlers ()
+{
+	if (!dbus)  {
+		if (!(dbus = e_dbus_connection_get ())) {
+			printf("Error setting up dbus handlers\n");
+			return;
+		}
+	}
+
+	if (!dbus_connection_register_object_path (dbus,
+						   DBUS_SERVER_OBJECT_PATH,
+						   &dbus_listener_vtable,
+						   NULL)) {
+		g_error (("Out of memory registering object path '%s'"), DBUS_SERVER_OBJECT_PATH);
+		return;
+	}
+
+	printf("DBUS Handlers setup successfully\n");
+}
+
+static void
+prepare_offline(void *key, void *value, void *data)
+{
+	CamelService *service = key;
+
+	if (CAMEL_IS_DISCO_STORE(service)
+	    || CAMEL_IS_OFFLINE_STORE(service)) {
+		mail_store_prepare_offline((CamelStore *)service);
+	}
+}
+
+static DBusHandlerResult
+dbus_listener_message_handler (DBusConnection *connection,
+                                    DBusMessage    *message,
+                                    void           *user_data)
+{
+	const char *method = dbus_message_get_member (message);
+
+  	d(printf ("D-Bus message: obj_path = '%s' interface = '%s' method = '%s' destination = '%s'\n",
+           dbus_message_get_path (message),
+           dbus_message_get_interface (message),
+           dbus_message_get_member (message),
+           dbus_message_get_destination (message)));
+	if (strcmp(dbus_message_get_member (message), "idle") == 0) {
+		/* The system is idle */
+		mail_component_stores_foreach(mail_component_peek(), prepare_offline, NULL);
+
+	} else if (strcmp(dbus_message_get_member (message), "active") == 0) {
+		/* The system has gone active */
+		mail_cancel_all ();
+	}
+	return DBUS_HANDLER_RESULT_HANDLED;
+
+}
+
+void
+org_gnome_shell_started (EPlugin *ep, ESEventTargetShell *target)
+{
+	printf("Setting up DBUS handler for Evolution ------------------------------------------------\n");
+	e_dbus_setup_handlers ();
+}
+
 void
 org_gnome_default_mailer_check_default (EPlugin *ep, ESEventTargetUpgrade *target)
 {
@@ -76,9 +211,10 @@ org_gnome_default_mailer_check_default (
 	
 	/* See whether the check default mailer key has already been set */
 	is_key = gconf_client_get(client, GCONF_KEY_CHECKDEFAULT, NULL);
-	if(!is_key)
+	if(!is_key) {
 		gconf_client_set_bool(client, GCONF_KEY_CHECKDEFAULT, TRUE, NULL);
-	gconf_value_free (is_key);
+		gconf_value_free (is_key);
+	}
 	
 	/* Check whether we're supposed to check whether or not we are the default mailer */
 	if(gconf_client_get_bool(client, GCONF_KEY_CHECKDEFAULT, NULL)) { 
Index: plugins/default-mailer/org-gnome-default-mailer.eplug.xml
===================================================================
--- plugins/default-mailer/org-gnome-default-mailer.eplug.xml	(revision 33656)
+++ plugins/default-mailer/org-gnome-default-mailer.eplug.xml	(working copy)
@@ -15,6 +15,14 @@
 				handle="org_gnome_default_mailer_check_default"
 				target="upgrade"
 			/>
+	</hook>
+		<hook class="org.gnome.evolution.shell.events:1.0">
+			<event
+				id="started.done"
+				handle="org_gnome_shell_started"
+				target="shell"
+			/>
 		</hook>
+
 	</e-plugin>
 </e-plugin-list>
openSUSE Build Service is sponsored by