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

Reply via email to