shell: Add back ability to rotate unresponsive surfaces
When a surface in deemed unresponsive and we trigger the busy cursor, it's no longer possible to rotate the surface. This is clearly unacceptable. This patch adds handling of right clicks to the busy grab so that we can continue to rotate a surface even if the client is sleeping. https://bugs.freedesktop.org/show_bug.cgi?id=60609
This commit is contained in:
parent
e994eddafc
commit
0c36903fb3
37
src/shell.c
37
src/shell.c
|
@ -236,6 +236,9 @@ get_shell_surface(struct weston_surface *surface);
|
|||
static struct desktop_shell *
|
||||
shell_surface_get_shell(struct shell_surface *shsurf);
|
||||
|
||||
static void
|
||||
surface_rotate(struct shell_surface *surface, struct wl_seat *seat);
|
||||
|
||||
static bool
|
||||
shell_surface_is_top_fullscreen(struct shell_surface *shsurf)
|
||||
{
|
||||
|
@ -1232,6 +1235,9 @@ busy_cursor_grab_button(struct wl_pointer_grab *base,
|
|||
if (shsurf && button == BTN_LEFT && state) {
|
||||
activate(shsurf->shell, shsurf->surface, seat);
|
||||
surface_move(shsurf, seat);
|
||||
} else if (shsurf && button == BTN_RIGHT && state) {
|
||||
activate(shsurf->shell, shsurf->surface, seat);
|
||||
surface_rotate(shsurf, &seat->seat);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2589,23 +2595,12 @@ static const struct wl_pointer_grab_interface rotate_grab_interface = {
|
|||
};
|
||||
|
||||
static void
|
||||
rotate_binding(struct wl_seat *seat, uint32_t time, uint32_t button,
|
||||
void *data)
|
||||
surface_rotate(struct shell_surface *surface, struct wl_seat *seat)
|
||||
{
|
||||
struct weston_surface *base_surface =
|
||||
(struct weston_surface *) seat->pointer->focus;
|
||||
struct shell_surface *surface;
|
||||
struct rotate_grab *rotate;
|
||||
float dx, dy;
|
||||
float r;
|
||||
|
||||
if (base_surface == NULL)
|
||||
return;
|
||||
|
||||
surface = get_shell_surface(base_surface);
|
||||
if (!surface || surface->type == SHELL_SURFACE_FULLSCREEN)
|
||||
return;
|
||||
|
||||
rotate = malloc(sizeof *rotate);
|
||||
if (!rotate)
|
||||
return;
|
||||
|
@ -2636,6 +2631,24 @@ rotate_binding(struct wl_seat *seat, uint32_t time, uint32_t button,
|
|||
seat->pointer, DESKTOP_SHELL_CURSOR_ARROW);
|
||||
}
|
||||
|
||||
static void
|
||||
rotate_binding(struct wl_seat *seat, uint32_t time, uint32_t button,
|
||||
void *data)
|
||||
{
|
||||
struct weston_surface *base_surface =
|
||||
(struct weston_surface *) seat->pointer->focus;
|
||||
struct shell_surface *surface;
|
||||
|
||||
if (base_surface == NULL)
|
||||
return;
|
||||
|
||||
surface = get_shell_surface(base_surface);
|
||||
if (!surface || surface->type == SHELL_SURFACE_FULLSCREEN)
|
||||
return;
|
||||
|
||||
surface_rotate(surface, seat);
|
||||
}
|
||||
|
||||
static void
|
||||
lower_fullscreen_layer(struct desktop_shell *shell)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue