/** * Synchronizes all surfaces within the given linked list to the given socket. * If the provided pointer to the linked list is NULL, this function has no * effect. * * @param layers * The head element of the linked list of layers to synchronize, which may * be NULL if the list is currently empty. * * @param user * The user receiving the layers. * * @param socket * The socket over which each layer should be sent. */ static void guac_common_display_dup_layers(guac_common_display_layer* layers, guac_user* user, guac_socket* socket) { guac_common_display_layer* current = layers; /* Synchronize all surfaces in given list */ while (current != NULL) { guac_common_surface_dup(current->surface, user, socket); current = current->next; } }
void guac_common_display_dup(guac_common_display* display, guac_user* user, guac_socket* socket) { /* Sunchronize shared cursor */ guac_common_cursor_dup(display->cursor, user, socket); /* Synchronize default surface */ guac_common_surface_dup(display->default_surface, user, socket); /* Synchronize all layers and buffers */ guac_common_display_dup_layers(display->layers, user, socket); guac_common_display_dup_layers(display->buffers, user, socket); }
void guac_terminal_display_dup(guac_terminal_display* display, guac_user* user, guac_socket* socket) { /* Create default surface */ guac_common_surface_dup(display->display_surface, user, socket); /* Select layer is a child of the display layer */ guac_protocol_send_move(socket, display->select_layer, display->display_layer, 0, 0, 0); /* Send select layer size */ guac_protocol_send_size(socket, display->select_layer, display->char_width * display->width, display->char_height * display->height); }