discomfitor pushed a commit to branch efl-1.20.

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

commit 2d079fb112ae0b2aff60b3ba6f40a542084f6410
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Fri Aug 11 18:43:15 2017 -0400

    wayland: fix xdg-shell popup windows
    
    @fix
---
 src/lib/ecore_wl2/ecore_wl2_window.c               | 55 +++++++++++++---------
 src/lib/elementary/efl_ui_win.c                    | 12 +++--
 .../engines/wayland/ecore_evas_wayland_common.c    |  1 +
 3 files changed, 44 insertions(+), 24 deletions(-)

diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c 
b/src/lib/ecore_wl2/ecore_wl2_window.c
index 78f6129af0..caa2a7b3de 100644
--- a/src/lib/ecore_wl2/ecore_wl2_window.c
+++ b/src/lib/ecore_wl2/ecore_wl2_window.c
@@ -296,7 +296,6 @@ _ecore_wl2_window_zxdg_popup_create(Ecore_Wl2_Window *win)
    struct zxdg_positioner_v6 *pos;
 
    EINA_SAFETY_ON_NULL_RETURN(win->parent);
-   EINA_SAFETY_ON_NULL_RETURN(win->grab);
    pos = zxdg_shell_v6_create_positioner(win->display->wl.zxdg_shell);
    if (!pos) return;
 
@@ -312,8 +311,9 @@ _ecore_wl2_window_zxdg_popup_create(Ecore_Wl2_Window *win)
                                win->parent->zxdg_surface, pos);
 
    zxdg_positioner_v6_destroy(pos);
-   zxdg_popup_v6_grab(win->zxdg_popup, win->grab->wl.seat,
-                      wl_display_get_serial(win->display->wl.display));
+   if (win->grab)
+     zxdg_popup_v6_grab(win->zxdg_popup, win->grab->wl.seat,
+                        wl_display_get_serial(win->display->wl.display));
    zxdg_popup_v6_set_user_data(win->zxdg_popup, win);
    zxdg_popup_v6_add_listener(win->zxdg_popup, &_zxdg_popup_listener, win);
 
@@ -448,30 +448,43 @@ _ecore_wl2_window_shell_surface_init(Ecore_Wl2_Window 
*window)
         zxdg_surface_v6_add_listener(window->zxdg_surface,
                                      &_zxdg_surface_listener, window);
 
-        window->zxdg_toplevel =
-          zxdg_surface_v6_get_toplevel(window->zxdg_surface);
-        zxdg_toplevel_v6_set_user_data(window->zxdg_toplevel, window);
-        zxdg_toplevel_v6_add_listener(window->zxdg_toplevel,
-                                      &_zxdg_toplevel_listener, window);
+        window->zxdg_configure_ack = zxdg_surface_v6_ack_configure;
+        window->pending.configure = EINA_TRUE;
 
-        if (window->title)
-          zxdg_toplevel_v6_set_title(window->zxdg_toplevel, window->title);
-        if (window->class)
-          zxdg_toplevel_v6_set_app_id(window->zxdg_toplevel, window->class);
+        if (window->type == ECORE_WL2_WINDOW_TYPE_MENU)
+          _ecore_wl2_window_zxdg_popup_create(window);
+        else
+          {
+             window->zxdg_toplevel =
+               zxdg_surface_v6_get_toplevel(window->zxdg_surface);
+             zxdg_toplevel_v6_set_user_data(window->zxdg_toplevel, window);
+             zxdg_toplevel_v6_add_listener(window->zxdg_toplevel,
+                                           &_zxdg_toplevel_listener, window);
 
-        window->zxdg_set_min_size = zxdg_toplevel_v6_set_min_size;
-        window->zxdg_set_max_size = zxdg_toplevel_v6_set_max_size;
+             if (window->title)
+               zxdg_toplevel_v6_set_title(window->zxdg_toplevel, 
window->title);
+             if (window->class)
+               zxdg_toplevel_v6_set_app_id(window->zxdg_toplevel, 
window->class);
 
-        window->zxdg_configure_ack = zxdg_surface_v6_ack_configure;
-        _ecore_wl2_window_type_set(window);
+             window->zxdg_set_min_size = zxdg_toplevel_v6_set_min_size;
+             window->zxdg_set_max_size = zxdg_toplevel_v6_set_max_size;
 
-        window->pending.configure = EINA_TRUE;
+             {
+                struct zxdg_toplevel_v6 *ptop = NULL;
 
-        if (window->maximized)
-          zxdg_toplevel_v6_set_maximized(window->zxdg_toplevel);
+                if (window->parent)
+                  ptop = window->parent->zxdg_toplevel;
 
-        if (window->fullscreen)
-          zxdg_toplevel_v6_set_fullscreen(window->zxdg_toplevel, NULL);
+                if (ptop)
+                  zxdg_toplevel_v6_set_parent(window->zxdg_toplevel, ptop);
+             }
+
+             if (window->maximized)
+               zxdg_toplevel_v6_set_maximized(window->zxdg_toplevel);
+
+             if (window->fullscreen)
+               zxdg_toplevel_v6_set_fullscreen(window->zxdg_toplevel, NULL);
+          }
 
         wl_surface_commit(window->surface);
      }
diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index 31b3f203af..306da95497 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -4437,7 +4437,11 @@ _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, 
Eina_Bool force_emit, Eina_Bool
      }
 
    if ((sd->type == ELM_WIN_INLINED_IMAGE) ||
-       (sd->type == ELM_WIN_SOCKET_IMAGE))
+       (sd->type == ELM_WIN_SOCKET_IMAGE) ||
+       (sd->type == ELM_WIN_TOOLTIP) ||
+       (sd->type == ELM_WIN_COMBO) ||
+       (sd->type == ELM_WIN_MENU) ||
+       (sd->type == ELM_WIN_POPUP_MENU))
      {
         sd->csd.need_shadow = EINA_FALSE;
         sd->csd.need_borderless = EINA_TRUE;
@@ -4656,6 +4660,7 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, 
const char *name, Elm_W
    Eina_Stringshare *accel = NULL;
    Eina_Bool is_gl_accel;
    int i, p = 0;
+   int parent_id = 0;
 
    Efl_Ui_Win_Data tmp_sd;
 
@@ -4922,6 +4927,7 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, 
const char *name, Elm_W
 #endif
                }
           }
+        if (parent) parent_id = elm_win_window_id_get(parent);
         for (i = 0; i < p; i++)
           {
              if (!strcmp(enginelist[i], ELM_SOFTWARE_X11))
@@ -4957,9 +4963,9 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, 
const char *name, Elm_W
                     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, 0, 0, 0, 0, 0, 0);
+               tmp_sd.ee = ecore_evas_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, 0, 0, 0, 0, 0, 0);
+               tmp_sd.ee = ecore_evas_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_common.c 
b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
index 417c6e9485..579b5f023c 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
@@ -1987,6 +1987,7 @@ _ecore_evas_wl_common_show(Ecore_Evas *ee)
 
         evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
 
+        ecore_wl2_window_geometry_set(wdata->win, 0, 0, ee->w, ee->h);
         ecore_wl2_window_show(wdata->win);
         ecore_wl2_window_alpha_set(wdata->win, ee->alpha);
 

-- 


Reply via email to