jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=74187ff4255b42e19617da66cb5627248c12b73e

commit 74187ff4255b42e19617da66cb5627248c12b73e
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Tue Dec 6 15:19:03 2016 +0900

    win: Fix sizing issues with new windows
    
    This fixes sizing issues in EDI when opening a new window (not
    the splash screen). This patch is quite brute force in the way
    it pushes recalc.
---
 src/lib/elementary/efl_ui_win.c | 34 ++++++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index 7bbf379..4d84a63 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -99,8 +99,6 @@ struct _Efl_Ui_Win_Data
 #endif
    Eina_Stringshare *teamwork_uri;
 
-   Eina_Bool                     deferred_resize_job;
-
    Efl_Ui_Win_Type                   type;
    Efl_Ui_Win_Keyboard_Mode          kbdmode;
    Elm_Win_Indicator_Mode         indmode;
@@ -235,6 +233,8 @@ struct _Efl_Ui_Win_Data
       Eina_Bool    bg_must_swallow_init : 1;
    } legacy;
 
+   Eina_Bool    first_draw : 1;
+   Eina_Bool    deferred_resize_job : 1;
    Eina_Bool    urgent : 1;
    Eina_Bool    modal : 1;
    Eina_Bool    demand_attention : 1;
@@ -340,6 +340,7 @@ static void _elm_win_frame_style_update(Efl_Ui_Win_Data 
*sd, Eina_Bool force_emi
 static inline void _elm_win_need_frame_adjust(Efl_Ui_Win_Data *sd, const char 
*engine);
 static void _elm_win_resize_objects_eval(Evas_Object *obj);
 static void _elm_win_opaque_update(Efl_Ui_Win_Data *sd, Eina_Bool force_alpha);
+static void _elm_win_frame_obj_update(Efl_Ui_Win_Data *sd);
 
 #ifdef HAVE_ELEMENTARY_X
 static void _elm_win_xwin_update(Efl_Ui_Win_Data *sd);
@@ -914,6 +915,11 @@ _elm_win_pre_render(Ecore_Evas *ee)
    if (!sd) return;
 
    _elm_win_throttle_ok = EINA_TRUE;
+   if (!sd->first_draw)
+     {
+        sd->first_draw = EINA_TRUE;
+        _elm_win_frame_obj_update(sd);
+     }
    if (sd->deferred_resize_job)
      _elm_win_resize_job(sd->obj);
 }
@@ -1415,18 +1421,34 @@ _elm_win_frame_geometry_adjust(Efl_Ui_Win_Data *sd)
    ecore_evas_shadow_geometry_set(sd->ee, l, r, t, b);
 }
 
+static inline Eina_Bool
+_elm_win_framespace_set(Efl_Ui_Win_Data *sd, int x, int y, int w, int h)
+{
+   int fx, fy, fw, fh;
+
+   evas_output_framespace_get(sd->evas, &fx, &fy, &fw, &fh);
+   evas_output_framespace_set(sd->evas, x, y, w, h);
+
+   // return true if framespace geometry changed
+   return ((fx != x) || (fy != y) || (fw != w) || (fh != h));
+}
+
 static void
 _elm_win_frame_obj_update(Efl_Ui_Win_Data *sd)
 {
-   int fx, fy, fw, fh;
    int ox, oy, ow, oh;
+   int cx, cy, cw, ch;
 
    if (!sd->frame_obj) return;
    _elm_win_opaque_dirty(sd);
    _elm_win_frame_geometry_adjust(sd);
-   evas_object_geometry_get(sd->frame_obj, &fx, &fy, &fw, &fh);
-   edje_object_part_geometry_get(sd->frame_obj, "elm.spacer.content", &ox, 
&oy, &ow, &oh);
-   evas_output_framespace_set(sd->evas, ox, oy, fw - ow, fh - oh);
+   evas_object_geometry_get(sd->frame_obj, &ox, &oy, &ow, &oh);
+   edje_object_part_geometry_get(sd->frame_obj, "elm.spacer.content", &cx, 
&cy, &cw, &ch);
+   if (_elm_win_framespace_set(sd, cx, cy, ow - cw, oh - ch))
+     {
+        _elm_win_resize_objects_eval(sd->obj);
+        sd->deferred_resize_job = EINA_TRUE;
+     }
 }
 
 static void

-- 


Reply via email to