diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index 8d49479658..c3aac5d643 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -736,14 +736,32 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver& link) break; } -#if 0 + case AS_CLONE_PICTURE: { - // TODO: Implement AS_CLONE_PICTURE - STRACE(("ServerApp %s: Clone Picture unimplemented\n", Signature())); + STRACE(("ServerApp %s: Clone Picture\n", Signature())); + int32 token; + ServerPicture *original = NULL; + if (link.Read(&token) == B_OK) + original = FindPicture(token); + + ServerPicture *cloned = NULL; + if (original != NULL) + cloned = CreatePicture(); + + if (cloned != NULL) { + // TODO: I'm not sure that this does a plain copy. + // Check, and, in case, put the stuff in Data() directly + cloned->AddData(original->Data(), original->DataLength()); + fLink.StartMessage(B_OK); + fLink.Attach(cloned->Token()); + } else + fLink.StartMessage(B_ERROR); + + fLink.Flush(); break; } - +#if 0 case AS_DOWNLOAD_PICTURE: { STRACE(("ServerApp %s: Download Picture unimplemented\n", Signature()));