[*] ecore evas util can send resize request even though X relpy
authorJiyoun Park <jy0703.park@samsung.com>
Tue, 25 Oct 2011 07:44:54 +0000 (16:44 +0900)
committerJiyoun Park <jy0703.park@samsung.com>
Tue, 25 Oct 2011 07:44:54 +0000 (16:44 +0900)
This code related with xresize request,
currently ecore evas cannot send resize request before X reply

Change-Id: Ic984486bd718ff5538697ded212095d5a4bfa19b

src/lib/ecore_evas/ecore_evas_private.h
src/lib/ecore_evas/ecore_evas_util.c
src/lib/ecore_evas/ecore_evas_x.c

index 93948a7..62f43f3 100644 (file)
@@ -208,6 +208,7 @@ struct _Ecore_Evas_Engine
       unsigned char  sync_began : 1;
       unsigned char  sync_cancel : 1;
       unsigned char  netwm_sync_set : 1;
+      unsigned char  configure_coming : 1;
       struct {
           unsigned char modal : 1;
           unsigned char sticky : 1;
index 96ccae3..12a0cc5 100644 (file)
@@ -122,7 +122,7 @@ _ecore_evas_obj_callback_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj
 
    evas_object_geometry_get(obj, NULL, NULL, &ow, &oh);
    ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
-   if ((w != ow) || (h != oh)) /* avoid recursion on ecore_evas_resize side */
+   /*if ((w != ow) || (h != oh)) /* avoid recursion on ecore_evas_resize side */
      ecore_evas_resize(ee, ow, oh);
 }
 
index dd7314b..01120ff 100644 (file)
@@ -917,6 +917,8 @@ _ecore_evas_x_event_window_configure(void *data __UNUSED__, int type __UNUSED__,
    if (e->win != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
    if (ee->engine.x.direct_resize) return ECORE_CALLBACK_PASS_ON;
 
+   ee->engine.x.configure_coming = 0;
+
    if ((e->from_wm) || (ee->prop.override))
      {
         if ((ee->x != e->x) || (ee->y != e->y))
@@ -1302,8 +1304,10 @@ _ecore_evas_x_move(Ecore_Evas *ee, int x, int y)
      }
    else
      {
-        if ((ee->x != x) || (ee->y != y))
+        if (((ee->x != x) || (ee->y != y)) ||
+            (ee->engine.x.configure_coming))
           {
+             ee->engine.x.configure_coming = 1;
              if (!ee->engine.x.managed)
                {
                   ee->x = x;
@@ -1372,8 +1376,12 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
              if (ee->func.fn_resize) ee->func.fn_resize(ee);
           }
      }
-   else if ((ee->w != w) || (ee->h != h))
-     ecore_x_window_resize(ee->prop.window, w, h);
+   else if (((ee->w != w) || (ee->h != h)) ||
+            (ee->engine.x.configure_coming))
+     {
+        ee->engine.x.configure_coming = 1;
+        ecore_x_window_resize(ee->prop.window, w, h);
+     }
 }
 
 static void
@@ -1432,8 +1440,10 @@ _ecore_evas_x_move_resize(Ecore_Evas *ee, int x, int y, int w, int h)
                }
           }
      }
-   else
+   else if (((ee->w != w) || (ee->h != h) || (ee->x != x) || (ee->y != y)) ||
+            (ee->engine.x.configure_coming))
      {
+        ee->engine.x.configure_coming = 1;
         ecore_x_window_move_resize(ee->prop.window, x, y, w, h);
         if (!ee->engine.x.managed)
           {
@@ -1463,6 +1473,7 @@ _ecore_evas_x_rotation_set_internal(Ecore_Evas *ee, int rotation, int resize,
 
         if (!resize)
           {
+             ee->engine.x.configure_coming = 1;
              if (!ee->prop.fullscreen)
                {
                   ecore_x_window_resize(ee->prop.window, ee->req.h, ee->req.w);