[Spice-devel] [spice-gtk PATCH v4] spice-widget: init egl only after first gl_scanout

Pavel Grunt pgrunt at redhat.com
Thu Jul 28 18:02:36 UTC 2016


Pushed as a395ac59447dedfb922f997c7c9cff93edd53600

On Thu, 2016-07-28 at 15:51 +0200, Lukas Venhoda wrote:
> 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.
> ---
> Fixup
>  - Forgot to delete GError *err = NULL;
> 
> Changes since v3:
>  - changed drawing_area_realized variable to gtk_widget_get_realized()
>  - check whether gl-scanout is defined after realizing drawing-area
>     -if yes, call spice_display_widget_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.c | 36 +++++++++++++++++++++++-------------
>  1 file changed, 23 insertions(+), 13 deletions(-)
> 
> diff --git a/src/spice-widget.c b/src/spice-widget.c
> index 9020b07..7c1c756 100644
> --- a/src/spice-widget.c
> +++ b/src/spice-widget.c
> @@ -568,20 +568,11 @@ 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 (GDK_IS_X11_DISPLAY(gdk_display_get_default()) &&
> +        spice_display_get_gl_scanout(SPICE_DISPLAY_CHANNEL(display->priv-
> >display)) != NULL)
> +        spice_display_widget_gl_scanout(display);
> 
> -    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);
> -    }
>  #endif
>  }
> 
> @@ -2662,13 +2653,32 @@ 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
> +    GtkWidget *area = gtk_stack_get_child_by_name(d->stack, "draw-area");
> +
> +    if (GDK_IS_X11_DISPLAY(gdk_display_get_default()) &&
> +        !d->egl.context_ready &&
> +        gtk_widget_get_realized(area)) {
> +        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);
> +        }
> +    }
> +#endif
> +
>      set_egl_enabled(display, true);
> 
>      if (d->egl.context_ready) {
>          const SpiceGlScanout *scanout;
> -        GError *err = NULL;
> 
>          scanout = spice_display_get_gl_scanout(SPICE_DISPLAY_CHANNEL(d-
> >display));
>          /* should only be called when the display has a scanout */
> --
> 2.7.4
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list