assert(0);
}
+static void
+x11_compositor_delete_window(struct x11_compositor *c, xcb_window_t window)
+{
+ struct x11_output *deleted_output, *output, *next;
+ int x_offset = 0;
+
+ deleted_output = x11_compositor_find_output(c, window);
+
+ wl_list_for_each_safe(output, next, &c->base.output_list, base.link) {
+ if (x_offset != 0) {
+ weston_output_move(&output->base,
+ output->base.x - x_offset,
+ output->base.y);
+ weston_output_damage(&output->base);
+ }
+
+ if (output == deleted_output) {
+ x_offset += output->base.width;
+ x11_output_destroy(&output->base);
+ }
+ }
+
+ xcb_flush(c->conn);
+
+ if (wl_list_empty(&c->base.output_list))
+ wl_display_terminate(c->base.wl_display);
+}
+
#ifdef HAVE_XCB_XKB
static void
update_xkb_state(struct x11_compositor *c, xcb_xkb_state_notify_event_t *state)
xcb_focus_in_event_t *focus_in;
xcb_expose_event_t *expose;
xcb_atom_t atom;
+ xcb_window_t window;
uint32_t *k;
uint32_t i, set;
uint8_t response_type;
case XCB_CLIENT_MESSAGE:
client_message = (xcb_client_message_event_t *) event;
atom = client_message->data.data32[0];
+ window = client_message->window;
if (atom == c->atom.wm_delete_window)
- wl_display_terminate(c->base.wl_display);
+ x11_compositor_delete_window(c, window);
break;
case XCB_FOCUS_IN: