summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Venhoda <lvenhoda@redhat.com>2016-07-28 15:51:30 +0200
committerPavel Grunt <pgrunt@redhat.com>2016-07-28 19:53:31 +0200
commita395ac59447dedfb922f997c7c9cff93edd53600 (patch)
tree6fb0da459053edf4795fe001e34b7168a7bab949
parentafc4edb8041520962dd1462f688dcb0f724af52d (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.c36
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 */