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; --
