[cheese] Handle NULL state errors in CheeseAvatarChooser
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cheese] Handle NULL state errors in CheeseAvatarChooser
- Date: Thu, 27 Jun 2013 19:43:41 +0000 (UTC)
commit c84e1a850231fb37793f47928b3ded18b1546920
Author: David King <amigadave amigadave com>
Date: Thu Jun 27 20:40:57 2013 +0100
Handle NULL state errors in CheeseAvatarChooser
Fixes remainder of bug 703123.
libcheese/cheese-widget.c | 31 +++++++++++++++++++++++++++++--
1 files changed, 29 insertions(+), 2 deletions(-)
---
diff --git a/libcheese/cheese-widget.c b/libcheese/cheese-widget.c
index 25f3571..fb7b96e 100644
--- a/libcheese/cheese-widget.c
+++ b/libcheese/cheese-widget.c
@@ -180,6 +180,9 @@ cheese_widget_set_problem_page (CheeseWidget *widget,
{
CheeseWidgetPrivate *priv = widget->priv;
+ priv->state = CHEESE_WIDGET_STATE_ERROR;
+ g_object_notify_by_pspec (G_OBJECT (widget), properties[PROP_STATE]);
+
gtk_notebook_set_current_page (GTK_NOTEBOOK (widget), PROBLEM_PAGE);
g_object_set_data_full (G_OBJECT (priv->problem),
"icon-name", g_strdup (icon_name), g_free);
@@ -273,6 +276,30 @@ cheese_widget_get_property (GObject *object, guint prop_id,
}
}
+/*
+ * webcam_state_changed:
+ * @camera: the camera on which there was a state change
+ * @state: the new state
+ * @widget: the widget which should be updated
+ *
+ * Handle the state of the @camera changing, and update @widget accordingly,
+ * such as by displaying an error.
+ */
+static void
+webcam_state_changed (CheeseCamera *camera, GstState state,
+ CheeseWidget *widget)
+{
+ switch (state)
+ {
+ case GST_STATE_NULL:
+ cheese_widget_set_problem_page (widget, "error");
+ break;
+ default:
+ /* TODO: Handle other cases. */
+ break;
+ }
+}
+
void
setup_camera (CheeseWidget *widget)
{
@@ -310,8 +337,6 @@ setup_camera (CheeseWidget *widget)
if (priv->error != NULL)
{
- priv->state = CHEESE_WIDGET_STATE_ERROR;
- g_object_notify_by_pspec (G_OBJECT (widget), properties[PROP_STATE]);
cheese_widget_set_problem_page (CHEESE_WIDGET (widget), "error");
}
else
@@ -322,6 +347,8 @@ setup_camera (CheeseWidget *widget)
cheese_camera_set_balance_property (priv->webcam, "hue", hue);
priv->state = CHEESE_WIDGET_STATE_READY;
g_object_notify_by_pspec (G_OBJECT (widget), properties[PROP_STATE]);
+ g_signal_connect (priv->webcam, "state-flags-changed",
+ G_CALLBACK (webcam_state_changed), widget);
cheese_camera_play (priv->webcam);
gtk_notebook_set_current_page (GTK_NOTEBOOK (widget), WEBCAM_PAGE);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]