When using GtkDrawingArea and EGL was not used, it was still initialized. This produced warning messages on systems where EGL is not supported. Move spice_egl_init from drawing_area_realize to gl_scanout. --- Changes since v2: - added drawing_area_realized variable - only enable egl after spice-widget is fully realized - moved more of the code inside GDK_WINDOWING_X11 guard Changes since v1: - changed from recursive call to if check - moved set_egl_enabled(display, true); after initialisation is finished --- src/spice-widget-priv.h | 3 +++ src/spice-widget.c | 34 +++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/spice-widget-priv.h b/src/spice-widget-priv.h index e36baf3..4b905f1 100644 --- a/src/spice-widget-priv.h +++ b/src/spice-widget-priv.h @@ -129,6 +129,9 @@ struct _SpiceDisplayPrivate { #endif #ifndef G_OS_WIN32 struct { +#ifdef GDK_WINDOWING_X11 + gboolean drawing_area_realized; +#endif gboolean context_ready; gboolean enabled; EGLSurface surface; diff --git a/src/spice-widget.c b/src/spice-widget.c index 9020b07..adbbfd2 100644 --- a/src/spice-widget.c +++ b/src/spice-widget.c @@ -568,20 +568,9 @@ drawing_area_realize(GtkWidget *area, gpointer user_data) { #ifdef GDK_WINDOWING_X11 SpiceDisplay *display = SPICE_DISPLAY(user_data); - GError *err = NULL; - - if (!GDK_IS_X11_DISPLAY(gdk_display_get_default())) - return; - if (!spice_egl_init(display, &err)) { - g_critical("egl init failed: %s", err->message); - g_clear_error(&err); - } - - if (!spice_egl_realize_display(display, gtk_widget_get_window(area), &err)) { - g_critical("egl realize failed: %s", err->message); - g_clear_error(&err); - } + if (GDK_IS_X11_DISPLAY(gdk_display_get_default())) + display->priv->egl.drawing_area_realized = TRUE; #endif } @@ -2662,8 +2651,27 @@ G_GNUC_INTERNAL void spice_display_widget_gl_scanout(SpiceDisplay *display) { SpiceDisplayPrivate *d = display->priv; + GError *err = NULL; SPICE_DEBUG("%s: got scanout", __FUNCTION__); + +#ifdef GDK_WINDOWING_X11 + if (GDK_IS_X11_DISPLAY(gdk_display_get_default()) && + !d->egl.context_ready && + d->egl.drawing_area_realized) { + if (!spice_egl_init(display, &err)) { + g_critical("egl init failed: %s", err->message); + g_clear_error(&err); + } + + GtkWidget *area = gtk_stack_get_child_by_name(d->stack, "draw-area"); + if (!spice_egl_realize_display(display, gtk_widget_get_window(area), &err)) { + g_critical("egl realize failed: %s", err->message); + g_clear_error(&err); + } + } +#endif + set_egl_enabled(display, true); if (d->egl.context_ready) { -- 2.7.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel