clients: If available, prefer top level surfaces for move or rotate
This stops us from rotating or moving pop-up menus by instead rotating their parents. This is easiest to see using a multi-seat configuration. Signed-off-by: Derek Foreman <derekf@osg.samsung.com> Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
This commit is contained in:
parent
c0c1497f99
commit
45a7c27f2b
@ -481,6 +481,25 @@ get_output_work_area(struct desktop_shell *shell,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct shell_surface *
|
||||||
|
find_toplevel_surface(struct shell_surface *in_surface)
|
||||||
|
{
|
||||||
|
struct shell_surface *surface = in_surface;
|
||||||
|
|
||||||
|
if (!surface)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
while (surface->parent)
|
||||||
|
surface = get_shell_surface(surface->parent);
|
||||||
|
|
||||||
|
/* If no top level surface was found, just use whatever surface was
|
||||||
|
originally provided. */
|
||||||
|
if (!surface || surface->type != SHELL_SURFACE_TOPLEVEL)
|
||||||
|
surface = in_surface;
|
||||||
|
|
||||||
|
return surface;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
send_configure_for_surface(struct shell_surface *shsurf)
|
send_configure_for_surface(struct shell_surface *shsurf)
|
||||||
{
|
{
|
||||||
@ -1770,6 +1789,8 @@ surface_move(struct shell_surface *shsurf, struct weston_pointer *pointer,
|
|||||||
if (!shsurf)
|
if (!shsurf)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
shsurf = find_toplevel_surface(shsurf);
|
||||||
|
|
||||||
if (shsurf->grabbed ||
|
if (shsurf->grabbed ||
|
||||||
shsurf->state.fullscreen || shsurf->state.maximized)
|
shsurf->state.fullscreen || shsurf->state.maximized)
|
||||||
return 0;
|
return 0;
|
||||||
@ -4994,6 +5015,8 @@ surface_rotate(struct shell_surface *surface, struct weston_pointer *pointer)
|
|||||||
float dx, dy;
|
float dx, dy;
|
||||||
float r;
|
float r;
|
||||||
|
|
||||||
|
surface = find_toplevel_surface(surface);
|
||||||
|
|
||||||
rotate = malloc(sizeof *rotate);
|
rotate = malloc(sizeof *rotate);
|
||||||
if (!rotate)
|
if (!rotate)
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user