summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid King <amigadave@amigadave.com>2013-06-27 20:40:57 +0100
committerDavid King <amigadave@amigadave.com>2013-06-27 20:43:35 +0100
commitc84e1a850231fb37793f47928b3ded18b1546920 (patch)
tree28fe850469925f2705a6f66251ae0f24145a2f0e
parent6e0cdf316ad734ff6691bc8fb53bbff6b4677868 (diff)
downloadcheese-c84e1a850231fb37793f47928b3ded18b1546920.tar.gz
Handle NULL state errors in CheeseAvatarChooser
Fixes remainder of bug 703123.
-rw-r--r--libcheese/cheese-widget.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/libcheese/cheese-widget.c b/libcheese/cheese-widget.c
index 25f35714..fb7b96ef 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);
}