compositor-x11: Move the x11 event handler to the display loop

While it conceptually makes sense to put the x11 event handler
in the compositor "input" loop, the input loop is actually
dispatched in the middle of the frame repaint.  When the
X11 event results in closing the compositor, this can cause
the current output to be destroyed just prior to trying to
process animations on it.

Closes bug: https://bugs.freedesktop.org/show_bug.cgi?id=81314

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
dev
Derek Foreman 10 years ago committed by Bryce Harrington
parent 1875affcc8
commit 6deb09ef8a
  1. 4
      src/compositor-x11.c

@ -1470,6 +1470,7 @@ x11_compositor_create(struct wl_display *display,
struct x11_compositor *c; struct x11_compositor *c;
struct x11_output *output; struct x11_output *output;
struct weston_config_section *section; struct weston_config_section *section;
struct wl_event_loop *loop;
xcb_screen_iterator_t s; xcb_screen_iterator_t s;
int i, x = 0, output_count = 0; int i, x = 0, output_count = 0;
int width, height, scale, count; int width, height, scale, count;
@ -1595,8 +1596,9 @@ x11_compositor_create(struct wl_display *display,
x = pixman_region32_extents(&output->base.region)->x2; x = pixman_region32_extents(&output->base.region)->x2;
} }
loop = wl_display_get_event_loop(c->base.wl_display);
c->xcb_source = c->xcb_source =
wl_event_loop_add_fd(c->base.input_loop, wl_event_loop_add_fd(loop,
xcb_get_file_descriptor(c->conn), xcb_get_file_descriptor(c->conn),
WL_EVENT_READABLE, WL_EVENT_READABLE,
x11_compositor_handle_event, c); x11_compositor_handle_event, c);

Loading…
Cancel
Save