From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> --- server/cursor-channel.c | 4 ++++ server/red_worker.c | 60 +++++++++++++++++++++---------------------------- 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/server/cursor-channel.c b/server/cursor-channel.c index aafc807..5eb2647 100644 --- a/server/cursor-channel.c +++ b/server/cursor-channel.c @@ -484,6 +484,10 @@ CursorChannelClient* cursor_channel_client_new(CursorChannel *cursor, RedClient ring_init(&ccc->cursor_cache_lru); ccc->cursor_cache_available = CLIENT_CURSOR_CACHE_SIZE; + RedChannelClient *rcc = RED_CHANNEL_CLIENT(ccc); + red_channel_client_ack_zero_messages_window(rcc); + red_channel_client_push_set_ack(rcc); + return ccc; } diff --git a/server/red_worker.c b/server/red_worker.c index b8dfbb9..377eb36 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -5420,34 +5420,6 @@ static void handle_new_display_channel(RedWorker *worker, RedClient *client, Red dcc_start(dcc); } -static void red_connect_cursor(RedWorker *worker, RedClient *client, RedsStream *stream, - int migrate, - uint32_t *common_caps, int num_common_caps, - uint32_t *caps, int num_caps) -{ - CursorChannel *channel; - CursorChannelClient *ccc; - - spice_return_if_fail(worker->cursor_channel != NULL); - - channel = worker->cursor_channel; - spice_info("add cursor channel client"); - ccc = cursor_channel_client_new(channel, client, stream, - migrate, - common_caps, num_common_caps, - caps, num_caps); - spice_return_if_fail(ccc != NULL); - - RedChannelClient *rcc = RED_CHANNEL_CLIENT(ccc); - red_channel_client_ack_zero_messages_window(rcc); - red_channel_client_push_set_ack(rcc); - - // TODO: why do we check for context.canvas? defer this to after display cc is connected - // and test it's canvas? this is just a test to see if there is an active renderer? - if (display_channel_surface_has_canvas(worker->display_channel, 0)) - cursor_channel_init(channel, ccc); -} - static void surface_dirty_region_to_rects(RedSurface *surface, QXLRect *qxl_dirty_rects, uint32_t num_dirty_rects) @@ -5955,19 +5927,39 @@ static void handle_dev_monitors_config_async(void *opaque, void *payload) red_worker_push_monitors_config(worker); } +static void cursor_connect(RedWorker *worker, RedClient *client, RedsStream *stream, + int migrate, + uint32_t *common_caps, int num_common_caps, + uint32_t *caps, int num_caps) +{ + CursorChannel *channel = worker->cursor_channel; + CursorChannelClient *ccc; + + spice_return_if_fail(worker->cursor_channel != NULL); + + spice_info("add cursor channel client"); + ccc = cursor_channel_client_new(channel, client, stream, + migrate, + common_caps, num_common_caps, + caps, num_caps); + + // TODO: why do we check for context.canvas? defer this to after display cc is connected + // and test it's canvas? this is just a test to see if there is an active renderer? + if (display_channel_surface_has_canvas(worker->display_channel, 0)) + cursor_channel_init(channel, ccc); +} + /* TODO: special, perhaps use another dispatcher? */ static void handle_dev_cursor_connect(void *opaque, void *payload) { RedWorkerMessageCursorConnect *msg = payload; RedWorker *worker = opaque; - RedsStream *stream = msg->stream; - RedClient *client = msg->client; - int migration = msg->migration; spice_info("cursor connect"); - red_connect_cursor(worker, client, stream, migration, - msg->common_caps, msg->num_common_caps, - msg->caps, msg->num_caps); + cursor_connect(worker, + msg->client, msg->stream, msg->migration, + msg->common_caps, msg->num_common_caps, + msg->caps, msg->num_caps); free(msg->caps); free(msg->common_caps); } -- 2.4.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel