diff options
author | Mike Blumenkrantz <zmike@osg.samsung.com> | 2017-08-11 18:43:15 -0400 |
---|---|---|
committer | Mike Blumenkrantz <zmike@osg.samsung.com> | 2017-08-11 18:43:12 -0400 |
commit | 398ffe40a34eaab5e572b0eec47e4993c6238431 (patch) | |
tree | afcaf289a14892f72de4bc430c594b8477f771bd | |
parent | cb57ea7587e7d00aa429e19996129c48619d3f11 (diff) | |
download | efl-398ffe40a34eaab5e572b0eec47e4993c6238431.tar.gz |
wayland: fix xdg-shell popup windows
@fix
-rw-r--r-- | src/lib/ecore_wl2/ecore_wl2_window.c | 69 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_win.c | 12 | ||||
-rw-r--r-- | src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c | 1 |
3 files changed, 50 insertions, 32 deletions
diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c b/src/lib/ecore_wl2/ecore_wl2_window.c index bb5196f474..b7b4450afc 100644 --- a/src/lib/ecore_wl2/ecore_wl2_window.c +++ b/src/lib/ecore_wl2/ecore_wl2_window.c @@ -297,7 +297,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; @@ -313,8 +312,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); @@ -365,8 +365,6 @@ _ecore_wl2_window_type_set(Ecore_Wl2_Window *win) if (ptop) zxdg_toplevel_v6_set_parent(win->zxdg_toplevel, ptop); } - else if (win->xdg_surface) - xdg_surface_set_parent(win->xdg_surface, NULL); break; default: break; @@ -449,33 +447,46 @@ _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); - - 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_set_min_size = zxdg_toplevel_v6_set_min_size; - window->zxdg_set_max_size = zxdg_toplevel_v6_set_max_size; - window->zxdg_configure_ack = zxdg_surface_v6_ack_configure; - _ecore_wl2_window_type_set(window); - window->pending.configure = EINA_TRUE; - if (window->maximized) - zxdg_toplevel_v6_set_maximized(window->zxdg_toplevel); - - if (window->fullscreen) - zxdg_toplevel_v6_set_fullscreen(window->zxdg_toplevel, NULL); - if (window->aspect.set && window->display->wl.efl_hints) - efl_hints_set_aspect(window->display->wl.efl_hints, window->zxdg_toplevel, - window->aspect.w, window->aspect.h, window->aspect.aspect); + 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); + + 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_set_min_size = zxdg_toplevel_v6_set_min_size; + window->zxdg_set_max_size = zxdg_toplevel_v6_set_max_size; + + { + struct zxdg_toplevel_v6 *ptop = NULL; + + if (window->parent) + ptop = window->parent->zxdg_toplevel; + + 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); + if (window->aspect.set && window->display->wl.efl_hints) + efl_hints_set_aspect(window->display->wl.efl_hints, window->zxdg_toplevel, + window->aspect.w, window->aspect.h, window->aspect.aspect); + } wl_surface_commit(window->surface); } diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 3643a3d6a6..e08ebcd9f6 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -4433,7 +4433,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; @@ -4652,6 +4656,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; @@ -4918,6 +4923,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)) @@ -4953,9 +4959,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 970c5f39b6..42afaee73b 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 @@ -1985,6 +1985,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); |