diff --git a/server/dcc.cpp b/server/dcc.cpp index 126598a0..1dcf1519 100644 --- a/server/dcc.cpp +++ b/server/dcc.cpp @@ -302,9 +302,13 @@ static void add_drawable_surface_images(DisplayChannelClient *dcc, Drawable *dra dcc_push_surface_image(dcc, drawable->surface_id); } -RedDrawablePipeItem::RedDrawablePipeItem(): - RedPipeItem(RED_PIPE_ITEM_TYPE_DRAW) +RedDrawablePipeItem::RedDrawablePipeItem(DisplayChannelClient *init_dcc, Drawable *init_drawable): + RedPipeItem(RED_PIPE_ITEM_TYPE_DRAW), + drawable(init_drawable), + dcc(init_dcc) { + drawable->pipes = g_list_prepend(drawable->pipes, this); + drawable->refs++; } RedDrawablePipeItem::~RedDrawablePipeItem() @@ -313,20 +317,9 @@ RedDrawablePipeItem::~RedDrawablePipeItem() drawable_unref(drawable); } -static red::shared_ptr -red_drawable_pipe_item_new(DisplayChannelClient *dcc, Drawable *drawable) -{ - auto dpi = red::make_shared(); - dpi->drawable = drawable; - dpi->dcc = dcc; - drawable->pipes = g_list_prepend(drawable->pipes, dpi.get()); - drawable->refs++; - return dpi; -} - void dcc_prepend_drawable(DisplayChannelClient *dcc, Drawable *drawable) { - auto dpi = red_drawable_pipe_item_new(dcc, drawable); + auto dpi = red::make_shared(dcc, drawable); add_drawable_surface_images(dcc, drawable); dcc->pipe_add(std::move(dpi)); @@ -334,7 +327,7 @@ void dcc_prepend_drawable(DisplayChannelClient *dcc, Drawable *drawable) void dcc_append_drawable(DisplayChannelClient *dcc, Drawable *drawable) { - auto dpi = red_drawable_pipe_item_new(dcc, drawable); + auto dpi = red::make_shared(dcc, drawable); add_drawable_surface_images(dcc, drawable); dcc->pipe_add_tail(std::move(dpi)); @@ -342,7 +335,7 @@ void dcc_append_drawable(DisplayChannelClient *dcc, Drawable *drawable) void dcc_add_drawable_after(DisplayChannelClient *dcc, Drawable *drawable, RedPipeItem *pos) { - auto dpi = red_drawable_pipe_item_new(dcc, drawable); + auto dpi = red::make_shared(dcc, drawable); add_drawable_surface_images(dcc, drawable); dcc->pipe_add_after(std::move(dpi), pos); diff --git a/server/dcc.h b/server/dcc.h index 696f66af..a35849d5 100644 --- a/server/dcc.h +++ b/server/dcc.h @@ -129,10 +129,10 @@ struct RedImageItem final: public RedPipeItem { }; struct RedDrawablePipeItem: public RedPipeItem { - RedDrawablePipeItem(); + RedDrawablePipeItem(DisplayChannelClient *dcc, Drawable *drawable); ~RedDrawablePipeItem(); - Drawable *drawable; - DisplayChannelClient *dcc; + Drawable *const drawable; + DisplayChannelClient *const dcc; }; DisplayChannelClient* dcc_new (DisplayChannel *display,