From cb0d7a1ecd58559b2f6dc06ceb86a327e75f46df Mon Sep 17 00:00:00 2001 From: JackBurton79 Date: Mon, 10 Sep 2018 12:48:30 +0200 Subject: [PATCH] app_server: make a copy of the passed BPicture Like the AS_DRAW_PICTURE case, make a copy of the passed BPicture also for AS_CLIP_TO_PICTURE Change-Id: Id9a0adc48d73e5ec9c0d37e2ed85e30aa48369ab --- src/servers/app/ServerWindow.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 9cc8fbbafe..fbfd7454a8 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -3700,12 +3700,15 @@ ServerWindow::_DispatchPictureMessage(int32 code, BPrivate::LinkReceiver& link) break; ServerPicture* pictureToClip = fServerApp->GetPicture(pictureToken); - if (pictureToClip == NULL) - break; + if (pictureToClip != NULL) { + // We need to make a copy of the picture, since it can + // change after it has been drawn + ServerPicture* copy = App()->CreatePicture(pictureToClip); + picture->NestPicture(copy); + picture->WriteClipToPicture(copy->Token(), where, inverse); - picture->WriteClipToPicture(pictureToClip->Token(), where, inverse); - - pictureToClip->ReleaseReference(); + pictureToClip->ReleaseReference(); + } break; }