discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=6149fd7a0a9ef3f9495270cf1c4ab7727a30f21c

commit 6149fd7a0a9ef3f9495270cf1c4ab7727a30f21c
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Thu Dec 10 15:53:31 2015 -0500

    win: redo resize deferral to trigger during pre render
    
    using a job results in the resize occurring after render in the same loop,
    meaning that anything which depends on resizes to happen in a certain
    time will not have synchronized display vs toolkit geometries
    
    fixes all issues related to wayland window geometries
---
 src/lib/elm_win.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c
index c9729ce..0012445 100644
--- a/src/lib/elm_win.c
+++ b/src/lib/elm_win.c
@@ -130,7 +130,7 @@ struct _Elm_Win_Data
    } win32;
 #endif
 
-   Ecore_Job                     *deferred_resize_job;
+   Eina_Bool                     deferred_resize_job;
    Ecore_Job                     *deferred_child_eval_job;
 
    Elm_Win_Type                   type;
@@ -824,7 +824,7 @@ _elm_win_resize_job(void *data)
    ELM_WIN_DATA_GET(data, sd);
    int w, h;
 
-   sd->deferred_resize_job = NULL;
+   sd->deferred_resize_job = EINA_FALSE;
    ecore_evas_request_geometry_get(sd->ee, NULL, NULL, &w, &h);
    if (sd->constrain)
      {
@@ -848,13 +848,21 @@ _elm_win_resize_job(void *data)
 }
 
 static void
+_elm_win_pre_render(Ecore_Evas *ee)
+{
+   Elm_Win_Data *sd = _elm_win_associate_get(ee);
+
+   if (sd->deferred_resize_job)
+     _elm_win_resize_job(sd->obj);
+}
+
+static void
 _elm_win_resize(Ecore_Evas *ee)
 {
    Elm_Win_Data *sd = _elm_win_associate_get(ee);
    if (!sd) return;
 
-   ecore_job_del(sd->deferred_resize_job);
-   sd->deferred_resize_job = ecore_job_add(_elm_win_resize_job, sd->obj);
+   sd->deferred_resize_job = EINA_TRUE;
 }
 
 static void
@@ -1945,7 +1953,6 @@ _elm_win_evas_object_smart_del(Eo *obj, Elm_Win_Data *sd)
         ecore_evas_callback_resize_set(sd->ee, NULL);
      }
 
-   ecore_job_del(sd->deferred_resize_job);
    ecore_job_del(sd->deferred_child_eval_job);
    eina_stringshare_del(sd->shot.info);
    ecore_timer_del(sd->shot.timer);
@@ -1992,6 +1999,7 @@ _elm_win_evas_object_smart_del(Eo *obj, Elm_Win_Data *sd)
    ecore_evas_callback_focus_out_set(sd->ee, NULL);
    ecore_evas_callback_move_set(sd->ee, NULL);
    ecore_evas_callback_state_change_set(sd->ee, NULL);
+   ecore_evas_callback_pre_render_set(sd->ee, NULL);
 
    eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
 
@@ -3856,6 +3864,7 @@ _elm_win_finalize_internal(Eo *obj, Elm_Win_Data *sd, 
const char *name, Elm_Win_
    ecore_evas_callback_focus_out_set(sd->ee, _elm_win_focus_out);
    ecore_evas_callback_resize_set(sd->ee, _elm_win_resize);
    ecore_evas_callback_move_set(sd->ee, _elm_win_move);
+   ecore_evas_callback_pre_render_set(sd->ee, _elm_win_pre_render);
    if (type != ELM_WIN_FAKE)
      ecore_evas_callback_mouse_in_set(sd->ee, _elm_win_mouse_in);
    evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, _elm_win_cb_hide, 
NULL);

-- 


Reply via email to