devilhorns pushed a commit to branch master.

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

commit a3cf0d3a54f54cccfb48dc2234dada147c30f419
Author: Chris Michael <[email protected]>
Date:   Thu Jun 15 11:39:27 2017 -0400

    ecore-evas-wayland: Add support for setting window stack mode
    
    This patch adds support for updating ecore_wl2_window stack mode when
    the ecore_evas_layer_set is called.
    
    "#divergence"
    
    @feature
    
    Signed-off-by: Chris Michael <[email protected]>
---
 .../engines/wayland/ecore_evas_wayland_common.c    | 41 ++++++++++++++++++++++
 .../engines/wayland/ecore_evas_wayland_private.h   |  6 ++++
 2 files changed, 47 insertions(+)

diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c 
b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
index 16a6c98876..54462a6eb6 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
@@ -1456,6 +1456,46 @@ _ecore_evas_wl_common_object_cursor_set(Ecore_Evas *ee, 
Evas_Object *obj, int la
 }
 
 static void
+_ecore_evas_wl_common_layer_update(Ecore_Evas *ee)
+{
+   Ecore_Evas_Engine_Wl_Data *wdata;
+
+   wdata = ee->engine.data;
+   if (!wdata) return;
+
+   if (ee->prop.layer < 3)
+     {
+        if ((wdata->stack.above) || (!wdata->stack.below))
+          {
+             wdata->stack.above = EINA_FALSE;
+             wdata->stack.below = EINA_TRUE;
+             ecore_wl2_window_stack_mode_set(wdata->win,
+                                             ECORE_WL2_WINDOW_STACK_BELOW);
+          }
+     }
+   else if (ee->prop.layer > 5)
+     {
+        if ((!wdata->stack.above) || (wdata->stack.below))
+          {
+             wdata->stack.above = EINA_TRUE;
+             wdata->stack.below = EINA_FALSE;
+             ecore_wl2_window_stack_mode_set(wdata->win,
+                                             ECORE_WL2_WINDOW_STACK_ABOVE);
+          }
+     }
+   else
+     {
+        if ((wdata->stack.above) || (wdata->stack.below))
+          {
+             wdata->stack.above = EINA_FALSE;
+             wdata->stack.below = EINA_FALSE;
+             ecore_wl2_window_stack_mode_set(wdata->win,
+                                             ECORE_WL2_WINDOW_STACK_NONE);
+          }
+     }
+}
+
+static void
 _ecore_evas_wl_common_layer_set(Ecore_Evas *ee, int layer)
 {
    LOGFN(__FILE__, __LINE__, __FUNCTION__);
@@ -1465,6 +1505,7 @@ _ecore_evas_wl_common_layer_set(Ecore_Evas *ee, int layer)
    if (layer < 1) layer = 1;
    else if (layer > 255) layer = 255;
    ee->prop.layer = layer;
+   _ecore_evas_wl_common_layer_update(ee);
    _ecore_evas_wl_common_state_update(ee);
 }
 
diff --git 
a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h 
b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
index e6e3f3e04c..5aa319c840 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
@@ -57,6 +57,12 @@ struct _Ecore_Evas_Engine_Wl_Data
         Ecore_Job *manual_mode_job;
      } wm_rot;
 
+   struct
+     {
+        Eina_Bool above : 1;
+        Eina_Bool below : 1;
+     } stack;
+
    Eina_Bool dragging : 1;
    Eina_Bool sync_done : 1;
    Eina_Bool defer_show : 1;

-- 


Reply via email to