From 88dd6e630e9475fccadff8d91def664ced077cf3 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 17 Mar 2023 10:59:05 -0400 Subject: [PATCH] broadway: Don't cause traffic when disconnecting The recently added transient-for support was causing roundtrips when a client with transients disconnects, leading to assertion failures. Avoid that. --- gdk/broadway/broadway-server.c | 8 ++++---- gdk/broadway/broadway-server.h | 3 ++- gdk/broadway/broadwayd.c | 5 ++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/gdk/broadway/broadway-server.c b/gdk/broadway/broadway-server.c index f48ff0157d..6f6d6667bb 100644 --- a/gdk/broadway/broadway-server.c +++ b/gdk/broadway/broadway-server.c @@ -1574,7 +1574,8 @@ broadway_server_query_mouse (BroadwayServer *server, void broadway_server_destroy_surface (BroadwayServer *server, - int id) + int id, + gboolean disconnected) { BroadwaySurface *surface; gint32 transient_for = -1; @@ -1589,8 +1590,7 @@ broadway_server_destroy_surface (BroadwayServer *server, server->pointer_grab_surface_id = -1; if (server->output) - broadway_output_destroy_surface (server->output, - id); + broadway_output_destroy_surface (server->output, id); surface = broadway_server_lookup_surface (server, id); if (surface != NULL) @@ -1604,7 +1604,7 @@ broadway_server_destroy_surface (BroadwayServer *server, broadway_surface_free (server, surface); } - if (transient_for != -1) + if (transient_for != -1 && !disconnected) { surface = broadway_server_lookup_surface (server, transient_for); if (surface != NULL) diff --git a/gdk/broadway/broadway-server.h b/gdk/broadway/broadway-server.h index 1f7faad7ea..dc562b7056 100644 --- a/gdk/broadway/broadway-server.h +++ b/gdk/broadway/broadway-server.h @@ -93,7 +93,8 @@ guint32 broadway_server_new_surface (BroadwayServer * int width, int height); void broadway_server_destroy_surface (BroadwayServer *server, - int id); + int id, + gboolean disconnected); gboolean broadway_server_surface_show (BroadwayServer *server, int id); gboolean broadway_server_surface_hide (BroadwayServer *server, diff --git a/gdk/broadway/broadwayd.c b/gdk/broadway/broadwayd.c index 2d1b4c1865..4ca99b4a10 100644 --- a/gdk/broadway/broadwayd.c +++ b/gdk/broadway/broadwayd.c @@ -101,8 +101,7 @@ client_disconnected (BroadwayClient *client) } for (l = client->surfaces; l != NULL; l = l->next) - broadway_server_destroy_surface (server, - GPOINTER_TO_UINT (l->data)); + broadway_server_destroy_surface (server, GPOINTER_TO_UINT (l->data), TRUE); g_list_free (client->surfaces); client->surfaces = NULL; @@ -268,7 +267,7 @@ client_handle_request (BroadwayClient *client, client->surfaces = g_list_remove (client->surfaces, GUINT_TO_POINTER (request->destroy_surface.id)); - broadway_server_destroy_surface (server, request->destroy_surface.id); + broadway_server_destroy_surface (server, request->destroy_surface.id, FALSE); break; case BROADWAY_REQUEST_SHOW_SURFACE: broadway_server_surface_show (server, request->show_surface.id); -- 2.30.2