forked from enlightenment/enlightenment
e/connman: monitor owner instead of bus names
edbus is not able to continue watching for signals when name owner changes happen. If we don't monitor the owner we will not receive any signals anymore after it has changed. The proper fix would be to change edbus to allow monitoring bus names. SVN revision: 76025
This commit is contained in:
parent
514ed5bad1
commit
6decf38d1f
|
@ -24,6 +24,7 @@ static struct
|
||||||
|
|
||||||
static unsigned int init_count;
|
static unsigned int init_count;
|
||||||
static E_DBus_Connection *conn;
|
static E_DBus_Connection *conn;
|
||||||
|
static char *bus_owner;
|
||||||
|
|
||||||
EAPI int E_CONNMAN_EVENT_MANAGER_IN;
|
EAPI int E_CONNMAN_EVENT_MANAGER_IN;
|
||||||
EAPI int E_CONNMAN_EVENT_MANAGER_OUT;
|
EAPI int E_CONNMAN_EVENT_MANAGER_OUT;
|
||||||
|
@ -31,6 +32,14 @@ EAPI int E_CONNMAN_EVENT_MANAGER_OUT;
|
||||||
static inline void
|
static inline void
|
||||||
_e_connman_system_name_owner_exit(void)
|
_e_connman_system_name_owner_exit(void)
|
||||||
{
|
{
|
||||||
|
e_dbus_signal_handler_del(conn, handlers.services_changed);
|
||||||
|
handlers.services_changed = NULL;
|
||||||
|
e_dbus_signal_handler_del(conn, handlers.prop_changed);
|
||||||
|
handlers.prop_changed = NULL;
|
||||||
|
|
||||||
|
free(bus_owner);
|
||||||
|
bus_owner = NULL;
|
||||||
|
|
||||||
ecore_event_add(E_CONNMAN_EVENT_MANAGER_OUT, NULL, NULL, NULL);
|
ecore_event_add(E_CONNMAN_EVENT_MANAGER_OUT, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,15 +52,16 @@ static void _manager_prop_changed(void *data __UNUSED__, DBusMessage *msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
_e_connman_system_name_owner_enter(void)
|
_e_connman_system_name_owner_enter(const char *owner)
|
||||||
{
|
{
|
||||||
if (!handlers.prop_changed)
|
free(bus_owner);
|
||||||
handlers.prop_changed = e_dbus_signal_handler_add(conn, CONNMAN_BUS_NAME,
|
bus_owner = strdup(owner);
|
||||||
|
|
||||||
|
handlers.prop_changed = e_dbus_signal_handler_add(conn, bus_owner,
|
||||||
"/", CONNMAN_MANAGER_IFACE, "PropertyChanged",
|
"/", CONNMAN_MANAGER_IFACE, "PropertyChanged",
|
||||||
_manager_prop_changed, NULL);
|
_manager_prop_changed, NULL);
|
||||||
|
|
||||||
if (!handlers.services_changed)
|
handlers.services_changed = e_dbus_signal_handler_add(conn, bus_owner,
|
||||||
handlers.services_changed = e_dbus_signal_handler_add(conn, CONNMAN_BUS_NAME,
|
|
||||||
"/", CONNMAN_MANAGER_IFACE, "ServicesChanged",
|
"/", CONNMAN_MANAGER_IFACE, "ServicesChanged",
|
||||||
_manager_services_changed, NULL);
|
_manager_services_changed, NULL);
|
||||||
|
|
||||||
|
@ -83,7 +93,7 @@ _e_connman_system_name_owner_changed(void *data __UNUSED__, DBusMessage *msg)
|
||||||
DBG("NameOwnerChanged %s from=[%s] to=[%s]", name, from, to);
|
DBG("NameOwnerChanged %s from=[%s] to=[%s]", name, from, to);
|
||||||
|
|
||||||
if (from[0] == '\0' && to[0] != '\0')
|
if (from[0] == '\0' && to[0] != '\0')
|
||||||
_e_connman_system_name_owner_enter();
|
_e_connman_system_name_owner_enter(to);
|
||||||
else if (from[0] != '\0' && to[0] == '\0')
|
else if (from[0] != '\0' && to[0] == '\0')
|
||||||
_e_connman_system_name_owner_exit();
|
_e_connman_system_name_owner_exit();
|
||||||
else
|
else
|
||||||
|
@ -93,6 +103,8 @@ _e_connman_system_name_owner_changed(void *data __UNUSED__, DBusMessage *msg)
|
||||||
static void
|
static void
|
||||||
_e_connman_get_name_owner(void *data __UNUSED__, DBusMessage *msg, DBusError *err)
|
_e_connman_get_name_owner(void *data __UNUSED__, DBusMessage *msg, DBusError *err)
|
||||||
{
|
{
|
||||||
|
const char *owner;
|
||||||
|
|
||||||
pending.get_name_owner = NULL;
|
pending.get_name_owner = NULL;
|
||||||
DBG("get_name_owner msg=%p", msg);
|
DBG("get_name_owner msg=%p", msg);
|
||||||
|
|
||||||
|
@ -103,7 +115,14 @@ _e_connman_get_name_owner(void *data __UNUSED__, DBusMessage *msg, DBusError *er
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_e_connman_system_name_owner_enter();
|
if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &owner,
|
||||||
|
DBUS_TYPE_INVALID))
|
||||||
|
{
|
||||||
|
ERR("Could not get name owner");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_e_connman_system_name_owner_enter(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue