109 lines
3.2 KiB
Diff
109 lines
3.2 KiB
Diff
From a1805cadf3e6f7396a323c26e391cd91c28c829f Mon Sep 17 00:00:00 2001
|
|
From: Hans de Goede <hdegoede@redhat.com>
|
|
Date: Tue, 18 Jun 2013 11:59:55 +0200
|
|
Subject: [PATCH 06/11] cheese: Properly deal with going from 0 -> 1 devices
|
|
|
|
Before this patch cheese showed a "No device found" message when started
|
|
without any devices connected, and would keep showing this after the user
|
|
plugged in a webcam. The new cam also could not be selected from the
|
|
preferences dialog.
|
|
|
|
After this patch cheese will automatically switch to showing video from a
|
|
newly plugged in webcam (when it had no devices before).
|
|
|
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
---
|
|
src/cheese-application.vala | 1 +
|
|
src/cheese-preferences.vala | 28 +++++++++++++++++++++++++---
|
|
2 files changed, 26 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/cheese-application.vala b/src/cheese-application.vala
|
|
index aa62a2e..fbb1145 100644
|
|
--- a/src/cheese-application.vala
|
|
+++ b/src/cheese-application.vala
|
|
@@ -368,6 +368,7 @@ public class Cheese.Application : Gtk.Application
|
|
mode.set_enabled (false);
|
|
shoot.set_enabled (false);
|
|
|
|
+ preferences_dialog.camera_stop ();
|
|
main_window.camera_state_change_null ();
|
|
break;
|
|
default:
|
|
diff --git a/src/cheese-preferences.vala b/src/cheese-preferences.vala
|
|
index a73bb46..06929f5 100644
|
|
--- a/src/cheese-preferences.vala
|
|
+++ b/src/cheese-preferences.vala
|
|
@@ -24,6 +24,8 @@ using Gtk;
|
|
public class Cheese.PreferencesDialog : GLib.Object
|
|
{
|
|
private Cheese.Camera camera;
|
|
+ private bool camera_is_setup;
|
|
+ private bool camera_is_playing;
|
|
|
|
private GLib.Settings settings;
|
|
|
|
@@ -122,8 +124,16 @@ public class Cheese.PreferencesDialog : GLib.Object
|
|
{
|
|
try
|
|
{
|
|
- camera.setup (null);
|
|
- camera.play ();
|
|
+ if (!camera_is_setup)
|
|
+ {
|
|
+ camera.setup (null);
|
|
+ camera_is_setup = true;
|
|
+ }
|
|
+ if (!camera_is_playing)
|
|
+ {
|
|
+ camera.play ();
|
|
+ camera_is_playing = true;
|
|
+ }
|
|
camera_changed ();
|
|
}
|
|
catch (Error err)
|
|
@@ -133,6 +143,14 @@ public class Cheese.PreferencesDialog : GLib.Object
|
|
}
|
|
|
|
/**
|
|
+ * Call this when the gstreamer pipe transitions to NULL
|
|
+ */
|
|
+ public void camera_stop ()
|
|
+ {
|
|
+ camera_is_playing = false;
|
|
+ }
|
|
+
|
|
+ /**
|
|
* Set up combo box cell renderers.
|
|
*/
|
|
private void setup_combo_box_models ()
|
|
@@ -268,7 +286,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 ();
|
|
- camera_changed ();
|
|
+ camera_play ();
|
|
}
|
|
|
|
/**
|
|
@@ -529,6 +547,7 @@ public class Cheese.PreferencesDialog : GLib.Object
|
|
{
|
|
TreeIter iter;
|
|
Cheese.CameraDevice dev = (Cheese.CameraDevice) device;
|
|
+ bool was_empty = camera_model.iter_n_children (null) == 0;
|
|
|
|
camera_model.append (out iter);
|
|
camera_model.set (iter,
|
|
@@ -537,6 +556,9 @@ public class Cheese.PreferencesDialog : GLib.Object
|
|
|
|
if (camera_model.iter_n_children (null) > 1)
|
|
source_combo.sensitive = true;
|
|
+
|
|
+ if (was_empty)
|
|
+ source_combo.set_active_iter (iter);
|
|
}
|
|
|
|
/**
|
|
--
|
|
1.8.3.1
|
|
|