view: don't position override-redirect windows

Override-redirect windows are meant to be ignored by the X server, at
least as far as position goes. Hence, we detect whether we're dealing
with such a window and consequently don't position it.

This makes, amongst others, Chromium's popup menus and dmenu appear on
the correct position and size.
This commit is contained in:
Jente Hidskes 2019-01-17 22:01:57 +01:00
parent 2543934055
commit 16ab37b706
2 changed files with 14 additions and 1 deletions

10
view.c
View file

@ -104,7 +104,15 @@ view_map(struct cg_view *view, struct wlr_surface *surface)
{
view->wlr_surface = surface;
view_position(view);
#if CAGE_HAS_XWAYLAND
/* We shouldn't position override-redirect windows. They set
their own (x,y) coordinates in handle_wayland_surface_new. */
if (view->type != CAGE_XWAYLAND_VIEW ||
!xwayland_view_from_view(view)->xwayland_surface->override_redirect)
#endif
{
view_position(view);
}
wl_list_insert(&view->server->views, &view->link);
seat_set_focus(view->server->seat, view);