mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-09 18:30:08 +00:00
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.
This commit is contained in:
parent
fe2b6dd246
commit
88dd6e630e
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user