aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/e-mail-backend.c10
-rw-r--r--mail/e-mail-session.c27
-rw-r--r--mail/e-mail-session.h6
3 files changed, 42 insertions, 1 deletions
diff --git a/mail/e-mail-backend.c b/mail/e-mail-backend.c
index 0640c7ff53..dee2027f08 100644
--- a/mail/e-mail-backend.c
+++ b/mail/e-mail-backend.c
@@ -776,13 +776,19 @@ mail_backend_constructed (GObject *object)
camel_provider_init ();
priv->session = e_mail_session_new ();
- folder_cache = e_mail_session_get_folder_cache (priv->session);
g_object_bind_property (
shell, "online",
priv->session, "online",
G_BINDING_SYNC_CREATE);
+ /* Propagate "activity-added" signals from
+ * the mail session to the shell backend. */
+ g_signal_connect_swapped (
+ priv->session, "activity-added",
+ G_CALLBACK (e_shell_backend_add_activity),
+ shell_backend);
+
g_signal_connect (
priv->session, "job-started",
G_CALLBACK (mail_backend_job_started_cb),
@@ -817,6 +823,8 @@ mail_backend_constructed (GObject *object)
G_CALLBACK (mail_backend_quit_requested_cb),
shell_backend);
+ folder_cache = e_mail_session_get_folder_cache (priv->session);
+
g_signal_connect (
folder_cache, "folder-deleted",
G_CALLBACK (mail_backend_folder_deleted_cb),
diff --git a/mail/e-mail-session.c b/mail/e-mail-session.c
index ba4819d9e0..24fd0be3ef 100644
--- a/mail/e-mail-session.c
+++ b/mail/e-mail-session.c
@@ -117,6 +117,13 @@ enum {
PROP_VFOLDER_STORE
};
+enum {
+ ACTIVITY_ADDED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
static const gchar *local_folder_names[E_MAIL_NUM_LOCAL_FOLDERS] = {
N_("Inbox"), /* E_MAIL_LOCAL_FOLDER_INBOX */
N_("Drafts"), /* E_MAIL_LOCAL_FOLDER_DRAFTS */
@@ -1772,6 +1779,16 @@ e_mail_session_class_init (EMailSessionClass *class)
CAMEL_TYPE_STORE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
+
+ signals[ACTIVITY_ADDED] = g_signal_new (
+ "activity-added",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EMailSessionClass, activity_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ E_TYPE_ACTIVITY);
}
static void
@@ -1826,6 +1843,16 @@ e_mail_session_new (void)
NULL);
}
+void
+e_mail_session_add_activity (EMailSession *session,
+ EActivity *activity)
+{
+ g_return_if_fail (E_IS_MAIL_SESSION (session));
+ g_return_if_fail (E_IS_ACTIVITY (activity));
+
+ g_signal_emit (session, signals[ACTIVITY_ADDED], 0, activity);
+}
+
EMailAccountStore *
e_mail_session_get_account_store (EMailSession *session)
{
diff --git a/mail/e-mail-session.h b/mail/e-mail-session.h
index f810cf6c4a..ccba8263f4 100644
--- a/mail/e-mail-session.h
+++ b/mail/e-mail-session.h
@@ -26,6 +26,7 @@
#define E_MAIL_SESSION_H
#include <camel/camel.h>
+#include <e-util/e-activity.h>
#include <mail/e-mail-enums.h>
#include <mail/e-mail-account-store.h>
#include <mail/mail-folder-cache.h>
@@ -66,10 +67,15 @@ struct _EMailSession {
struct _EMailSessionClass {
CamelSessionClass parent_class;
+
+ void (*activity_added) (EMailSession *session,
+ EActivity *activity);
};
GType e_mail_session_get_type (void);
EMailSession * e_mail_session_new (void);
+void e_mail_session_add_activity (EMailSession *session,
+ EActivity *activity);
EMailAccountStore *
e_mail_session_get_account_store
(EMailSession *session);