GUAC-660: Do not send initial size unless layer is visible. Do not dispose unless layer was created.
This commit is contained in:
parent
8f1f0907e7
commit
5b2f824097
@ -256,16 +256,30 @@ guac_common_surface* guac_common_surface_alloc(guac_socket* socket, const guac_l
|
|||||||
cairo_set_source_rgb(surface->cairo, 0, 0, 0);
|
cairo_set_source_rgb(surface->cairo, 0, 0, 0);
|
||||||
cairo_paint(surface->cairo);
|
cairo_paint(surface->cairo);
|
||||||
|
|
||||||
guac_protocol_send_size(socket, layer, w, h);
|
/* Layers must initially exist */
|
||||||
|
if (layer->index >= 0) {
|
||||||
|
guac_protocol_send_size(socket, layer, w, h);
|
||||||
|
surface->realized = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Defer creation of buffers */
|
||||||
|
else
|
||||||
|
surface->realized = 0;
|
||||||
|
|
||||||
return surface;
|
return surface;
|
||||||
}
|
}
|
||||||
|
|
||||||
void guac_common_surface_free(guac_common_surface* surface) {
|
void guac_common_surface_free(guac_common_surface* surface) {
|
||||||
guac_protocol_send_dispose(surface->socket, surface->layer);
|
|
||||||
|
/* Only dispose of surface if it exists */
|
||||||
|
if (surface->realized)
|
||||||
|
guac_protocol_send_dispose(surface->socket, surface->layer);
|
||||||
|
|
||||||
cairo_surface_destroy(surface->surface);
|
cairo_surface_destroy(surface->surface);
|
||||||
cairo_destroy(surface->cairo);
|
cairo_destroy(surface->cairo);
|
||||||
free(surface->buffer);
|
free(surface->buffer);
|
||||||
free(surface);
|
free(surface);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void guac_common_surface_resize(guac_common_surface* surface, int w, int h) {
|
void guac_common_surface_resize(guac_common_surface* surface, int w, int h) {
|
||||||
@ -327,6 +341,7 @@ void guac_common_surface_resize(guac_common_surface* surface, int w, int h) {
|
|||||||
|
|
||||||
/* Update Guacamole layer */
|
/* Update Guacamole layer */
|
||||||
guac_protocol_send_size(socket, layer, w, h);
|
guac_protocol_send_size(socket, layer, w, h);
|
||||||
|
surface->realized = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,6 +382,7 @@ void guac_common_surface_copy(guac_common_surface* src, int sx, int sy, int w, i
|
|||||||
guac_common_surface_flush(dst);
|
guac_common_surface_flush(dst);
|
||||||
guac_common_surface_flush(src);
|
guac_common_surface_flush(src);
|
||||||
guac_protocol_send_copy(socket, src_layer, sx, sy, w, h, GUAC_COMP_OVER, dst_layer, dx, dy);
|
guac_protocol_send_copy(socket, src_layer, sx, sy, w, h, GUAC_COMP_OVER, dst_layer, dx, dy);
|
||||||
|
dst->realized = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update backing surface */
|
/* Update backing surface */
|
||||||
@ -392,6 +408,7 @@ void guac_common_surface_transfer(guac_common_surface* src, int sx, int sy, int
|
|||||||
guac_common_surface_flush(dst);
|
guac_common_surface_flush(dst);
|
||||||
guac_common_surface_flush(src);
|
guac_common_surface_flush(src);
|
||||||
guac_protocol_send_transfer(socket, src_layer, sx, sy, w, h, op, dst_layer, dx, dy);
|
guac_protocol_send_transfer(socket, src_layer, sx, sy, w, h, op, dst_layer, dx, dy);
|
||||||
|
dst->realized = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update backing surface */
|
/* Update backing surface */
|
||||||
@ -417,6 +434,7 @@ void guac_common_surface_rect(guac_common_surface* surface,
|
|||||||
guac_common_surface_flush(surface);
|
guac_common_surface_flush(surface);
|
||||||
guac_protocol_send_rect(socket, layer, x, y, w, h);
|
guac_protocol_send_rect(socket, layer, x, y, w, h);
|
||||||
guac_protocol_send_cfill(socket, GUAC_COMP_OVER, layer, red, green, blue, 0xFF);
|
guac_protocol_send_cfill(socket, GUAC_COMP_OVER, layer, red, green, blue, 0xFF);
|
||||||
|
surface->realized = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update backing surface */
|
/* Update backing surface */
|
||||||
@ -444,6 +462,7 @@ void guac_common_surface_flush(guac_common_surface* surface) {
|
|||||||
cairo_surface_destroy(rect);
|
cairo_surface_destroy(rect);
|
||||||
|
|
||||||
surface->dirty = 0;
|
surface->dirty = 0;
|
||||||
|
surface->realized = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,6 +106,11 @@ typedef struct guac_common_surface {
|
|||||||
*/
|
*/
|
||||||
int dirty_height;
|
int dirty_height;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the surface actually exists on the client.
|
||||||
|
*/
|
||||||
|
int realized;
|
||||||
|
|
||||||
} guac_common_surface;
|
} guac_common_surface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user