discomfitor pushed a commit to branch master.

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

commit e382bac1a01a152d32a0f95df7a2ad6b84ae80d4
Author: Derek Foreman <derek.foreman.sams...@gmail.com>
Date:   Wed Aug 8 09:37:29 2018 -0400

    wayland: Fix elementary setting window parents at creation time
    
    Summary:
    We need to pass the entire pointer, not just 32-bits of it.
    
    Fixes a crash with enlightenment sandbox gadgets where
    ecore_wl2_window_alpha_get() is called with an invalid pointer while
    trying to display a pop-up.
    
    Reviewers: zmike, devilhorns
    
    Reviewed By: zmike, devilhorns
    
    Subscribers: devilhorns, cedric, #reviewers, #committers, zmike
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D6775
---
 src/lib/ecore_evas/ecore_evas.c                    | 53 ++++++++++++++++++++--
 src/lib/ecore_evas/ecore_evas_private.h            |  8 ++++
 src/lib/elementary/efl_ui_win.c                    |  7 +--
 .../engines/wayland/ecore_evas_wayland_egl.c       |  2 +-
 .../engines/wayland/ecore_evas_wayland_shm.c       |  2 +-
 5 files changed, 64 insertions(+), 8 deletions(-)

diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index 004896de90..cce53df4e9 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -4,6 +4,7 @@
 
 #define ECORE_EVAS_INTERNAL
 #define EFL_INPUT_EVENT_PROTECTED
+#define IPA_YLNO_ESU_LANRETNI_MLE
 
 #include <stdlib.h>
 #include <string.h>
