[aravis/error] viewer: get window xid once, when the drawing area is realized.



commit dcfc88e4847f8d790773f19ca67c5d61008de383
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Thu May 10 17:37:59 2012 +0200

    viewer: get window xid once, when the drawing area is realized.

 viewer/arvviewer.c |   17 ++++++++++++-----
 1 files changed, 12 insertions(+), 5 deletions(-)
---
diff --git a/viewer/arvviewer.c b/viewer/arvviewer.c
index 6f5740a..93809c3 100644
--- a/viewer/arvviewer.c
+++ b/viewer/arvviewer.c
@@ -74,6 +74,8 @@ typedef struct {
 
 	guint gain_update_event;
 	guint exposure_update_event;
+
+	gulong video_window_xid;
 } ArvViewer;
 
 double
@@ -386,7 +388,6 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
 {
 	GtkTreeIter iter;
 	GtkTreeModel *list_store;
-	GdkWindow *window;
 	GstCaps *caps;
 	GstElement *ffmpegcolorspace;
 	GstElement *ximagesink;
@@ -397,7 +398,6 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
 	int width;
 	int height;
 	unsigned int i;
-	gulong window_xid;
 	double frame_rate;
 	gint gain_min, gain_max;
 	gboolean auto_gain, auto_exposure;
@@ -524,9 +524,8 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
 
 	gst_element_set_state (viewer->pipeline, GST_STATE_PLAYING);
 
-	window = gtk_widget_get_window (viewer->drawing_area);
-	window_xid = GDK_WINDOW_XID (window);
-	gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (ximagesink), window_xid);
+	g_assert (viewer->video_window_xid != 0);
+	gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (ximagesink), viewer->video_window_xid);
 
 	g_signal_connect (viewer->stream, "new-buffer", G_CALLBACK (arv_viewer_new_buffer_cb), viewer);
 }
@@ -552,6 +551,12 @@ arv_viewer_quit_cb (GtkWidget *widget, ArvViewer *viewer)
 	gtk_main_quit ();
 }
 
+static void
+drawing_area_realize_cb (GtkWidget * widget, ArvViewer *viewer)
+{
+	viewer->video_window_xid = GDK_WINDOW_XID (gtk_widget_get_window (widget));
+}
+
 ArvViewer *
 arv_viewer_new (void)
 {
@@ -589,6 +594,8 @@ arv_viewer_new (void)
 
 	gtk_widget_set_no_show_all (viewer->trigger_combo_box, TRUE);
 
+	g_signal_connect (viewer->drawing_area, "realize", G_CALLBACK (drawing_area_realize_cb), viewer);
+
 	gtk_widget_show_all (viewer->main_window);
 
 	g_signal_connect (viewer->main_window, "destroy", G_CALLBACK (arv_viewer_quit_cb), viewer);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]