mirror of
https://gitlab.freedesktop.org/wayland/weston
synced 2024-10-06 19:19:52 +00:00
xwm: update override-redirect surface's position upon configure_notify
When we receive configure_notify we should update the surface's position by calling xwayland_api->set_xwayland(). Otherwise some surfaces like dnd surfaces from xwayland views are "stuck" at one place. When setting XWAYLAND state though we should always call view_set_position(), not just the first time we set this state. Signed-off-by: Ilia Bozhinov <ammen99@gmail.com> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
This commit is contained in:
parent
749637a8a3
commit
3e5303daf4
|
@ -112,7 +112,6 @@ weston_desktop_xwayland_surface_change_state(struct weston_desktop_xwayland_surf
|
||||||
weston_desktop_surface_create_view(surface->surface);
|
weston_desktop_surface_create_view(surface->surface);
|
||||||
weston_layer_entry_insert(&surface->xwayland->layer.view_list,
|
weston_layer_entry_insert(&surface->xwayland->layer.view_list,
|
||||||
&surface->view->layer_link);
|
&surface->view->layer_link);
|
||||||
weston_view_set_position(surface->view, x, y);
|
|
||||||
surface->view->is_mapped = true;
|
surface->view->is_mapped = true;
|
||||||
wsurface->is_mapped = true;
|
wsurface->is_mapped = true;
|
||||||
}
|
}
|
||||||
|
@ -316,6 +315,7 @@ set_xwayland(struct weston_desktop_xwayland_surface *surface, int x, int y)
|
||||||
{
|
{
|
||||||
weston_desktop_xwayland_surface_change_state(surface, XWAYLAND, NULL,
|
weston_desktop_xwayland_surface_change_state(surface, XWAYLAND, NULL,
|
||||||
x, y);
|
x, y);
|
||||||
|
weston_view_set_position(surface->view, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -739,6 +739,8 @@ weston_wm_handle_configure_notify(struct weston_wm *wm, xcb_generic_event_t *eve
|
||||||
{
|
{
|
||||||
xcb_configure_notify_event_t *configure_notify =
|
xcb_configure_notify_event_t *configure_notify =
|
||||||
(xcb_configure_notify_event_t *) event;
|
(xcb_configure_notify_event_t *) event;
|
||||||
|
const struct weston_desktop_xwayland_interface *xwayland_api =
|
||||||
|
wm->server->compositor->xwayland_interface;
|
||||||
struct weston_wm_window *window;
|
struct weston_wm_window *window;
|
||||||
|
|
||||||
wm_log("XCB_CONFIGURE_NOTIFY (window %d) %d,%d @ %dx%d%s\n",
|
wm_log("XCB_CONFIGURE_NOTIFY (window %d) %d,%d @ %dx%d%s\n",
|
||||||
|
@ -760,6 +762,13 @@ weston_wm_handle_configure_notify(struct weston_wm *wm, xcb_generic_event_t *eve
|
||||||
if (window->frame)
|
if (window->frame)
|
||||||
frame_resize_inside(window->frame,
|
frame_resize_inside(window->frame,
|
||||||
window->width, window->height);
|
window->width, window->height);
|
||||||
|
|
||||||
|
/* We should check if shsurf has been created because sometimes
|
||||||
|
* there are races
|
||||||
|
* (configure_notify is sent before xserver_map_surface) */
|
||||||
|
if (window->shsurf)
|
||||||
|
xwayland_api->set_xwayland(window->shsurf,
|
||||||
|
window->x, window->y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue