Using of evas_object_visible_get() API can't gurantee the correctness of evas_object's visible status if it's called inside of evas_object's smart_show() method. From the EFL's evas_object_show() API's implementation, I could see the reason why. EAPI void evas_object_show(Evas_Object *obj) { MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); return; MAGIC_CHECK_END(); if (obj->delete_me) return; if (evas_object_intercept_call_show(obj)) return; if (obj->smart.smart) { if (obj->smart.smart->smart_class->show) obj->smart.smart->smart_class->show(obj); // This calls object's smart_show() method. e.g) _ewk_tiled_backing_store_smart_show() } if (obj->cur.visible) { return; } obj->cur.visible = 1; // This will set the visibility of object and it is used by evas_object_visible_get() API.
Created attachment 122210 [details] Patch.
Comment on attachment 122210 [details] Patch. Looks OK. :-)
Comment on attachment 122210 [details] Patch. r=me.
Comment on attachment 122210 [details] Patch. Clearing flags on attachment: 122210 Committed r104915: <http://trac.webkit.org/changeset/104915>
All reviewed patches have been landed. Closing bug.
Comment on attachment 122210 [details] Patch. View in context: https://bugs.webkit.org/attachment.cgi?id=122210&action=review > Source/WebKit/efl/ChangeLog:10 > + Using of evas_object_visible_get() API can't gurantee the correctness of > + evas_object's visible status if it's called inside of evas_object's > + smart_show() method. This sounds weird. What kind of problems were you having, and couldn't they be solved if you call the parent show/hide functions in your smart_{show,hide} _before_ the functions enabling/disabling rendering?
(In reply to comment #6) > (From update of attachment 122210 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=122210&action=review > > > Source/WebKit/efl/ChangeLog:10 > > + Using of evas_object_visible_get() API can't gurantee the correctness of > > + evas_object's visible status if it's called inside of evas_object's > > + smart_show() method. > > This sounds weird. What kind of problems were you having, and couldn't they be solved if you call the parent show/hide functions in your smart_{show,hide} _before_ the functions enabling/disabling rendering? for example, If any API which is using evas_object_visible_getUI provide unexpected behavior if it would be called inside of smart_show api. I had already checked the case you suggested too, but it wasn't effective either. but, let me check it one more time.
(In reply to comment #6) > (From update of attachment 122210 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=122210&action=review > > > Source/WebKit/efl/ChangeLog:10 > > + Using of evas_object_visible_get() API can't gurantee the correctness of > > + evas_object's visible status if it's called inside of evas_object's > > + smart_show() method. > > This sounds weird. What kind of problems were you having, and couldn't they be solved if you call the parent show/hide functions in your smart_{show,hide} _before_ the functions enabling/disabling rendering? Double check was done. No significant effect from change calling position of parent show/hide function. I have also checked the return value as follows. static void _ewk_tiled_backing_store_smart_show(Evas_Object* ewkBackingStore) { printf("visible = %d in \n",evas_object_visible_get(ewkBackingStore)); ewk_tiled_backing_store_enable_render(ewkBackingStore); _parent_sc.show(ewkBackingStore); printf("visible = %d out \n",evas_object_visible_get(ewkBackingStore)); } AFAIK, as parent's methods are just for smart clipped, it calls evas_object_smart_clipped_smart_show() or hide().
(In reply to comment #8) > I have also checked the return value as follows. > > static void _ewk_tiled_backing_store_smart_show(Evas_Object* ewkBackingStore) > { > printf("visible = %d in \n",evas_object_visible_get(ewkBackingStore)); > ewk_tiled_backing_store_enable_render(ewkBackingStore); > _parent_sc.show(ewkBackingStore); > printf("visible = %d out \n",evas_object_visible_get(ewkBackingStore)); > } Hmm, the problem is that this is called from evas_object_show() before it sets its own `cur.visible' to 1. If these functions which have been patched are indeed called from the smart_show function, the flag added by the patch is probably needed. Thanks for the details.