From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> --- server/display-channel.c | 22 ++++++++++++++++++---- server/display-channel.h | 1 - server/red_worker.c | 14 -------------- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/server/display-channel.c b/server/display-channel.c index aa3e7fb..e29d2ad 100644 --- a/server/display-channel.c +++ b/server/display-channel.c @@ -403,6 +403,20 @@ static void current_remove_drawable(DisplayChannel *display, Drawable *item) display->current_size--; } +static void drawable_remove_from_pipes(Drawable *drawable) +{ + DrawablePipeItem *dpi; + RingItem *item, *next; + + RING_FOREACH_SAFE(item, next, &drawable->pipes) { + dpi = SPICE_CONTAINEROF(item, DrawablePipeItem, base); + if (pipe_item_is_linked(&dpi->dpi_pipe_item)) { + red_channel_client_pipe_remove_and_release(RED_CHANNEL_CLIENT(dpi->dcc), + &dpi->dpi_pipe_item); + } + } +} + static void current_remove(DisplayChannel *display, TreeItem *item) { TreeItem *now = item; @@ -415,7 +429,7 @@ static void current_remove(DisplayChannel *display, TreeItem *item) if (now->type == TREE_ITEM_TYPE_DRAWABLE) { Drawable *drawable = SPICE_CONTAINEROF(now, Drawable, tree_item); ring_item = now->siblings_link.prev; - red_pipes_remove_drawable(drawable); + drawable_remove_from_pipes(drawable); current_remove_drawable(display, drawable); } else { Container *container = (Container *)now; @@ -482,7 +496,7 @@ static int current_add_equal(DisplayChannel *display, DrawItem *item, TreeItem * } else { pipes_add_drawable(display, drawable); } - red_pipes_remove_drawable(other_drawable); + drawable_remove_from_pipes(other_drawable); display_channel_drawable_unref(display, other_drawable); return TRUE; } @@ -524,7 +538,7 @@ static int current_add_equal(DisplayChannel *display, DrawItem *item, TreeItem * } } /* not sending other_drawable where possible */ - red_pipes_remove_drawable(other_drawable); + drawable_remove_from_pipes(other_drawable); display_channel_drawable_unref(display, other_drawable); return TRUE; @@ -533,7 +547,7 @@ static int current_add_equal(DisplayChannel *display, DrawItem *item, TreeItem * case QXL_EFFECT_OPAQUE_BRUSH: if (is_same_geometry(drawable, other_drawable)) { current_add_drawable(display, drawable, &other->siblings_link); - red_pipes_remove_drawable(other_drawable); + drawable_remove_from_pipes(other_drawable); current_remove_drawable(display, other_drawable); pipes_add_drawable(display, drawable); return TRUE; diff --git a/server/display-channel.h b/server/display-channel.h index 3f3c278..28ef66c 100644 --- a/server/display-channel.h +++ b/server/display-channel.h @@ -433,7 +433,6 @@ static inline void region_add_clip_rects(QRegion *rgn, SpiceClipRects *data) } uint32_t generate_uid(DisplayChannel *display); -void red_pipes_remove_drawable(Drawable *drawable); void detach_streams_behind(DisplayChannel *display, QRegion *region, Drawable *drawable); void drawable_draw(DisplayChannel *display, Drawable *item); void drawables_init(DisplayChannel *display); diff --git a/server/red_worker.c b/server/red_worker.c index eb4be25..341574f 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -125,20 +125,6 @@ static int cursor_is_connected(RedWorker *worker) red_channel_is_connected(RED_CHANNEL(worker->cursor_channel)); } -void red_pipes_remove_drawable(Drawable *drawable) -{ - DrawablePipeItem *dpi; - RingItem *item, *next; - - RING_FOREACH_SAFE(item, next, &drawable->pipes) { - dpi = SPICE_CONTAINEROF(item, DrawablePipeItem, base); - if (pipe_item_is_linked(&dpi->dpi_pipe_item)) { - red_channel_client_pipe_remove_and_release(RED_CHANNEL_CLIENT(dpi->dcc), - &dpi->dpi_pipe_item); - } - } -} - static uint8_t *common_alloc_recv_buf(RedChannelClient *rcc, uint16_t type, uint32_t size) { CommonChannel *common = SPICE_CONTAINEROF(rcc->channel, CommonChannel, base); -- 2.4.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel