summaryrefslogtreecommitdiff
path: root/clutter/clutter-backend.c
diff options
context:
space:
mode:
authorLionel Landwerlin <llandwerlin@gmail.com>2015-09-15 00:30:05 +0100
committerLionel Landwerlin <llandwerlin@gmail.com>2015-09-15 12:29:04 +0100
commitff1a5aae7ac374592f1a9f7ff7be6d0a4bd576c2 (patch)
tree6df8e374a95e8388c537f0010556b1cb2c306e00 /clutter/clutter-backend.c
parent6c7f624f691415ca9ae8c1a95d41b359704d6f1b (diff)
downloadclutter-ff1a5aae7ac374592f1a9f7ff7be6d0a4bd576c2.tar.gz
x11: stage window: reset framebuffer on foreign window unrealize
Similarly to 13dbb74c81bec861d3a135fb53966ae5562831a7, we need to reset the framebuffer in the x11 for foreign windows. https://bugzilla.gnome.org/show_bug.cgi?id=755014
Diffstat (limited to 'clutter/clutter-backend.c')
-rw-r--r--clutter/clutter-backend.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/clutter/clutter-backend.c b/clutter/clutter-backend.c
index e1d2336c2..91bda8315 100644
--- a/clutter/clutter-backend.c
+++ b/clutter/clutter-backend.c
@@ -135,6 +135,8 @@ clutter_backend_dispose (GObject *gobject)
/* remove all event translators */
g_clear_pointer (&backend->event_translators, g_list_free);
+ g_clear_pointer (&backend->dummy_onscreen, cogl_object_unref);
+
G_OBJECT_CLASS (clutter_backend_parent_class)->dispose (gobject);
}
@@ -762,6 +764,8 @@ clutter_backend_init (ClutterBackend *self)
{
self->units_per_em = -1.0;
self->units_serial = 1;
+
+ self->dummy_onscreen = COGL_INVALID_HANDLE;
}
void
@@ -1435,3 +1439,24 @@ _clutter_backend_get_keymap_direction (ClutterBackend *backend)
return PANGO_DIRECTION_NEUTRAL;
}
+
+void
+_clutter_backend_reset_cogl_framebuffer (ClutterBackend *backend)
+{
+ if (backend->dummy_onscreen == COGL_INVALID_HANDLE)
+ {
+ CoglError *internal_error = NULL;
+
+ backend->dummy_onscreen = cogl_onscreen_new (backend->cogl_context, 1, 1);
+
+ if (!cogl_framebuffer_allocate (COGL_FRAMEBUFFER (backend->dummy_onscreen),
+ &internal_error))
+ {
+ g_critical ("Unable to create dummy onscreen: %s", internal_error->message);
+ cogl_error_free (internal_error);
+ return;
+ }
+ }
+
+ cogl_set_framebuffer (COGL_FRAMEBUFFER (backend->dummy_onscreen));
+}