@@ -4339,14 +4340,16 @@ ecore_evas_wayland_shm_new(const char *disp_name, 
unsigned int parent,
                           int x, int y, int w, int h, Eina_Bool frame)
 {
    Ecore_Evas *ee;
-   Ecore_Evas *(*new)(const char *, unsigned int, int, int, int, int, 
Eina_Bool);
+   Ecore_Evas *(*new)(const char *, Ecore_Window, int, int, int, int, 
Eina_Bool);
    Eina_Module *m = _ecore_evas_engine_load("wayland");
    EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
 
    new = eina_module_symbol_get(m, "ecore_evas_wayland_shm_new_internal");
    EINA_SAFETY_ON_NULL_RETURN_VAL(new, NULL);
 
-   ee = new(disp_name, parent, x, y, w, h, frame);
+   if (parent) ERR("Wayland windows with parents not supported through legacy 
API");
+
+   ee = new(disp_name, 0, x, y, w, h, frame);
    if (!_ecore_evas_cursors_init(ee))
      {
         ecore_evas_free(ee);
@@ -4360,7 +4363,51 @@ ecore_evas_wayland_egl_new(const char *disp_name, 
unsigned int parent,
                           int x, int y, int w, int h, Eina_Bool frame)
 {
    Ecore_Evas *ee;
-   Ecore_Evas *(*new)(const char *, unsigned int, int, int, int, int, 
Eina_Bool);
+   Ecore_Evas *(*new)(const char *, Ecore_Window, int, int, int, int, 
Eina_Bool);
+   Eina_Module *m = _ecore_evas_engine_load("wayland");
+   EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
+
+   new = eina_module_symbol_get(m, "ecore_evas_wayland_egl_new_internal");
+   EINA_SAFETY_ON_NULL_RETURN_VAL(new, NULL);
+
+   if (parent) ERR("Wayland windows with parents not supported through legacy 
API");
+
+   ee = new(disp_name, 0, x, y, w, h, frame);
+   if (!_ecore_evas_cursors_init(ee))
+     {
+        ecore_evas_free(ee);
+        return NULL;
+     }
+   return ee;
+}
+
+Ecore_Evas *
+_wayland_shm_new(const char *disp_name, Ecore_Window parent,
+                 int x, int y, int w, int h, Eina_Bool frame)
+{
+   Ecore_Evas *ee;
+   Ecore_Evas *(*new)(const char *, Ecore_Window, int, int, int, int, 
Eina_Bool);
+   Eina_Module *m = _ecore_evas_engine_load("wayland");
+   EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
+
+   new = eina_module_symbol_get(m, "ecore_evas_wayland_shm_new_internal");
+   EINA_SAFETY_ON_NULL_RETURN_VAL(new, NULL);
+
+   ee = new(disp_name, parent, x, y, w, h, frame);
+   if (!_ecore_evas_cursors_init(ee))
+     {
+        ecore_evas_free(ee);
+        return NULL;
+     }
+   return ee;
+}
+
+Ecore_Evas *
+_wayland_egl_new(const char *disp_name, Ecore_Window parent,
+                 int x, int y, int w, int h, Eina_Bool frame)
+{
+   Ecore_Evas *ee;
+   Ecore_Evas *(*new)(const char *, Ecore_Window, int, int, int, int, 
Eina_Bool);
    Eina_Module *m = _ecore_evas_engine_load("wayland");
    EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
 
diff --git a/src/lib/ecore_evas/ecore_evas_private.h 
b/src/lib/ecore_evas/ecore_evas_private.h
index c419699296..c9f158ee9b 100644
--- a/src/lib/ecore_evas/ecore_evas_private.h
+++ b/src/lib/ecore_evas/ecore_evas_private.h
@@ -490,6 +490,14 @@ EAPI Eina_Bool ecore_evas_render(Ecore_Evas *ee);
 EAPI Evas *ecore_evas_evas_new(Ecore_Evas *ee, int w, int h);
 EAPI void ecore_evas_done(Ecore_Evas *ee, Eina_Bool single_window);
 
+#ifdef IPA_YLNO_ESU_LANRETNI_MLE
+EAPI Ecore_Evas *_wayland_shm_new(const char *disp_name, Ecore_Window parent, 
int x, int y, int w, int h, Eina_Bool frame);
+EAPI Ecore_Evas *_wayland_egl_new(const char *disp_name, Ecore_Window parent, 
int x, int y, int w, int h, Eina_Bool frame);
+#else
+#define _wayland_shm_new DONT_USE_INTERNAL_API
+#define _wayland_egl_new DONT_USE_INTERNAL_API
+#endif
+
 static inline Eina_Bool
 ecore_evas_render_prepare(Ecore_Evas *ee)
 {
diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index ebab8fecd0..9a2a9ab1ba 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -16,6 +16,7 @@
 #define EFL_CANVAS_SCENE_BETA
 #define EFL_UI_WIDGET_FOCUS_MANAGER_PROTECTED
 #define EFL_PART_PROTECTED
+#define IPA_YLNO_ESU_LANRETNI_MLE
 
 #include <Elementary.h>
 #include <Elementary_Cursor.h>
@@ -4953,7 +4954,7 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, 
const char *name, Efl_U
    Eina_Stringshare *accel = NULL;
    Eina_Bool is_gl_accel;
    int i, p = 0;
-   int parent_id = 0;
+   Ecore_Window parent_id = 0;
 
    Efl_Ui_Win_Data tmp_sd;
 
@@ -5254,9 +5255,9 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, 
const char *name, Efl_U
                     tmp_sd.ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 0, 0);
                }
              else if (!strcmp(enginelist[i], ELM_WAYLAND_SHM))
-               tmp_sd.ee = ecore_evas_wayland_shm_new(NULL, parent_id, 0, 0, 
0, 0, 0);
+               tmp_sd.ee = _wayland_shm_new(NULL, parent_id, 0, 0, 0, 0, 0);
              else if (!strcmp(enginelist[i], ELM_WAYLAND_EGL))
-               tmp_sd.ee = ecore_evas_wayland_egl_new(NULL, parent_id, 0, 0, 
0, 0, 0);
+               tmp_sd.ee = _wayland_egl_new(NULL, parent_id, 0, 0, 0, 0, 0);
              else if (!strcmp(enginelist[i], ELM_SOFTWARE_WIN32))
                tmp_sd.ee = ecore_evas_software_gdi_new(NULL, 0, 0, 1, 1);
              else if (!strcmp(enginelist[i], ELM_SOFTWARE_DDRAW))
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c 
b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
index 0ecd868975..8cfd1b180b 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
@@ -29,7 +29,7 @@
 
 /* external functions */
 EAPI Ecore_Evas *
-ecore_evas_wayland_egl_new_internal(const char *disp_name, unsigned int 
parent, int x, int y, int w, int h, Eina_Bool frame)
+ecore_evas_wayland_egl_new_internal(const char *disp_name, Ecore_Window 
parent, int x, int y, int w, int h, Eina_Bool frame)
 {
    LOGFN(__FILE__, __LINE__, __FUNCTION__);
 
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c 
b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
index b01d02bf18..c722a07ab6 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
@@ -29,7 +29,7 @@
 
 /* external functions */
 EAPI Ecore_Evas *
-ecore_evas_wayland_shm_new_internal(const char *disp_name, unsigned int 
parent, int x, int y, int w, int h, Eina_Bool frame)
+ecore_evas_wayland_shm_new_internal(const char *disp_name, Ecore_Window 
parent, int x, int y, int w, int h, Eina_Bool frame)
 {
    LOGFN(__FILE__, __LINE__, __FUNCTION__);
 

-- 


Reply via email to