From: Myungjae Lee <mjae.lee@samsung.com>

Subject: Re: [E-devel] [PATCH] elm widget: make show_region_set
function call all region show functions set by parents

I'm trying to send several patches that I've changed.
This is just the beginning of my patch rushes..

'elm_widget_show_region_set' function works fine in the simple case (any
widget inside one scroller) however, in the complex parent-child case
(such
as entry in the box in the horizontal scroller in the layout in the
vertical
scroller) it doesn't work correctly because all show region functions
set by
scrollers are not called.

So I changed it to call all show region functions set by its parents
widgets
if exist.

Please review the attached patch file and feel free to give me any
kind of
feedback.



SVN revision: 55592
This commit is contained in:
Myungjae Lee 2010-12-16 09:53:25 +00:00 committed by Carsten Haitzler
parent c28e1674ac
commit e16cbefa0e
1 changed files with 24 additions and 12 deletions

View File

@ -1562,6 +1562,9 @@ elm_widget_disabled_get(const Evas_Object *obj)
EAPI void
elm_widget_show_region_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
{
Evas_Object *parent_obj, *child_obj;
Evas_Coord px, py, cx, cy;
API_ENTRY return;
if ((x == sd->rx) && (y == sd->ry) && (w == sd->rw) && (h == sd->rh)) return;
sd->rx = x;
@ -1570,22 +1573,31 @@ elm_widget_show_region_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Co
sd->rh = h;
if (sd->on_show_region_func)
sd->on_show_region_func(sd->on_show_region_data, obj);
else
do
{
Evas_Object *parent_obj;
do
parent_obj = sd->parent_obj;
child_obj = sd->obj;
sd = evas_object_smart_data_get(parent_obj);
if ((!parent_obj) || (!sd) || (!_elm_widget_is(parent_obj))) break;
evas_object_geometry_get(parent_obj, &px, &py, NULL, NULL);
evas_object_geometry_get(child_obj, &cx, &cy, NULL, NULL);
x += (cx - px);
y += (cy - py);
sd->rx = x;
sd->ry = y;
sd->rw = w;
sd->rh = h;
if (sd->on_show_region_func)
{
parent_obj = sd->parent_obj;
sd = evas_object_smart_data_get(parent_obj);
if ((!parent_obj) || (!sd) || (!_elm_widget_is(parent_obj))) break;
if (sd->on_show_region_func)
{
sd->on_show_region_func(sd->on_show_region_data, obj);
break;
}
sd->on_show_region_func(sd->on_show_region_data, parent_obj);
}
while (parent_obj);
}
while (parent_obj);
}
EAPI void