diff options
author | David King <amigadave@amigadave.com> | 2013-06-27 20:40:57 +0100 |
---|---|---|
committer | David King <amigadave@amigadave.com> | 2013-06-27 20:43:35 +0100 |
commit | c84e1a850231fb37793f47928b3ded18b1546920 (patch) | |
tree | 28fe850469925f2705a6f66251ae0f24145a2f0e | |
parent | 6e0cdf316ad734ff6691bc8fb53bbff6b4677868 (diff) | |
download | cheese-c84e1a850231fb37793f47928b3ded18b1546920.tar.gz |
Handle NULL state errors in CheeseAvatarChooser
Fixes remainder of bug 703123.
-rw-r--r-- | 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 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); } |