[cheese] Add CheeseCameraDeviceMonitor::removed callback



commit 63c5ec91ea6a54f6b2a50fc10abf62f155b9e38e
Author: Patricia Santana Cruz <patriciasantanacruz gmail com>
Date:   Fri Oct 28 16:53:12 2011 +0200

    Add CheeseCameraDeviceMonitor::removed callback
    
    Added CheeseCameraDeviceMonitor::removed signal callback function in
    CheeseCamera.
    
    Fixes bug 662852.

 libcheese/cheese-camera.c |   26 +++++++++++++++++++++++++-
 1 files changed, 25 insertions(+), 1 deletions(-)
---
diff --git a/libcheese/cheese-camera.c b/libcheese/cheese-camera.c
index 36eb69b..788ff34 100644
--- a/libcheese/cheese-camera.c
+++ b/libcheese/cheese-camera.c
@@ -251,12 +251,34 @@ cheese_camera_add_device (CheeseCameraDeviceMonitor *monitor,
 {
   CheeseCameraPrivate *priv  = CHEESE_CAMERA_GET_PRIVATE (camera);
 
-  g_debug("%s", "added\n");
   g_ptr_array_add (priv->camera_devices, device);
   priv->num_camera_devices++;
 }
 
 static void
+cheese_camera_remove_device (CheeseCameraDeviceMonitor *monitor,
+                             gchar                     *id,
+                             CheeseCamera              *camera)
+{
+  int i;
+
+  CheeseCameraPrivate *priv  = CHEESE_CAMERA_GET_PRIVATE (camera);
+
+  for (i = 0; i < priv->num_camera_devices; i++)
+  {
+    CheeseCameraDevice *indexDevice = (CheeseCameraDevice *) g_ptr_array_index (priv->camera_devices, i);
+    const gchar *indexDeviceId = cheese_camera_device_get_id (indexDevice);
+
+    if (strcmp (indexDeviceId, id) == 0)
+    {
+        g_ptr_array_remove (priv->camera_devices, (gpointer) indexDevice);
+        priv->num_camera_devices--;
+        break;
+    }
+  }
+}
+
+static void
 cheese_camera_detect_camera_devices (CheeseCamera *camera)
 {
   CheeseCameraPrivate       *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
@@ -267,6 +289,8 @@ cheese_camera_detect_camera_devices (CheeseCamera *camera)
   priv->monitor = cheese_camera_device_monitor_new ();
   g_signal_connect (G_OBJECT (priv->monitor), "added",
                     G_CALLBACK (cheese_camera_add_device), camera);
+  g_signal_connect (G_OBJECT (priv->monitor), "removed",
+                    G_CALLBACK (cheese_camera_remove_device), camera);
 
   cheese_camera_device_monitor_coldplug (priv->monitor);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]