Add a new API to edbus to let it create an EDbus session from

an existing DBus connection.

This is needed by the python bindings, was done the same way
in edbus1, so it should fit here also

NOTE: I did not test this yet, and I'm not into the edbus code,
so I please who know the code to give a look. thanks

NOTE2: I don't think this need Changelog and stuff as we are probably
the only users of this function, let me know if i'm wrong
This commit is contained in:
Davide Andreoli 2013-02-28 20:33:29 +01:00
parent 5dc2d7c126
commit 8ecd30d578
2 changed files with 39 additions and 0 deletions

View File

@ -58,6 +58,17 @@ EAPI EDBus_Connection *edbus_connection_ref(EDBus_Connection *conn) EINA_ARG_NON
*/
EAPI void edbus_connection_unref(EDBus_Connection *conn) EINA_ARG_NONNULL(1);
/**
* Integrate an existing DBus connection with the ecore main loop
*
* @param type - type of bus
* @param conn - a dbus connection (must be a DBusConnection *)
*
* @note this is a low-level function, it is meant to be used by language
* bindings, don't use unless you know what are you doing!
*/
EAPI EDBus_Connection *edbus_connection_from_dbus_connection(EDBus_Connection_Type type, void *conn);
/**
* @brief Add a callback function to be called when connection is freed
*

View File

@ -975,6 +975,34 @@ _connection_get(EDBus_Connection_Type type)
return conn;
}
EAPI EDBus_Connection *
edbus_connection_from_dbus_connection(EDBus_Connection_Type type, void *conn)
{
EDBus_Connection *econn;
EDBus_Object *obj;
EINA_SAFETY_ON_FALSE_RETURN_VAL((type < EDBUS_CONNECTION_TYPE_LAST) &&
(type > EDBUS_CONNECTION_TYPE_UNKNOWN), NULL);
econn = calloc(1, sizeof(EDBus_Connection));
EINA_SAFETY_ON_NULL_RETURN_VAL(econn, NULL);
econn->dbus_conn = (DBusConnection*) conn;
edbus_connection_setup(econn);
econn->type = type;
econn->refcount = 1;
EINA_MAGIC_SET(econn, EDBUS_CONNECTION_MAGIC);
econn->names = eina_hash_string_superfast_new(NULL);
edbus_signal_handler_add(econn, NULL, DBUS_PATH_LOCAL, DBUS_INTERFACE_LOCAL,
"Disconnected", _disconnected, econn);
obj = edbus_object_get(econn, EDBUS_FDO_BUS, EDBUS_FDO_PATH);
econn->fdo_proxy = edbus_proxy_get(obj, EDBUS_FDO_INTERFACE);
DBG("Attached to connection at %p", conn);
return econn;
}
EAPI EDBus_Connection *
edbus_private_connection_get(EDBus_Connection_Type type)
{