Em 01-03-2012 06:57, [email protected] escreveu:
From: Alex Wu<[email protected]> @@ -1290,14 +1426,23 @@ activate(struct weston_shell *base, struct weston_surface *es,static void click_to_activate_binding(struct wl_input_device *device, - uint32_t time, uint32_t key, + uint32_t time, uint32_t key, uint32_t button, uint32_t state, void *data) { struct weston_input_device *wd = (struct weston_input_device *) device; struct weston_compositor *compositor = data; struct weston_surface *focus; + struct weston_surface *upper; focus = (struct weston_surface *) device->pointer_focus; + upper = container_of(focus->link.prev, struct weston_surface, link); + if (focus->link.prev !=&compositor->surface_list&& + get_shell_surface_type(upper) == SHELL_SURFACE_FULLSCREEN) { + printf("%s: focus is black surface, raise its fullscreen surface\n", __func__); + shell_stack_fullscreen(get_shell_surface(upper)); + focus = upper; + } + if (state&& focus&& device->pointer_grab ==&device->default_pointer_grab) activate(compositor->shell, focus, wd, time); }
focus can be NULL here in which case this leads to a segmentation fault. You can cause it very easily by 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.
Ander _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
