diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c
index 6a56ac4240b72c2031cd0dd57b8f78d65904f575..a8dce8d45a4c94ba2935d316aca4f113aad347ef 100644
--- a/hw/xwayland/xwayland-window.c
+++ b/hw/xwayland/xwayland-window.c
@@ -540,6 +540,28 @@ static const struct wl_surface_listener surface_listener = {
     xwl_window_surface_leave
 };
 
+static void
+xdg_toplevel_handle_configure(void *data,
+                              struct xdg_toplevel *xdg_toplevel,
+                              int32_t width,
+                              int32_t height,
+                              struct wl_array *states)
+{
+}
+
+static void
+xdg_toplevel_handle_close(void *data,
+                          struct xdg_toplevel *xdg_toplevel)
+{
+    DebugF("Terminating on compositor request");
+    GiveUp(0);
+}
+
+static const struct xdg_toplevel_listener xdg_toplevel_listener = {
+    xdg_toplevel_handle_configure,
+    xdg_toplevel_handle_close,
+};
+
 static Bool
 xwl_create_root_surface(struct xwl_window *xwl_window)
 {
@@ -567,6 +589,10 @@ xwl_create_root_surface(struct xwl_window *xwl_window)
     xdg_surface_add_listener(xwl_window->xdg_surface,
                              &xdg_surface_listener, xwl_window);
 
+    xdg_toplevel_add_listener(xwl_window->xdg_toplevel,
+                              &xdg_toplevel_listener,
+                              NULL);
+
     xwl_window_rootful_update_title(xwl_window);
 
     wl_surface_commit(xwl_window->surface);