Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:SRagavan
evolution
evolution-dbus.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
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>
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor