diff options
-rw-r--r-- | mail/em-filter-context.c | 2 | ||||
-rw-r--r-- | mail/em-filter-source-element.c | 106 | ||||
-rw-r--r-- | mail/em-filter-source-element.h | 8 |
3 files changed, 106 insertions, 10 deletions
diff --git a/mail/em-filter-context.c b/mail/em-filter-context.c index fead5ec3c8..2885a4c20a 100644 --- a/mail/em-filter-context.c +++ b/mail/em-filter-context.c @@ -241,7 +241,7 @@ filter_context_new_element (ERuleContext *context, return e_filter_int_new_type ("score", -3, 3); if (strcmp (type, "source") == 0) - return em_filter_source_element_new (); + return em_filter_source_element_new (priv->backend); return E_RULE_CONTEXT_CLASS (em_filter_context_parent_class)-> new_element (context, type); diff --git a/mail/em-filter-source-element.c b/mail/em-filter-source-element.c index 2e2f46e5a6..742d255e0e 100644 --- a/mail/em-filter-source-element.c +++ b/mail/em-filter-source-element.c @@ -49,6 +49,7 @@ typedef struct _SourceInfo { } SourceInfo; struct _EMFilterSourceElementPrivate { + EMailBackend *backend; GList *sources; gchar *current_url; }; @@ -58,6 +59,11 @@ G_DEFINE_TYPE ( em_filter_source_element, E_TYPE_FILTER_ELEMENT) +enum { + PROP_0, + PROP_BACKEND +}; + static void source_info_free (SourceInfo *info) { @@ -145,6 +151,68 @@ filter_source_element_get_sources (EMFilterSourceElement *fs) g_object_unref (it); } + +static void +filter_source_element_set_backend (EMFilterSourceElement *element, + EMailBackend *backend) +{ + g_return_if_fail (E_IS_MAIL_BACKEND (backend)); + g_return_if_fail (element->priv->backend == NULL); + + element->priv->backend = g_object_ref (backend); +} + +static void +filter_source_element_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (property_id) { + case PROP_BACKEND: + filter_source_element_set_backend ( + EM_FILTER_SOURCE_ELEMENT (object), + g_value_get_object (value)); + return; + } + + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +} + +static void +filter_source_element_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + switch (property_id) { + case PROP_BACKEND: + g_value_set_object ( + value, + em_filter_source_element_get_backend ( + EM_FILTER_SOURCE_ELEMENT (object))); + return; + } + + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +} + +static void +filter_source_element_dispose (GObject *object) +{ + EMFilterSourceElementPrivate *priv; + + priv = EM_FILTER_SOURCE_ELEMENT_GET_PRIVATE (object); + + if (priv->backend != NULL) { + g_object_unref (priv->backend); + priv->backend = NULL; + } + + /* Chain up to parent's dispose() method. */ + G_OBJECT_CLASS (em_filter_source_element_parent_class)->dispose (object); +} + static void filter_source_element_finalize (GObject *object) { @@ -224,9 +292,11 @@ filter_source_element_clone (EFilterElement *fe) { EMFilterSourceElement *fs = (EMFilterSourceElement *) fe; EMFilterSourceElement *cpy; + EMailBackend *backend; GList *i; - cpy = (EMFilterSourceElement *) em_filter_source_element_new (); + backend = em_filter_source_element_get_backend (fs); + cpy = (EMFilterSourceElement *) em_filter_source_element_new (backend); ((EFilterElement *) cpy)->name = (gchar *) xmlStrdup ((guchar *) fe->name); cpy->priv->current_url = g_strdup (fs->priv->current_url); @@ -332,6 +402,9 @@ em_filter_source_element_class_init (EMFilterSourceElementClass *class) g_type_class_add_private (class, sizeof (EMFilterSourceElementPrivate)); object_class = G_OBJECT_CLASS (class); + object_class->set_property = filter_source_element_set_property; + object_class->get_property = filter_source_element_get_property; + object_class->dispose = filter_source_element_dispose; object_class->finalize = filter_source_element_finalize; filter_element_class = E_FILTER_ELEMENT_CLASS (class); @@ -342,17 +415,40 @@ em_filter_source_element_class_init (EMFilterSourceElementClass *class) filter_element_class->get_widget = filter_source_element_get_widget; filter_element_class->build_code = filter_source_element_build_code; filter_element_class->format_sexp = filter_source_element_format_sexp; + + g_object_class_install_property ( + object_class, + PROP_BACKEND, + g_param_spec_object ( + "backend", + NULL, + NULL, + E_TYPE_MAIL_BACKEND, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); } static void -em_filter_source_element_init (EMFilterSourceElement *fs) +em_filter_source_element_init (EMFilterSourceElement *element) { - fs->priv = EM_FILTER_SOURCE_ELEMENT_GET_PRIVATE (fs); + element->priv = EM_FILTER_SOURCE_ELEMENT_GET_PRIVATE (element); } EFilterElement * -em_filter_source_element_new (void) +em_filter_source_element_new (EMailBackend *backend) { - return g_object_new (EM_TYPE_FILTER_SOURCE_ELEMENT, NULL); + g_return_val_if_fail (E_IS_MAIL_BACKEND (backend), NULL); + + return g_object_new ( + EM_TYPE_FILTER_SOURCE_ELEMENT, + "backend", backend, NULL); } +EMailBackend * +em_filter_source_element_get_backend (EMFilterSourceElement *element) +{ + g_return_val_if_fail (EM_IS_FILTER_SOURCE_ELEMENT (element), NULL); + + return element->priv->backend; +} diff --git a/mail/em-filter-source-element.h b/mail/em-filter-source-element.h index 4d9518789e..406cd68900 100644 --- a/mail/em-filter-source-element.h +++ b/mail/em-filter-source-element.h @@ -24,6 +24,7 @@ #ifndef EM_FILTER_SOURCE_ELEMENT_H #define EM_FILTER_SOURCE_ELEMENT_H +#include <mail/e-mail-backend.h> #include <filter/e-filter-element.h> /* Standard GObject macros */ @@ -62,10 +63,9 @@ struct _EMFilterSourceElementClass { GType em_filter_source_element_get_type (void) G_GNUC_CONST; -EFilterElement *em_filter_source_element_new (void); -void em_filter_source_element_set_current - (EMFilterSourceElement *src, - const gchar *url); +EFilterElement *em_filter_source_element_new (EMailBackend *backend); +EMailBackend * em_filter_source_element_get_backend + (EMFilterSourceElement *element); G_END_DECLS |