Blame SOURCES/0001-conform-only-listen-to-after-paint-after-paint.patch

56f0ee
From 1b8c6d5f4895edf64aad804e2461d896e4c5c08d Mon Sep 17 00:00:00 2001
56f0ee
From: Ray Strode <rstrode@redhat.com>
56f0ee
Date: Tue, 18 Dec 2018 14:42:11 -0500
56f0ee
Subject: [PATCH] conform: only listen to after-paint after paint
56f0ee
56f0ee
The after-paint signal is emitted after painting, obviously,
56f0ee
but also, maybe less obviously, also emitted after picking.
56f0ee
56f0ee
The actor-shader-effect test does read-pixels, so needs to
56f0ee
know when painting has actually happened, not just picking.
56f0ee
56f0ee
This commit changes that test to only look for the after-paint
56f0ee
signal after the paint signal.
56f0ee
56f0ee
In the picking case, after-paint would follow a pick signal
56f0ee
instead.
56f0ee
56f0ee
Fixes Xvfb installed-tests testing.
56f0ee
---
56f0ee
 tests/conform/actor-shader-effect.c | 15 ++++++++++++---
56f0ee
 1 file changed, 12 insertions(+), 3 deletions(-)
56f0ee
56f0ee
diff --git a/tests/conform/actor-shader-effect.c b/tests/conform/actor-shader-effect.c
56f0ee
index d3ddd384f..8114aab8a 100644
56f0ee
--- a/tests/conform/actor-shader-effect.c
56f0ee
+++ b/tests/conform/actor-shader-effect.c
56f0ee
@@ -197,88 +197,97 @@ static ClutterActor *
56f0ee
 make_actor (GType shader_type)
56f0ee
 {
56f0ee
   ClutterActor *rect;
56f0ee
   const ClutterColor white = { 0xff, 0xff, 0xff, 0xff };
56f0ee
 
56f0ee
   rect = clutter_rectangle_new ();
56f0ee
   clutter_rectangle_set_color (CLUTTER_RECTANGLE (rect), &white);
56f0ee
   clutter_actor_set_size (rect, 50, 50);
56f0ee
 
56f0ee
   clutter_actor_add_effect (rect, g_object_new (shader_type, NULL));
56f0ee
 
56f0ee
   return rect;
56f0ee
 }
56f0ee
 
56f0ee
 static guint32
56f0ee
 get_pixel (int x, int y)
56f0ee
 {
56f0ee
   guint8 data[4];
56f0ee
 
56f0ee
   cogl_read_pixels (x, y, 1, 1,
56f0ee
                     COGL_READ_PIXELS_COLOR_BUFFER,
56f0ee
                     COGL_PIXEL_FORMAT_RGBA_8888_PRE,
56f0ee
                     data);
56f0ee
 
56f0ee
   return (((guint32) data[0] << 16) |
56f0ee
           ((guint32) data[1] << 8) |
56f0ee
           data[2]);
56f0ee
 }
56f0ee
 
56f0ee
 static void
56f0ee
-paint_cb (ClutterStage *stage,
56f0ee
-          gpointer      data)
56f0ee
+after_paint_cb (ClutterStage *stage,
56f0ee
+                gpointer      data)
56f0ee
 {
56f0ee
   gboolean *was_painted = data;
56f0ee
 
56f0ee
   /* old shader effect */
56f0ee
   g_assert_cmpint (get_pixel (50, 50), ==, 0xff0000);
56f0ee
   /* new shader effect */
56f0ee
   g_assert_cmpint (get_pixel (150, 50), ==, 0x00ffff);
56f0ee
   /* another new shader effect */
56f0ee
   g_assert_cmpint (get_pixel (250, 50), ==, 0xff00ff);
56f0ee
   /* new shader effect */
56f0ee
   g_assert_cmpint (get_pixel (350, 50), ==, 0x00ffff);
56f0ee
 
56f0ee
   *was_painted = TRUE;
56f0ee
 }
56f0ee
 
56f0ee
+static void
56f0ee
+paint_cb (ClutterStage *stage,
56f0ee
+          gpointer      data)
56f0ee
+{
56f0ee
+  g_signal_connect (stage, "after-paint",
56f0ee
+                    G_CALLBACK (after_paint_cb),
56f0ee
+                    data);
56f0ee
+}
56f0ee
+
56f0ee
 static void
56f0ee
 actor_shader_effect (void)
56f0ee
 {
56f0ee
   ClutterActor *stage;
56f0ee
   ClutterActor *rect;
56f0ee
   gboolean was_painted;
56f0ee
 
56f0ee
   if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
56f0ee
     return;
56f0ee
 
56f0ee
   stage = clutter_stage_new ();
56f0ee
 
56f0ee
   rect = make_actor (foo_old_shader_effect_get_type ());
56f0ee
   clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
56f0ee
 
56f0ee
   rect = make_actor (foo_new_shader_effect_get_type ());
56f0ee
   clutter_actor_set_x (rect, 100);
56f0ee
   clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
56f0ee
 
56f0ee
   rect = make_actor (foo_another_new_shader_effect_get_type ());
56f0ee
   clutter_actor_set_x (rect, 200);
56f0ee
   clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
56f0ee
 
56f0ee
   rect = make_actor (foo_new_shader_effect_get_type ());
56f0ee
   clutter_actor_set_x (rect, 300);
56f0ee
   clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
56f0ee
 
56f0ee
   clutter_actor_show (stage);
56f0ee
 
56f0ee
   was_painted = FALSE;
56f0ee
-  g_signal_connect (stage, "after-paint",
56f0ee
+  g_signal_connect (stage, "paint",
56f0ee
                     G_CALLBACK (paint_cb),
56f0ee
                     &was_painted);
56f0ee
 
56f0ee
   while (!was_painted)
56f0ee
     g_main_context_iteration (NULL, FALSE);
56f0ee
 }
56f0ee
 
56f0ee
 CLUTTER_TEST_SUITE (
56f0ee
   CLUTTER_TEST_UNIT ("/actor/shader-effect", actor_shader_effect)
56f0ee
 )
56f0ee
-- 
56f0ee
2.20.1
56f0ee