The patch had been kidnapped. -,.-;;

2011년 12월 13일 오후 8:32, Kim Shinwoo <kimcinoo....@gmail.com>님의 말:

> Hey dear, here is the second patch using the box for the ctxpopup's
> content.
> The wd->content is content which is set by
> elm_object_content_set(ctxpopup, content) not the box.
> Please check this and give any feedbacks, Thanks. :-)
>
>
> 2011년 12월 13일 오후 3:31, Kim Shinwoo <kimcinoo....@gmail.com>님의 말:
>
> Sure, I have separated the path.
>> The attached patch is for the using previous result which is calculated
>> by the _calc_base_geometry();
>> Thanks always.. Please review this patch first. I will send second one
>> based on the attached.
>>
>> Sincerely,
>> Shinwoo Kim.
>>
>> 2011년 12월 13일 오후 1:21, ChunEon Park <her...@naver.com>님의 말:
>>
>> Reverted.
>>> Unfortunately, this patch should not be applied.
>>> The reason is I replied already.
>>> ------------------------------------
>>> -Regards, Hermet-
>>>
>>> -----Original Message-----
>>> From: "Carsten Haitzler"&lt;ras...@rasterman.com&gt;
>>> To: "Enlightenment developer list"&
>>> lt;enlightenment-devel@lists.sourceforge.net&gt;
>>> Cc: "cnook"&lt;kimci...@gmail.com&gt;
>>> Sent: 11-12-13(화) 12:37:51
>>> Subject: Re: [E-devel] [Patch] elc_ctxpopup: using calculated value,
>>> getting size from the style also.
>>> On Mon, 5 Dec 2011 15:20:36 +0900 cnook &lt;kimci...@gmail.com&gt; said:
>>> looked at it - nothing obviously wrong in the reading of it. formatting
>>> all
>>> looks fine to me. in svn it goes. thanks!
>>> > Dear All, Hello!
>>> >
>>> > As the title, attached patch has followings.
>>> >
>>> > 1) Using Calculated Value: The _update_arrow(); had used
>>> > evas_object_geometry_get(); internally for getting its base size.
>>> > But the _calc_base_geometry(); already got the base size which
>>> > is more accurate.
>>> >
>>> > 2) Getting Size From The Style Also: If the ctxpopup has content
>>> > which is composed using the style (means, the size of
>>> > content can get from *.edc file only), then ctxpopup does not
>>> > come properly. So resolving this, the patch is using a box,
>>> > and add a RESIZE callback to the box. When the box is resized,
>>> > the callback calls elm_box_recalculate();
>>> >
>>> > Then, please review this patch and give any feedbacks. Thanks a lot.
>>> >
>>> > Sincerely,
>>> > Shinwoo Kim.
>>> --
>>> ------------- Codito, ergo sum - "I code, therefore I am" --------------
>>> The Rasterman (Carsten Haitzler) ras...@rasterman.com
>>>
>>> ------------------------------------------------------------------------------
>>> Systems Optimization Self Assessment
>>> Improve efficiency and utilization of IT resources. Drive out cost and
>>> improve service delivery. Take 5 minutes to use this Systems Optimization
>>> Self Assessment. http://www.accelacomm.com/jaw/sdnl/114/51450054/
>>> _______________________________________________
>>> enlightenment-devel mailing list
>>> enlightenment-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>>>
>>> ------------------------------------------------------------------------------
>>> Systems Optimization Self Assessment
>>> Improve efficiency and utilization of IT resources. Drive out cost and
>>> improve service delivery. Take 5 minutes to use this Systems Optimization
>>> Self Assessment. http://www.accelacomm.com/jaw/sdnl/114/51450054/
>>> _______________________________________________
>>> enlightenment-devel mailing list
>>> enlightenment-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>>>
>>
>>
>
Index: src/lib/elc_ctxpopup.c
===================================================================
--- src/lib/elc_ctxpopup.c	(revision 66135)
+++ src/lib/elc_ctxpopup.c	(working copy)
@@ -64,7 +64,7 @@ static void _adjust_pos_y(Evas_Coord_Point *pos,
                           Evas_Coord_Rectangle *hover_area);
 static Elm_Ctxpopup_Direction _calc_base_geometry(Evas_Object *obj,
                                                   Evas_Coord_Rectangle *rect);
