avatar: fix black camera image
On some systems, when opening the camera to take a new picture for
the avatar, the result is a black image. The log also outputs
"bad dawable". It seems the VideoWidget doesn't like being a page
directly in a GtkStack. Instead we put it in a GtkFrame which does
not get destroyed. This seems to fix the issue.
Change-Id: Ia3796ad3b3f02947619c2b0ba57ad4b54e30552e
Tuleap: #840
diff --git a/src/avatarmanipulation.cpp b/src/avatarmanipulation.cpp
index 35148cd..100153c 100644
--- a/src/avatarmanipulation.cpp
+++ b/src/avatarmanipulation.cpp
@@ -88,6 +88,7 @@
GtkWidget *stack_views;
GtkWidget *image_avatar;
GtkWidget *vbox_selector;
+ GtkWidget *frame_video;
GdkPixbuf *pix_scaled;
/* selector widget properties */
@@ -142,7 +143,7 @@
if (priv->video_started_by_avatar_manipulation)
Video::PreviewManager::instance().stopPreview();
if (priv->video_widget) {
- gtk_container_remove(GTK_CONTAINER(priv->stack_views), priv->video_widget);
+ gtk_container_remove(GTK_CONTAINER(priv->frame_video), priv->video_widget);
priv->video_widget = NULL;
}
@@ -205,6 +206,7 @@
gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AvatarManipulation, button_return_edit);
gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AvatarManipulation, stack_views);
gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AvatarManipulation, image_avatar);
+ gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AvatarManipulation, frame_video);
gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AvatarManipulation, vbox_selector);
gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AvatarManipulation, button_box_current);
gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AvatarManipulation, button_box_photo);
@@ -291,7 +293,7 @@
if (priv->video_started_by_avatar_manipulation)
Video::PreviewManager::instance().stopPreview();
if (priv->video_widget) {
- gtk_container_remove(GTK_CONTAINER(priv->stack_views), priv->video_widget);
+ gtk_container_remove(GTK_CONTAINER(priv->frame_video), priv->video_widget);
priv->video_widget = NULL;
}
}
@@ -303,8 +305,8 @@
g_signal_connect_swapped(priv->video_widget, "snapshot-taken", G_CALLBACK (got_snapshot), self);
gtk_widget_set_vexpand_set(priv->video_widget, FALSE);
gtk_widget_set_hexpand_set(priv->video_widget, FALSE);
+ gtk_container_add(GTK_CONTAINER(priv->frame_video), priv->video_widget);
gtk_widget_set_visible(priv->video_widget, true);
- gtk_stack_add_named(GTK_STACK(priv->stack_views), priv->video_widget, "page_photobooth");
gtk_stack_set_visible_child_name(GTK_STACK(priv->stack_views), "page_photobooth");
@@ -332,7 +334,7 @@
if (priv->video_started_by_avatar_manipulation)
Video::PreviewManager::instance().stopPreview();
if (priv->video_widget) {
- gtk_container_remove(GTK_CONTAINER(priv->stack_views), priv->video_widget);
+ gtk_container_remove(GTK_CONTAINER(priv->frame_video), priv->video_widget);
priv->video_widget = NULL;
}