jpeg pushed a commit to branch master.

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

commit b2dbf9d9dd52d286e357e988ba55023b7eb9cb13
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Wed Nov 2 15:04:24 2016 +0900

    win: Fix maximized geometry with CSD in X
    
    There is still a geometry issue after un-maximizing.
---
 src/lib/ecore_evas/ecore_evas.c                 |  3 ++
 src/lib/ecore_evas/ecore_evas_private.h         |  1 +
 src/lib/elementary/efl_ui_win.c                 | 41 +++++++++++++------------
 src/modules/ecore_evas/engines/x/ecore_evas_x.c | 23 ++++++++------
 4 files changed, 39 insertions(+), 29 deletions(-)

diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index 4400883..421345d 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -2240,10 +2240,13 @@ EAPI void
 ecore_evas_shadow_geometry_set(Ecore_Evas *ee, int l, int r, int t, int b)
 {
    ECORE_EVAS_CHECK(ee);
+   if ((ee->shadow.l == l) && (ee->shadow.r == r) &&
+       (ee->shadow.t == t) && (ee->shadow.b == b)) return;
    ee->shadow.l = l;
    ee->shadow.r = r;
    ee->shadow.t = t;
    ee->shadow.b = b;
+   ee->shadow.changed = EINA_TRUE;
 }
 
 EAPI void
diff --git a/src/lib/ecore_evas/ecore_evas_private.h 
b/src/lib/ecore_evas/ecore_evas_private.h
index c1ea4c0..5184e94 100644
--- a/src/lib/ecore_evas/ecore_evas_private.h
+++ b/src/lib/ecore_evas/ecore_evas_private.h
@@ -207,6 +207,7 @@ struct _Ecore_Evas
 
    struct {
       int      l, r, t, b;
+      int      changed : 1;
    } shadow;
 
    struct {
diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index 1353292..7b6688d 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -1376,6 +1376,25 @@ _elm_win_opaque_update(Efl_Ui_Win_Data *sd)
 }
 #endif
 
+static inline void
+_elm_win_frame_geometry_adjust(Efl_Ui_Win_Data *sd)
+{
+   int l = 0, t = 0, r = 0, b = 0;
+
+   if (sd->frame_obj && !sd->fullscreen)
+     {
+        int fw, fh, ox, oy, ow, oh;
+        evas_object_geometry_get(sd->frame_obj, NULL, NULL, &fw, &fh);
+        edje_object_part_geometry_get(sd->frame_obj, "elm.spacer.opaque",
+                                      &ox, &oy, &ow, &oh);
+        l = ox;
+        t = oy;
+        r = fw - ow - l;
+        b = fh - oh - t;
+     }
+   ecore_evas_shadow_geometry_set(sd->ee, l, r, t, b);
+}
+
 static void
 _elm_win_frame_obj_update(Efl_Ui_Win_Data *sd)
 {
@@ -1386,6 +1405,7 @@ _elm_win_frame_obj_update(Efl_Ui_Win_Data *sd)
    sd->wl.opaque_dirty = 1;
 #endif
 
+   _elm_win_frame_geometry_adjust(sd);
    if (sd->fullscreen)
      {
 #ifdef HAVE_ELEMENTARY_WL2
@@ -2864,25 +2884,6 @@ super_skip:
    efl_gfx_position_set(efl_super(obj, EFL_CANVAS_GROUP_CLASS), x, y);
 }
 
-static inline void
-_elm_win_frame_geometry_adjust(Efl_Ui_Win_Data *sd)
-{
-   int l = 0, t = 0, r = 0, b = 0;
-
-   if (sd->frame_obj)
-     {
-        int fw, fh, ox, oy, ow, oh;
-        evas_object_geometry_get(sd->frame_obj, NULL, NULL, &fw, &fh);
-        edje_object_part_geometry_get(sd->frame_obj, "elm.spacer.opaque",
-                                      &ox, &oy, &ow, &oh);
-        l = ox;
-        t = oy;
-        r = fw - ow - l;
-        b = fh - oh - t;
-     }
-   ecore_evas_shadow_geometry_set(sd->ee, l, r, t, b);
-}
-
 EOLIAN static void
 _efl_ui_win_efl_gfx_size_set(Eo *obj, Efl_Ui_Win_Data *sd, Evas_Coord w, 
Evas_Coord h)
 {
@@ -3893,7 +3894,7 @@ _elm_win_frame_cb_maximize(void *data,
    if (sd->maximized) value = EINA_FALSE;
    else value = EINA_TRUE;
 
-   TRAP(sd, maximized_set, value);
+   efl_ui_win_maximized_set(sd->obj, value);
 }
 
 static void
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 118401e..2a71070 100644
--- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c
+++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
@@ -1608,6 +1608,18 @@ _ecore_evas_x_event_window_destroy(void *data 
EINA_UNUSED, int type EINA_UNUSED,
    return ECORE_CALLBACK_PASS_ON;
 }
 
+static inline void
+_ecore_evas_x_shadow_update(Ecore_Evas *ee)
+{
+   if (EINA_LIKELY(!ee->shadow.changed)) return;
+
+   int shadow[4] = { ee->shadow.l, ee->shadow.r, ee->shadow.t, ee->shadow.b };
+   ee->shadow.changed = EINA_FALSE;
+   ecore_x_window_prop_property_set(ee->prop.window,
+                                    ECORE_X_ATOM_GTK_FRAME_EXTENTS,
+                                    ECORE_X_ATOM_CARDINAL, 32, shadow, 4);
+}
+
 static Eina_Bool
 _ecore_evas_x_event_window_configure(void *data EINA_UNUSED, int type 
EINA_UNUSED, void *event)
 {
@@ -1638,6 +1650,7 @@ _ecore_evas_x_event_window_configure(void *data 
EINA_UNUSED, int type EINA_UNUSE
           }
      }
 
+   _ecore_evas_x_shadow_update(ee);
    evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
    if (!ECORE_EVAS_PORTRAIT(ee))
      SWAP_INT(fw, fh);
@@ -2170,7 +2183,6 @@ _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;
    int fw = 0, fh = 0;
-   int zero[4] = {0};
 
    evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
    if (ECORE_EVAS_PORTRAIT(ee)) SWAP_INT(fw, fh);
@@ -2198,6 +2210,7 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
           }
      }
 
+   _ecore_evas_x_shadow_update(ee);
    if (edata->direct_resize)
      {
         if ((ee->w == w) && (ee->h == h)) return;
@@ -2234,14 +2247,6 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
         if (changed) edata->configure_reqs++;
         if (ee->prop.window) ecore_x_window_resize(ee->prop.window, w + fw, h 
+ fh);
      }
-
-   if (memcmp(&zero, &ee->shadow, sizeof(zero)))
-     {
-        ecore_x_window_prop_property_set(ee->prop.window,
-                                         ECORE_X_ATOM_GTK_FRAME_EXTENTS,
-                                         ECORE_X_ATOM_CARDINAL, 32,
-                                         &ee->shadow, 4);
-     }
 }
 
 static void

-- 


Reply via email to