evas: Fix non-disappearance of text entry cursor
authorJean-Philippe Andre <jp.andre@samsung.com>
Mon, 6 Mar 2017 07:45:24 +0000 (16:45 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Mon, 6 Mar 2017 08:04:26 +0000 (17:04 +0900)
The mouse cursor in a text entry tends to not disappear even when
the mouse moves out of the entry. This seems to happen more when
the cursor was visible for a single frame only (although I'm not
100% sure about this condition).

One important difference with previous versions of EFL is that
the cursor is now part of the theme, so it is an image object
and not set by the compositor (it looks vastly different).

Anyway, when processing the list of pending_objects, we look at
the flags render_pre and rect_del which were (re)set during the
previous frame. Those flags are then (re)set during phase 1 which
happens after processing the pending objects list... only if
needed. So, phase 1 sets the condition to invalidate the current
lists of objects but that condition is checked for before phase 1.

This patch adds a check on delete_me which should hopefully make
it a rare enough case, for performance, but still force correct
rendering.

This is all spaghetti code, sorry if this explanation also reads
like pasta.

Note that exactness tests may still be broken because earlier
versions of EFL simply did not have the cursor inside the canvas
itself.

Fixes T5231

src/lib/evas/canvas/evas_render.c

index 00c2f6b..e612437 100644 (file)
@@ -1251,7 +1251,7 @@ _evas_render_check_pending_objects(Eina_Array *pending_objects, Evas *eo_e EINA_
                         (_evas_render_can_render(eo_obj, obj) ||
                          (evas_object_was_visible(eo_obj, obj) && (!obj->prev->have_clipees))))
                       {
-                         if (!(obj->render_pre || obj->rect_del))
+                         if (!obj->render_pre && !obj->rect_del && !obj->delete_me)
                            ok = EINA_TRUE;
                       }
                     else