-static void _update_arrow(Evas_Object *obj, Elm_Ctxpopup_Direction dir);
+static void _update_arrow(Evas_Object *obj, Elm_Ctxpopup_Direction dir, Evas_Coord_Rectangle rect);
 static void _sizing_eval(Evas_Object *obj);
 static void _shift_base_by_arrow(Evas_Object *arrow,
                                  Elm_Ctxpopup_Direction dir,
@@ -105,6 +105,10 @@ static void _ctxpopup_hide(void *data,
                            Evas *e,
                            Evas_Object *obj,
                            void *event_info);
+static void _content_resize(void *data,
+                            Evas *e,
+                            Evas_Object *obj,
+                            void *event_info);
 static void _scroller_resize(void *data,
                              Evas *e,
                              Evas_Object *obj,
@@ -504,11 +508,10 @@ _calc_base_geometry(Evas_Object *obj, Evas_Coord_R
 }
 
 static void
-_update_arrow(Evas_Object *obj, Elm_Ctxpopup_Direction dir)
+_update_arrow(Evas_Object *obj, Elm_Ctxpopup_Direction dir, Evas_Coord_Rectangle base_size)
 {
    Evas_Coord x, y;
    Evas_Coord_Rectangle arrow_size;
-   Evas_Coord_Rectangle base_size;
    Widget_Data *wd;
    double drag;
 
@@ -518,8 +521,6 @@ static void
    evas_object_geometry_get(obj, &x, &y, NULL, NULL);
    evas_object_geometry_get(wd->arrow, NULL, NULL, &arrow_size.w,
                             &arrow_size.h);
-   evas_object_geometry_get(wd->base, &base_size.x, &base_size.y,
-                            &base_size.w, &base_size.h);
 
    edje_object_part_unswallow(wd->base, wd->arrow);
 
@@ -677,7 +678,7 @@ _sizing_eval(Evas_Object *obj)
    //Base
    wd->dir = _calc_base_geometry(obj, &rect);
    _show_signal_emit(obj, wd->dir);
-   _update_arrow(obj, wd->dir);
+   _update_arrow(obj, wd->dir, rect);
    _shift_base_by_arrow(wd->arrow, wd->dir, &rect);
 
    //resize scroller according to final size.
@@ -808,6 +809,7 @@ _content_set_hook(Evas_Object *obj, const char *pa
                   Evas_Object *content)
 {
    ELM_CHECK_WIDTYPE(obj, widtype);
+   Evas_Coord min_w = -1, min_h = -1;
 
    Widget_Data *wd;
 
@@ -819,14 +821,28 @@ _content_set_hook(Evas_Object *obj, const char *pa
    if (wd->items) elm_ctxpopup_clear(obj);
    if (wd->content) evas_object_del(wd->content);
 
-   evas_object_event_callback_add(content, EVAS_CALLBACK_DEL, _content_del,
-                                  obj);
+   //Use Box
+   wd->box = elm_box_add(obj);
+   evas_object_size_hint_weight_set(wd->box, EVAS_HINT_EXPAND,
+                                    EVAS_HINT_EXPAND);
+   evas_object_size_hint_weight_set(content, EVAS_HINT_EXPAND,
+                                    EVAS_HINT_EXPAND);
+   evas_object_size_hint_fill_set(content, EVAS_HINT_FILL,
+                                  EVAS_HINT_FILL);
+   evas_object_show(content);
+   evas_object_size_hint_min_get(content, &min_w, &min_h);
+   evas_object_size_hint_min_set(wd->box, min_w, min_h);
+   elm_box_pack_end(wd->box, content);
 
-   elm_widget_sub_object_add(obj, content);
-   edje_object_part_swallow(wd->base, "elm.swallow.content", content);
+   evas_object_event_callback_add(wd->box, EVAS_CALLBACK_RESIZE,
+                                  _content_resize, obj);
+   evas_object_event_callback_add(wd->box, EVAS_CALLBACK_DEL,
+                                  _content_del, obj);
 
+   elm_widget_sub_object_add(obj, wd->box);
+   edje_object_part_swallow(wd->base, "elm.swallow.content", wd->box);
+
    wd->content = content;
-
    wd->dir = ELM_CTXPOPUP_DIRECTION_UNKNOWN;
 
    if (wd->visible)
@@ -845,18 +861,19 @@ _content_unset_hook(Evas_Object *obj, const char *
    if (!wd) return NULL;
 
    content = wd->content;
-   if (!content) return NULL;
+   if (!content || !wd->box) return NULL;
 
-   edje_object_part_unswallow(wd->base, content);
-   elm_widget_sub_object_del(obj, content);
-   evas_object_event_callback_del(content, EVAS_CALLBACK_DEL, _content_del);
+   edje_object_part_unswallow(wd->base, wd->box);
+   elm_widget_sub_object_del(obj, wd->box);
+   evas_object_event_callback_del(wd->box, EVAS_CALLBACK_DEL, _content_del);
    edje_object_signal_emit(wd->base, "elm,state,content,disable", "elm");
 
+   evas_object_del(wd->box);
+   wd->box = NULL;
    wd->content = NULL;
    wd->dir = ELM_CTXPOPUP_DIRECTION_UNKNOWN;
 
    return content;
-
 }
 
 static Evas_Object *
@@ -1027,6 +1044,19 @@ _ctxpopup_hide(void *data __UNUSED__, Evas *e __UN
 }
 
 static void
+_content_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
+                void *event_info __UNUSED__)
+{
+   Widget_Data *wd;
+
+   wd = elm_widget_data_get(data);
+   if (!wd) return;
+
+   elm_box_recalculate(wd->box);
+   _sizing_eval(data);
+}
+
+static void
 _scroller_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj,
                  void *event_info __UNUSED__)
 {
------------------------------------------------------------------------------
Systems Optimization Self Assessment
Improve efficiency and utilization of IT resources. Drive out cost and 
improve service delivery. Take 5 minutes to use this Systems Optimization 
Self Assessment. http://www.accelacomm.com/jaw/sdnl/114/51450054/
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to