Blame SOURCES/0049-cheese-preferences-Cleanly-handle-going-from-1-0-dev.patch

ecdf9b
From 490d8d832b588d7194d6be38d7152b97ea3fe572 Mon Sep 17 00:00:00 2001
ecdf9b
From: Hans de Goede <hdegoede@redhat.com>
ecdf9b
Date: Wed, 19 Jun 2013 17:29:28 +0200
ecdf9b
Subject: [PATCH 49/50] cheese-preferences: Cleanly handle going from 1 -> 0
ecdf9b
 devices
ecdf9b
ecdf9b
Cleanly handle going from 1 -> 0 devices and going from 1 -> 0 -> 1 devices.
ecdf9b
ecdf9b
Also use camera_model.iter_n_children consistently to get the number of
ecdf9b
available devices, rather then mixing and matching it with num_camera_devices
ecdf9b
and devices.len.
ecdf9b
ecdf9b
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
ecdf9b
---
ecdf9b
 src/cheese-preferences.vala | 28 +++++++++++++++++-----------
ecdf9b
 1 file changed, 17 insertions(+), 11 deletions(-)
ecdf9b
ecdf9b
diff --git a/src/cheese-preferences.vala b/src/cheese-preferences.vala
ecdf9b
index a1316f9..df2ded2 100644
ecdf9b
--- a/src/cheese-preferences.vala
ecdf9b
+++ b/src/cheese-preferences.vala
ecdf9b
@@ -263,13 +263,13 @@ public class Cheese.PreferencesDialog : GLib.Object
ecdf9b
   [CCode (instance_pos = -1)]
ecdf9b
   public void on_source_change (Gtk.ComboBox combo)
ecdf9b
   {
ecdf9b
-    // TODO: Handle going from 1 to 0 devices, cleanly!
ecdf9b
-    return_if_fail (camera.num_camera_devices > 0);
ecdf9b
-
ecdf9b
     TreeIter iter;
ecdf9b
     Cheese.CameraDevice dev;
ecdf9b
     string dev_node;
ecdf9b
 
ecdf9b
+    if (combo.get_active () == -1)
ecdf9b
+      return;
ecdf9b
+
ecdf9b
     combo.get_active_iter (out iter);
ecdf9b
     combo.model.get (iter, 1, out dev);
ecdf9b
     dev_node = dev.get_device_node ();
ecdf9b
@@ -532,6 +532,7 @@ public class Cheese.PreferencesDialog : GLib.Object
ecdf9b
   {
ecdf9b
     TreeIter iter;
ecdf9b
     Cheese.CameraDevice dev = (Cheese.CameraDevice) device;
ecdf9b
+    bool was_empty = camera_model.iter_n_children (null) == 0;
ecdf9b
 
ecdf9b
     camera_model.append (out iter);
ecdf9b
     camera_model.set (iter,
ecdf9b
@@ -543,6 +544,8 @@ public class Cheese.PreferencesDialog : GLib.Object
ecdf9b
 
ecdf9b
     if (camera_needs_setup)
ecdf9b
       setup_camera ();
ecdf9b
+    else if (was_empty)
ecdf9b
+      source_combo.set_active_iter (iter);
ecdf9b
   }
ecdf9b
 
ecdf9b
   /**
ecdf9b
@@ -554,16 +557,19 @@ public class Cheese.PreferencesDialog : GLib.Object
ecdf9b
   private void remove_camera_device (TreeIter iter,
ecdf9b
                                      Cheese.CameraDevice device)
ecdf9b
   {
ecdf9b
-      unowned GLib.PtrArray devices = camera.get_camera_devices ();
ecdf9b
-
ecdf9b
-      // Check if the camera that we want to remove, is the active one
ecdf9b
-      if (device.device_node == camera_device_node)
ecdf9b
+      if (camera.num_camera_devices == 0) /* Last camera gone? */
ecdf9b
       {
ecdf9b
-        if (devices.len > 0)
ecdf9b
-          set_new_available_camera_device (iter);
ecdf9b
-        else
ecdf9b
-          this.dialog.hide();
ecdf9b
+        ListStore resolution_model = new ListStore (2, typeof (string),
ecdf9b
+                                                 typeof (Cheese.VideoFormat));
ecdf9b
+        photo_resolution_combo.model = resolution_model;
ecdf9b
+        video_resolution_combo.model = resolution_model;
ecdf9b
+        camera_error(_("No device found"));
ecdf9b
       }
ecdf9b
+      else if (device.device_node == camera_device_node)
ecdf9b
+      {
ecdf9b
+        set_new_available_camera_device (iter);
ecdf9b
+      }
ecdf9b
+
ecdf9b
       camera_model.remove (iter);
ecdf9b
 
ecdf9b
       if (camera_model.iter_n_children (null) <= 1)
ecdf9b
-- 
ecdf9b
1.8.2.1
ecdf9b