shell: Fix segment fault when clicking to activate a NULL pointer_focus

This can happen for instance running a toytoolkit application, launching
the popup menu and then clicking on a surface that does not belong to
the client that create the popup surface.
Alex Wu 13 years ago committed by Kristian Høgsberg
parent aa08e2d56d
commit 9c35e6b47d
  1. 5
      src/shell.c

@ -1384,6 +1384,9 @@ click_to_activate_binding(struct wl_input_device *device,
struct weston_surface *upper; struct weston_surface *upper;
focus = (struct weston_surface *) device->pointer_focus; focus = (struct weston_surface *) device->pointer_focus;
if (!focus)
return;
upper = container_of(focus->link.prev, struct weston_surface, link); upper = container_of(focus->link.prev, struct weston_surface, link);
if (focus->link.prev != &compositor->surface_list && if (focus->link.prev != &compositor->surface_list &&
get_shell_surface_type(upper) == SHELL_SURFACE_FULLSCREEN) { get_shell_surface_type(upper) == SHELL_SURFACE_FULLSCREEN) {
@ -1392,7 +1395,7 @@ click_to_activate_binding(struct wl_input_device *device,
focus = upper; focus = upper;
} }
if (state && focus && device->pointer_grab == &device->default_pointer_grab) if (state && device->pointer_grab == &device->default_pointer_grab)
activate(compositor->shell, focus, wd, time); activate(compositor->shell, focus, wd, time);
} }

Loading…
Cancel
Save