diff options
author | Lukas Venhoda <lvenhoda@redhat.com> | 2016-07-28 15:51:30 +0200 |
---|---|---|
committer | Pavel Grunt <pgrunt@redhat.com> | 2016-07-28 19:53:31 +0200 |
commit | a395ac59447dedfb922f997c7c9cff93edd53600 (patch) | |
tree | 6fb0da459053edf4795fe001e34b7168a7bab949 | |
parent | afc4edb8041520962dd1462f688dcb0f724af52d (diff) |
spice-widget: init egl only after first gl_scanout
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.
Fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=95254
-rw-r--r-- | src/spice-widget.c | 36 |
1 files 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 */ |