shell: run surface bindings only when focus surface is not NULL

This fixes the crash when move, rotate or resize binding is activated
while exposay effect is active.

Steps to reproduce:
- activate exposay
- try to rotate the surface with mod + right mouse button
- crash

Closes: https://bugs.freedesktop.org/show_bug.cgi?id=72885
dev
Rafal Mielniczuk 11 years ago committed by Kristian Høgsberg
parent 4b2558708b
commit b2917a2fed
  1. 21
      desktop-shell/shell.c

@ -3747,10 +3747,15 @@ get_shell_surface_type(struct weston_surface *surface)
static void
move_binding(struct weston_seat *seat, uint32_t time, uint32_t button, void *data)
{
struct weston_surface *focus = seat->pointer->focus->surface;
struct weston_surface *focus;
struct weston_surface *surface;
struct shell_surface *shsurf;
if (seat->pointer->focus == NULL)
return;
focus = seat->pointer->focus->surface;
surface = weston_surface_get_main_surface(focus);
if (surface == NULL)
return;
@ -3833,12 +3838,17 @@ touch_move_binding(struct weston_seat *seat, uint32_t time, void *data)
static void
resize_binding(struct weston_seat *seat, uint32_t time, uint32_t button, void *data)
{
struct weston_surface *focus = seat->pointer->focus->surface;
struct weston_surface *focus;
struct weston_surface *surface;
uint32_t edges = 0;
int32_t x, y;
struct shell_surface *shsurf;
if (seat->pointer->focus == NULL)
return;
focus = seat->pointer->focus->surface;
surface = weston_surface_get_main_surface(focus);
if (surface == NULL)
return;
@ -4107,10 +4117,15 @@ static void
rotate_binding(struct weston_seat *seat, uint32_t time, uint32_t button,
void *data)
{
struct weston_surface *focus = seat->pointer->focus->surface;
struct weston_surface *focus;
struct weston_surface *base_surface;
struct shell_surface *surface;
if (seat->pointer->focus == NULL)
return;
focus = seat->pointer->focus->surface;
base_surface = weston_surface_get_main_surface(focus);
if (base_surface == NULL)
return;

Loading…
Cancel
Save