X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Felement.c;h=2a6caf9e0ad74f1ba2b217873bdee5e56ede6eef;hb=67a2843d9cdf1c961c98151fcb2224b2fbe3d03f;hp=31c4560bca537e5013e4c6b16811738157769a09;hpb=c43d569914a284c3348deeed9b9092e186545d03;p=connman diff --git a/src/element.c b/src/element.c index 31c4560..2a6caf9 100644 --- a/src/element.c +++ b/src/element.c @@ -313,6 +313,51 @@ static void set_common_property(struct connman_element *element, __connman_element_unlock(element); } +static void emit_enabled_signal(DBusConnection *conn, + struct connman_element *element) +{ + DBusMessage *signal; + DBusMessageIter entry, value; + const char *iface, *key; + + DBG("conn %p", conn); + + if (element == NULL) + return; + + switch (element->type) { + case CONNMAN_ELEMENT_TYPE_DEVICE: + iface = CONNMAN_DEVICE_INTERFACE; + key = "Powered"; + break; + case CONNMAN_ELEMENT_TYPE_NETWORK: + iface = CONNMAN_NETWORK_INTERFACE; + key = "Connected"; + break; + default: + return; + } + + signal = dbus_message_new_signal(element->path, + iface, "PropertyChanged"); + if (signal == NULL) + return; + + dbus_message_iter_init_append(signal, &entry); + + dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); + + dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, + DBUS_TYPE_BOOLEAN_AS_STRING, &value); + + dbus_message_iter_append_basic(&value, DBUS_TYPE_BOOLEAN, + &element->enabled); + + dbus_message_iter_close_container(&entry, &value); + + g_dbus_send_message(conn, signal); +} + static DBusMessage *do_update(DBusConnection *conn, DBusMessage *msg, void *data) { @@ -351,6 +396,8 @@ static DBusMessage *do_enable(DBusConnection *conn, element->enabled = TRUE; + emit_enabled_signal(connection, element); + #if 0 g_dbus_emit_signal(connection, CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, "ElementUpdated", @@ -379,6 +426,8 @@ static DBusMessage *do_disable(DBusConnection *conn, element->enabled = FALSE; + emit_enabled_signal(connection, element); + #if 0 g_dbus_emit_signal(connection, CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, "ElementUpdated", @@ -452,7 +501,7 @@ static DBusMessage *device_get_properties(DBusConnection *conn, dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry); - append_networks(element, &dict); + append_networks(element, &entry); dbus_message_iter_close_container(&dict, &entry); @@ -965,8 +1014,10 @@ static void enable_element(struct connman_element *element) return; if (element->driver && element->driver->enable) { - if (element->driver->enable(element) == 0) + if (element->driver->enable(element) == 0) { element->enabled = TRUE; + emit_enabled_signal(connection, element); + } } } @@ -1040,8 +1091,10 @@ static void disable_element(struct connman_element *element) return; if (element->driver && element->driver->disable) { - if (element->driver->disable(element) == 0) + if (element->driver->disable(element) == 0) { element->enabled = FALSE; + emit_enabled_signal(connection, element); + } } } @@ -1948,9 +2001,12 @@ static gboolean remove_element(GNode *node, gpointer user_data) CONNMAN_CONNECTION_INTERFACE); } - if (element->type == CONNMAN_ELEMENT_TYPE_NETWORK) + if (element->type == CONNMAN_ELEMENT_TYPE_NETWORK) { + emit_networks_signal(connection, element->parent); + g_dbus_unregister_interface(connection, element->path, CONNMAN_NETWORK_INTERFACE); + } if (element->type == CONNMAN_ELEMENT_TYPE_DEVICE && element->subtype != CONNMAN_ELEMENT_SUBTYPE_NETWORK) {