raster pushed a commit to branch master.

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

commit ab31424ea612adf7eb00dc3b9bdf8df7757f0414
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Sat Feb 20 23:09:03 2016 +0900

    ecore evas: fix configure request queue count to only count changes
    
    we counted more requests outstanding than actually existed for x11 as
    we sometimes sized to the SAME size or position. this keeps that
    number more correct only incremeting outstanding count if we change.
    
    @fix
---
 src/modules/ecore_evas/engines/x/ecore_evas_x.c | 50 +++++++++++++++++--------
 1 file changed, 35 insertions(+), 15 deletions(-)

diff --git a/src/modules/ecore_evas/engines/x/ecore_evas_x.c 
b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
index 418cdaa..4ecac62 100644
--- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c
+++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
@@ -1578,9 +1578,11 @@ _ecore_evas_x_event_window_configure(void *data 
EINA_UNUSED, int type EINA_UNUSE
    if (e->win != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
    if (edata->direct_resize) return ECORE_CALLBACK_PASS_ON;
 
+   printf("REQS OUTSTANDING: %i\n", edata->configure_reqs);
    if (edata->configure_reqs > 0) edata->configure_reqs--;
 
    edata->configure_coming = 0;
+   printf("CONFIG EV: %ix%i from wm: %i\n", e->w, e->h, (int)e->from_wm);
    if ((e->from_wm) || (ee->prop.override))
      {
         if ((ee->x != e->x) || (ee->y != e->y))
@@ -1631,6 +1633,7 @@ _ecore_evas_x_event_window_configure(void *data 
EINA_UNUSED, int type EINA_UNUSE
              ee->expecting_resize.w = 0;
              ee->expecting_resize.h = 0;
           }
+        printf("  RESIZE CB: %ix%i\n", e->w, e->h);
         if (ee->func.fn_resize) ee->func.fn_resize(ee);
 
         if (ee->prop.wm_rot.supported)
@@ -2033,9 +2036,15 @@ static void
 _ecore_evas_x_move(Ecore_Evas *ee, int x, int y)
 {
    Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
+   Eina_Bool changed = EINA_FALSE;
+
+   if ((ee->req.x != x) || (ee->req.y != y))
+     {
+        changed = EINA_TRUE;
+        ee->req.x = x;
+        ee->req.y = y;
+     }
 
-   ee->req.x = x;
-   ee->req.y = y;
    if (edata->direct_resize)
      {
         if (!edata->managed)
@@ -2044,7 +2053,7 @@ _ecore_evas_x_move(Ecore_Evas *ee, int x, int y)
                {
                   ee->x = x;
                   ee->y = y;
-                  edata->configure_reqs++;
+                  if (changed) edata->configure_reqs++;
                   ecore_x_window_move(ee->prop.window, x, y);
                   if (!ee->should_be_visible)
                     {
@@ -2067,7 +2076,7 @@ _ecore_evas_x_move(Ecore_Evas *ee, int x, int y)
                   ee->x = x;
                   ee->y = y;
                }
-             edata->configure_reqs++;
+             if (changed) edata->configure_reqs++;
              ecore_x_window_move(ee->prop.window, x, y);
           }
         if (!ee->should_be_visible)
@@ -2102,9 +2111,14 @@ static void
 _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
 {
    Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
+   Eina_Bool changed = EINA_FALSE;
 
-   ee->req.w = w;
-   ee->req.h = h;
+   if ((ee->req.w != w) || (ee->req.h != h))
+     {
+        changed = EINA_TRUE;
+        ee->req.w = w;
+        ee->req.h = h;
+     }
 
    /* check for valid property window
     * 
@@ -2126,7 +2140,7 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
           {
              ee->w = w;
              ee->h = h;
-             edata->configure_reqs++;
+             if (changed) edata->configure_reqs++;
              if (ee->prop.window) ecore_x_window_resize(ee->prop.window, w, h);
              if (ECORE_EVAS_PORTRAIT(ee))
                {
@@ -2154,7 +2168,7 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
    else
      {
         edata->configure_coming = 1;
-        edata->configure_reqs++;
+        if (changed) edata->configure_reqs++;
         if (ee->prop.window) ecore_x_window_resize(ee->prop.window, w, h);
      }
 }
@@ -2163,11 +2177,17 @@ static void
 _ecore_evas_x_move_resize(Ecore_Evas *ee, int x, int y, int w, int h)
 {
    Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
+   Eina_Bool changed = EINA_FALSE;
 
-   ee->req.x = x;
-   ee->req.y = y;
-   ee->req.w = w;
-   ee->req.h = h;
+   if ((ee->req.x != x) || (ee->req.y != y) ||
+       (ee->req.w != w) || (ee->req.h != h))
+     {
+        changed = EINA_TRUE;
+        ee->req.x = x;
+        ee->req.y = y;
+        ee->req.w = w;
+        ee->req.h = h;
+     }
 
    if (edata->direct_resize)
      {
@@ -2180,7 +2200,7 @@ _ecore_evas_x_move_resize(Ecore_Evas *ee, int x, int y, 
int w, int h)
                {
                   if ((x != ee->x) || (y != ee->y)) change_pos = 1;
                }
-             edata->configure_reqs++;
+             if (changed) edata->configure_reqs++;
              ecore_x_window_move_resize(ee->prop.window, x, y, w, h);
              if (!edata->managed)
                {
@@ -2224,7 +2244,7 @@ _ecore_evas_x_move_resize(Ecore_Evas *ee, int x, int y, 
int w, int h)
         if ((ee->x != x) || (ee->y != y) || (edata->configure_coming))
           {
              edata->configure_coming = 1;
-             edata->configure_reqs++;
+             if (changed) edata->configure_reqs++;
              ecore_x_window_move_resize(ee->prop.window, x, y, w, h);
              if (!edata->managed)
                {
@@ -2235,7 +2255,7 @@ _ecore_evas_x_move_resize(Ecore_Evas *ee, int x, int y, 
int w, int h)
         else
           {
              edata->configure_coming = 1;
-             edata->configure_reqs++;
+             if (changed) edata->configure_reqs++;
              if (ee->prop.window) ecore_x_window_resize(ee->prop.window, w, h);
           }
      }

-- 


Reply via email to