X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fdesktop.c;h=8554b069602f2dd7f37b31cf238fa8e0b0e854d8;hb=6d2720303d8441525ba2e37c9d87daef568f8cdc;hp=9f472c08506f1f42281bc7658246deb8929f5c73;hpb=8033c46081b93f19843d140e58b527af7abf7a4f;p=src%2Fagl-compositor.git diff --git a/src/desktop.c b/src/desktop.c index 9f472c0..8554b06 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -29,8 +29,10 @@ #include "shared/helpers.h" #include -#include +#include +#ifdef BUILD_XWAYLAND #include +#endif #include "agl-shell-desktop-server-protocol.h" @@ -310,6 +312,7 @@ desktop_surface_removed(struct weston_desktop_surface *dsurface, void *userdata) output->area = output->area_saved; } + /* reset the active surface as well */ if (output && output->active && output->active == surface) { output->active->view->is_mapped = false; @@ -340,6 +343,14 @@ desktop_surface_removed(struct weston_desktop_surface *dsurface, void *userdata) weston_view_destroy(surface->view); } + if (surface->role == IVI_SURFACE_ROLE_TILE) { + ivi_layout_reset_split_surfaces(surface->ivi); + // activate previous when resizing back to give input set + // output active for allowing to resizing again if needed + if (output->previous_active) + ivi_layout_activate_by_surf(output, output->previous_active); + } + /* invalidate agl-shell surfaces so we can re-use them when * binding again */ if (surface->role == IVI_SURFACE_ROLE_PANEL) { @@ -381,7 +392,7 @@ skip_output_asignment: static void desktop_committed(struct weston_desktop_surface *dsurface, - int32_t sx, int32_t sy, void *userdata) + struct weston_coord_surface buf_offset, void *userdata) { struct ivi_compositor *ivi = userdata; struct ivi_surface *surface = @@ -459,7 +470,7 @@ desktop_committed(struct weston_desktop_surface *dsurface, static void desktop_show_window_menu(struct weston_desktop_surface *dsurface, - struct weston_seat *seat, int32_t x, int32_t y, + struct weston_seat *seat, struct weston_coord_surface offset, void *userdata) { /* not supported */ @@ -511,13 +522,13 @@ desktop_minimized_requested(struct weston_desktop_surface *dsurface, static void desktop_set_xwayland_position(struct weston_desktop_surface *dsurface, - int32_t x, int32_t y, void *userdata) + struct weston_coord_global pos, void *userdata) { struct ivi_surface *ivisurf = weston_desktop_surface_get_user_data(dsurface); - ivisurf->xwayland.x = x; - ivisurf->xwayland.y = y; + ivisurf->xwayland.x = pos.c.x; + ivisurf->xwayland.y = pos.c.y; ivisurf->xwayland.is_set = true; } @@ -556,6 +567,7 @@ ivi_shell_destroy(struct wl_listener *listener, void *data) static void transform_handler(struct wl_listener *listener, void *data) { +#ifdef BUILD_XWAYLAND struct weston_surface *surface = data; struct ivi_surface *ivisurf = get_ivi_shell_surface(surface); const struct weston_xwayland_surface_api *api; @@ -580,6 +592,27 @@ transform_handler(struct wl_listener *listener, void *data) y = ivisurf->view->geometry.y; api->send_position(surface, x, y); +#endif +} + +bool +is_shell_surface_xwayland(struct ivi_surface *surf) +{ +#ifdef BUILD_XWAYLAND + const struct weston_xwayland_surface_api *api; + struct ivi_compositor *ivi = surf->ivi; + struct weston_surface *surface; + + api = ivi->xwayland_surface_api; + + if (!api) + return false; + + surface = weston_desktop_surface_get_surface(surf->dsurface); + return api->is_xwayland_surface(surface); +#else + return false; +#endif } int