Register signal handler for all interfaces.
authorenglebass <englebass@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 5 Nov 2008 20:33:16 +0000 (20:33 +0000)
committerenglebass <englebass@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 5 Nov 2008 20:33:16 +0000 (20:33 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/e_dbus@37504 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/nm/e_nm_device.c
src/lib/nm/e_nm_private.h

index f242c2a..e0405cc 100644 (file)
@@ -77,38 +77,6 @@ error:
 #endif
 
 static void
-property_device_type(Property_Data *data, DBusMessageIter *iter)
-{
-  E_NM_Device *device;
-
-  if (!check_arg_type(iter, 'u')) goto error;
-
-  device = data->reply;
-  dbus_message_iter_get_basic(iter, &(device->device_type));
-  switch (device->device_type)
-  {
-    case E_NM_DEVICE_TYPE_WIRED:
-      data->property = device_wired_properties;
-      e_nm_device_properties_get(data->nmi->conn, data->object, data->property->name, property, data);
-      break;
-    case E_NM_DEVICE_TYPE_WIRELESS:
-      data->property = device_wireless_properties;
-      e_nm_device_properties_get(data->nmi->conn, data->object, data->property->name, property, data);
-      break;
-    default:
-      if (data->cb_func) data->cb_func(data->data, device);
-      property_data_free(data);
-      break;
-  }
-  return;
-error:
-  if (data->reply) e_nm_device_free(data->reply);
-  if (data->cb_func) data->cb_func(data->data, NULL);
-  property_data_free(data);
-}
-
-static void
 cb_state_changed(void *data, DBusMessage *msg)
 {
   E_NM_Device_Internal *dev;
@@ -135,6 +103,32 @@ cb_state_changed(void *data, DBusMessage *msg)
 }
 
 static void
+cb_wired_properties_changed(void *data, DBusMessage *msg)
+{
+  E_NM_Device_Internal *dev;
+  if (!msg || !data) return;
+
+  dev = data;
+  parse_properties(dev, device_wired_properties, msg);
+
+  if (dev->properties_changed)
+    dev->properties_changed(&(dev->dev));
+}
+
+static void
+cb_wireless_properties_changed(void *data, DBusMessage *msg)
+{
+  E_NM_Device_Internal *dev;
+  if (!msg || !data) return;
+
+  dev = data;
+  parse_properties(dev, device_wireless_properties, msg);
+
+  if (dev->properties_changed)
+    dev->properties_changed(&(dev->dev));
+}
+
+static void
 cb_properties_changed(void *data, DBusMessage *msg)
 {
   E_NM_Device_Internal *dev;
@@ -142,18 +136,43 @@ cb_properties_changed(void *data, DBusMessage *msg)
 
   dev = data;
   parse_properties(dev, device_properties, msg);
+
+  if (dev->properties_changed)
+    dev->properties_changed(&(dev->dev));
+}
+
+static void
+property_device_type(Property_Data *data, DBusMessageIter *iter)
+{
+  E_NM_Device_Internal *dev;
+
+  if (!check_arg_type(iter, 'u')) goto error;
+
+  dev = data->reply;
+  dbus_message_iter_get_basic(iter, &(dev->dev.device_type));
   switch (dev->dev.device_type)
   {
     case E_NM_DEVICE_TYPE_WIRED:
-      parse_properties(dev, device_wired_properties, msg);
+      data->property = device_wired_properties;
+      ecore_list_append(dev->handlers, e_nm_device_wired_signal_handler_add(data->nmi->conn, dev->dev.udi, "PropertiesChanged", cb_wired_properties_changed, dev));
+      e_nm_device_wired_properties_get(data->nmi->conn, data->object, data->property->name, property, data);
       break;
     case E_NM_DEVICE_TYPE_WIRELESS:
-      parse_properties(dev, device_wireless_properties, msg);
+      data->property = device_wireless_properties;
+      ecore_list_append(dev->handlers, e_nm_device_wireless_signal_handler_add(data->nmi->conn, dev->dev.udi, "PropertiesChanged", cb_wireless_properties_changed, dev));
+      e_nm_device_wireless_properties_get(data->nmi->conn, data->object, data->property->name, property, data);
+      break;
+    default:
+      if (data->cb_func) data->cb_func(data->data, dev);
+      property_data_free(data);
       break;
   }
-
-  if (dev->properties_changed)
-    dev->properties_changed(&(dev->dev));
+  return;
+error:
+  if (data->reply) e_nm_device_free(data->reply);
+  if (data->cb_func) data->cb_func(data->data, NULL);
+  property_data_free(data);
 }
 
 EAPI int
@@ -177,8 +196,8 @@ e_nm_device_get(E_NM *nm, const char *device,
   d->object = strdup(device);
 
   dev->handlers = ecore_list_new();
-  ecore_list_append(dev->handlers, e_nm_device_signal_handler_add(nmi->conn, device, "StateChanged", cb_state_changed, nmi));
-  ecore_list_append(dev->handlers, e_nm_device_signal_handler_add(nmi->conn, device, "PropertiesChanged", cb_properties_changed, nmi));
+  ecore_list_append(dev->handlers, e_nm_device_signal_handler_add(nmi->conn, device, "StateChanged", cb_state_changed, dev));
+  ecore_list_append(dev->handlers, e_nm_device_signal_handler_add(nmi->conn, device, "PropertiesChanged", cb_properties_changed, dev));
  
   return e_nm_device_properties_get(nmi->conn, d->object, d->property->name, property, d) ? 1 : 0;
 }
index 3f0e6fd..f02f1e9 100644 (file)
 #define e_nm_properties_get(con, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, E_NM_PATH, _E_NM_INTERFACE, prop, (E_DBus_Method_Return_Cb) cb, data)
 #define e_nm_access_point_properties_get(con, dev, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_ACCESSPOINT, prop, (E_DBus_Method_Return_Cb) cb, data)
 #define e_nm_device_properties_get(con, dev, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_DEVICE, prop, (E_DBus_Method_Return_Cb) cb, data)
+#define e_nm_device_wired_properties_get(con, dev, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_DEVICE_WIRED, prop, (E_DBus_Method_Return_Cb) cb, data)
+#define e_nm_device_wireless_properties_get(con, dev, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_DEVICE_WIRELESS, prop, (E_DBus_Method_Return_Cb) cb, data)
 #define e_nm_ip4_config_properties_get(con, dev, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_IP4CONFIG, prop, (E_DBus_Method_Return_Cb) cb, data)
 #define e_nm_active_connection_properties_get(con, dev, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_CONNECTION_ACTIVE, prop, (E_DBus_Method_Return_Cb) cb, data)
 
 #define e_nm_signal_handler_add(con, sig, cb, data) e_dbus_signal_handler_add(con, _E_NM_SERVICE, E_NM_PATH, _E_NM_INTERFACE, sig, cb, data)
 #define e_nm_access_point_signal_handler_add(con, dev, sig, cb, data) e_dbus_signal_handler_add(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_ACCESSPOINT, sig, cb, data)
 #define e_nm_device_signal_handler_add(con, dev, sig, cb, data) e_dbus_signal_handler_add(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_DEVICE, sig, cb, data)
+#define e_nm_device_wired_signal_handler_add(con, dev, sig, cb, data) e_dbus_signal_handler_add(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_DEVICE_WIRED, sig, cb, data)
+#define e_nm_device_wireless_signal_handler_add(con, dev, sig, cb, data) e_dbus_signal_handler_add(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_DEVICE_WIRELESS, sig, cb, data)
 
 #define e_nms_signal_handler_add(con, service, sig, cb, data) e_dbus_signal_handler_add(con, service, _E_NMS_PATH, _E_NMS_INTERFACE, sig, cb, data)