From 6ddb9d4fd4ccf98028c83b924705f66753a16524 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 18 Jun 2013 11:14:16 +0200 Subject: [PATCH 03/11] cheese-preferences: Add camera_changed () method This centralizes camera-change handling, and adds a check for their being no camera removing a whole bunch of glib Critical messages being printed when cheese is started without a camera. Signed-off-by: Hans de Goede --- src/cheese-preferences.vala | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/cheese-preferences.vala b/src/cheese-preferences.vala index f04660a..44e3547 100644 --- a/src/cheese-preferences.vala +++ b/src/cheese-preferences.vala @@ -128,6 +128,28 @@ public class Cheese.PreferencesDialog : GLib.Object } /** + * Update resolution list and save the current camera to settings. + */ + private void camera_changed () + { + Cheese.CameraDevice device, iter_device; + TreeIter iter; + + device = camera.get_selected_device (); + if (device == null) + return; + settings.set_string ("camera", device.get_device_node ()); + setup_resolutions_for_device (device); + + for (bool next = camera_model.get_iter_first (out iter); next; + next = camera_model.iter_next (ref iter)) { + camera_model.get (iter, 1, out iter_device, -1); + if (iter_device == device) + source_combo.set_active_iter (iter); + } + } + + /** * Initialize and populate the camera device combo box model. */ private void initialize_camera_devices () @@ -140,8 +162,7 @@ public class Cheese.PreferencesDialog : GLib.Object devices.foreach(add_camera_device); - settings.set_string ("camera", camera.get_selected_device ().get_device_node ()); - setup_resolutions_for_device (camera.get_selected_device ()); + camera_changed (); } /** @@ -227,8 +248,7 @@ public class Cheese.PreferencesDialog : GLib.Object combo.model.get (iter, 1, out dev); camera.set_device_by_device_node (dev.get_device_node ()); camera.switch_camera_device (); - setup_resolutions_for_device (camera.get_selected_device ()); - settings.set_string ("camera", dev.get_device_node ()); + camera_changed (); } /** @@ -474,8 +494,7 @@ public class Cheese.PreferencesDialog : GLib.Object } } - settings.set_string ("camera", camera.get_selected_device ().get_device_node ()); - setup_resolutions_for_device (camera.get_selected_device ()); + camera_changed (); } /** @@ -496,9 +515,6 @@ public class Cheese.PreferencesDialog : GLib.Object 0, dev.get_name () + " (" + dev.get_device_node () + ")", 1, dev); - if (camera.get_selected_device ().get_device_node () == dev.get_device_node ()) - source_combo.set_active_iter (iter); - if (camera_model.iter_n_children (null) > 1) source_combo.sensitive = true; } -- 1.8.3.1