void
broadway_server_destroy_surface (BroadwayServer *server,
- int id)
+ int id,
+ gboolean disconnected)
{
BroadwaySurface *surface;
gint32 transient_for = -1;
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)
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)
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,
}
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;
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);