## ESourceExtension ESourceExtension — Base class for ESource extensions |

## Synopsis

    #include <libedataserver/libedataserver.h>

    struct              ESourceExtension;
    #define             E_SOURCE_PARAM_SETTING
    ESource *           e_source_extension_ref_source       (ESourceExtension *extension);

    ESource *           e_source_extension_get_source       (ESourceExtension *extension);

## Object Hierarchy

      GObject
       +----ESourceExtension
             +----ESourceBackend
             +----ESourceAuthentication
             +----ESourceCamel
             +----ESourceGoa
             +----ESourceMailComposition
             +----ESourceMailIdentity
             +----ESourceMailSignature
             +----ESourceMailSubmission
             +----ESourceMDN
             +----ESourceOffline
             +----ESourceOpenPGP
             +----ESourceRefresh
             +----ESourceResource
             +----ESourceRevisionGuards
             +----ESourceSecurity
             +----ESourceSMIME
             +----ESourceUoa
             +----ESourceWebdav
             +----ESourceAlarms
             +----ESourceAutocomplete

## Properties

      "source"                   ESource*              : Read / Write / Construct Only

## Description

ESourceExtension is an abstract base class for ESource extension objects. An ESourceExtension object basically just maps the keys in a key file group to a set of GObject properties. The name of the key file group doubles as the name of the ESourceExtension object.

ESourceExtension objects are accessed through `e_source_get_extension()`.

## Details

### struct ESourceExtension

    struct ESourceExtension;

Contains only private data that should be read and manipulated using the functions below.

Since 3.6

### E_SOURCE_PARAM_SETTING

    #define E_SOURCE_PARAM_SETTING (1 << G_PARAM_USER_SHIFT)

Extends GParamFlags to indicate the GObject property is associated with a key file value. Use this flag when installing GObject properties in ESourceExtension subclasses.

Since 3.6

### e_source_extension_ref_source ()

    ESource *           e_source_extension_ref_source       (ESourceExtension *extension);

Returns the ESource instance to which the `extension` belongs.

The returned ESource is referenced for thread-safety. Unreference the ESource with `g_object_unref()` when finished with it.

`extension` : | an ESourceExtension
Returns : | the ESource instance

Since 3.8

### e_source_extension_get_source ()

    ESource *           e_source_extension_get_source       (ESourceExtension *extension);

### Warning

`e_source_extension_get_source` has been deprecated since version 3.8 and should not be used in newly-written code. Use `e_source_extension_ref_source()` instead.

Returns the ESource instance to which `extension` belongs.

Note this function is not thread-safe. The returned ESource could be finalized by another thread while the caller is still using it.

`extension` : | an ESourceExtension
Returns : | the ESource instance. [transfer none]

Since 3.6

## Property Details

### The `"source"` property

      "source"                   ESource*              : Read / Write / Construct Only

The ESource being extended.