From: raster Date: Thu, 23 Jun 2011 06:24:57 +0000 (+0000) Subject: From: cnook X-Git-Tag: REL_F_I9500_20120323_1~17^2~2510 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a2d40ab78d02a80dadac02ee1a71befa6878bbe7;p=framework%2Fuifw%2Felementary.git From: cnook Subject: Re: [E-devel] [Patch][elm_conform] When the indicator is displayed initially and use elm_confrom as parent by using elm_conformant_content_area_get, the indicator area (wd->shelf) does not display properly. Because any interested ECORE_X_EVENT_WINDOW_PROPERTY does not notify. In this case, we have got to evaluate size, when EVAS_CALLBACK_RESIZE occurs. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@60616 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/lib/elm_conform.c b/src/lib/elm_conform.c index 8b05b5a..dba03ab 100644 --- a/src/lib/elm_conform.c +++ b/src/lib/elm_conform.c @@ -24,8 +24,8 @@ struct _Widget_Data Evas_Object *shelf, *panel, *virtualkeypad; Evas_Object *content; Evas_Object *scroller; - Ecore_Event_Handler *prop_hdl; #ifdef HAVE_ELEMENTARY_X + Ecore_Event_Handler *prop_hdl; Ecore_X_Virtual_Keyboard_State vkb_state; #endif struct @@ -51,6 +51,7 @@ static char *sub_type[SUB_TYPE_COUNT] = { "scroller", "genlist" }; /* local function prototypes */ static const char *widtype = NULL; +static void _del_pre_hook(Evas_Object *obj); static void _del_hook(Evas_Object *obj); static void _mirrored_set(Evas_Object *obj, Eina_Bool rtl); static void _theme_hook(Evas_Object *obj); @@ -65,17 +66,31 @@ static void _conformant_part_size_set(Evas_Object *obj, static void _conformant_part_sizing_eval(Evas_Object *obj, Conformant_Part_Type part_type); #endif +static void +_conformant_move_resize_event_cb(void *data, Evas *e, Evas_Object *obj, + void *event_info); static void _sizing_eval(Evas_Object *obj); static Eina_Bool _prop_change(void *data, int type, void *event); /* local functions */ static void +_del_pre_hook(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; +#ifdef HAVE_ELEMENTARY_X + if (wd->prop_hdl) ecore_event_handler_del(wd->prop_hdl); +#endif + evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE, _conformant_move_resize_event_cb, obj); + evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOVE, _conformant_move_resize_event_cb, obj); +} + +static void _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if (wd->prop_hdl) ecore_event_handler_del(wd->prop_hdl); free(wd); } @@ -404,10 +419,6 @@ _prop_change(void *data, int type __UNUSED__, void *event) ELM_CONFORM_SOFTKEY_PART | ELM_CONFORM_VIRTUAL_KEYPAD_PART); _conformant_part_sizing_eval(data, part_type); - evas_object_event_callback_add(data, EVAS_CALLBACK_RESIZE, - _conformant_move_resize_event_cb, data); - evas_object_event_callback_add(data, EVAS_CALLBACK_MOVE, - _conformant_move_resize_event_cb, data); } else if (ev->atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY) _conformant_part_sizing_eval(data, ELM_CONFORM_INDICATOR_PART); @@ -479,6 +490,10 @@ elm_conformant_add(Evas_Object *parent) #endif evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); + evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, + _conformant_move_resize_event_cb, obj); + evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, + _conformant_move_resize_event_cb, obj); _mirrored_set(obj, elm_widget_mirrored_get(obj)); _sizing_eval(obj);