From: Rafael Antognolli Date: Wed, 21 Nov 2012 04:21:24 +0000 (+0000) Subject: elm/wayland: Let elementary handle the frame by itself. X-Git-Tag: submit/efl/20131021.015827~1508 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3eed3854feb29fa19f1892f02048355b30e2049e;p=platform%2Fupstream%2Felementary.git elm/wayland: Let elementary handle the frame by itself. Elementary based programs composed of widgets and containers. This means that every widget will be inside a container, or will be the base container, usually set as a resize object of the window. Taking advantage of this structure, we can leave the frame area calculation be done by elementary, not relying anymore on the framespace available from Evas. This commit fixes the problems related to the wayland framespace on Elementary, while the final implementation of the said framespace is not done yet on Ecore and Evas. Later it can be easily changed to use the available infrastructure. SVN revision: 79491 --- diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c index 4442e4b..70934e3 100644 --- a/src/lib/elm_win.c +++ b/src/lib/elm_win.c @@ -56,6 +56,7 @@ struct _Elm_Win_Smart_Data Evas *evas; Evas_Object *parent; /* parent *window* object*/ Evas_Object *img_obj, *frame_obj; + Evas_Coord fx, fy, fw, fh; Eina_List *resize_objs; /* a window may have * *multiple* resize * objects */ @@ -570,12 +571,7 @@ _elm_win_resize_job(void *data) } if (sd->frame_obj) - { - int fw, fh; - - evas_output_framespace_get(sd->evas, NULL, NULL, &fw, &fh); - evas_object_resize(sd->frame_obj, w + fw, h + fh); - } + evas_object_resize(sd->frame_obj, w, h); /* if (sd->img_obj) */ /* { */ @@ -584,8 +580,8 @@ _elm_win_resize_job(void *data) evas_object_resize(ELM_WIDGET_DATA(sd)->obj, w, h); EINA_LIST_FOREACH(sd->resize_objs, l, obj) { - evas_object_move(obj, 0, 0); - evas_object_resize(obj, w, h); + evas_object_move(obj, sd->fx, sd->fy); + evas_object_resize(obj, w - sd->fw, h - sd->fy); } } @@ -1730,7 +1726,8 @@ _elm_win_resize_objects_eval(Evas_Object *obj) if (h < minh) h = minh; if ((maxw >= 0) && (w > maxw)) w = maxw; if ((maxh >= 0) && (h > maxh)) h = maxh; - evas_object_resize(obj, w, h); + evas_object_move(obj, 0, 0); + evas_object_resize(obj, w + sd->fw, h + sd->fh); } static void @@ -2136,9 +2133,18 @@ static void _elm_win_frame_add(Elm_Win_Smart_Data *sd, const char *style) { - evas_output_framespace_set(sd->evas, 0, 22, 0, 26); + Evas_Object *obj = ELM_WIDGET_DATA(sd)->obj; + short layer; + + // FIXME: Don't use hardcoded framespace values, get it from theme + sd->fx = 0; + sd->fy = 22; + sd->fw = 0; + sd->fh = 26; sd->frame_obj = edje_object_add(sd->evas); + layer = evas_object_layer_get(obj); + evas_object_layer_set(sd->frame_obj, layer + 1); elm_widget_theme_object_set (ELM_WIDGET_DATA(sd)->obj, sd->frame_obj, "border", "base", style); @@ -2204,8 +2210,6 @@ _elm_win_frame_del(Elm_Win_Smart_Data *sd) evas_object_del(sd->frame_obj); sd->frame_obj = NULL; } - - evas_output_framespace_set(sd->evas, 0, 0, 0, 0); } #ifdef ELM_DEBUG @@ -2817,8 +2821,8 @@ elm_win_resize_object_add(Evas_Object *obj, _elm_win_on_resize_obj_changed_size_hints, obj); evas_object_geometry_get(obj, NULL, NULL, &w, &h); - evas_object_move(subobj, 0, 0); - evas_object_resize(subobj, w, h); + evas_object_move(subobj, sd->fx, sd->fy); + evas_object_resize(subobj, w - sd->fw, h - sd->fh); _elm_win_resize_objects_eval(obj); }