mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2026-01-07 03:50:38 +01:00
cocoa: initialize declareTypes_owner once, to prevent clipboard information loss. Related #33801
git-svn-id: trunk@58293 -
This commit is contained in:
parent
d263fdd881
commit
ee472d8593
@ -294,6 +294,22 @@ begin
|
||||
|
||||
DataStream := TMemoryStream.Create;
|
||||
try
|
||||
FormatToOwnArray := nil;
|
||||
if FormatCount>0 then
|
||||
begin
|
||||
FormatToOwnArray := NSArray(NSMutableArray.array_);
|
||||
for i := 0 to FormatCount-1 do
|
||||
begin
|
||||
lCurFormat := TCocoaClipboardData(Formats[i]);
|
||||
if lCurFormat = nil then Continue;
|
||||
FormatToOwn := lCurFormat.CocoaFormat;
|
||||
NSMutableArray(FormatToOwnArray).addObject(FormatToOwn);
|
||||
end;
|
||||
end;
|
||||
|
||||
if Assigned(FormatToOwnArray) and (FormatToOwnArray.count>0) then
|
||||
pasteboard.declareTypes_owner(FormatToOwnArray, nil);
|
||||
|
||||
for i := 0 to FormatCount-1 do
|
||||
begin
|
||||
lCurFormat := TCocoaClipboardData(Formats[i]);
|
||||
@ -305,34 +321,22 @@ begin
|
||||
case lCurFormat.DataType of
|
||||
ccdtText:
|
||||
begin
|
||||
FormatToOwn := lCurFormat.CocoaFormat;
|
||||
FormatToOwnArray := NSArray.arrayWithObjects_count(@FormatToOwn, 1);
|
||||
|
||||
DataStream.Position := 0;
|
||||
SetLength(lText, DataStream.Size);
|
||||
DataStream.Read(lText[1], DataStream.Size);
|
||||
lNSText := NSStringUtf8(lText);
|
||||
|
||||
pasteboard.declareTypes_owner(FormatToOwnArray, nil);
|
||||
pasteboard.setString_forType(lNSText, lCurFormat.CocoaFormat);
|
||||
end;
|
||||
ccdtCocoaStandard, ccdtNonStandard:
|
||||
begin
|
||||
FormatToOwn := lCurFormat.CocoaFormat;
|
||||
FormatToOwnArray := NSArray.arrayWithObjects_count(@FormatToOwn, 1);
|
||||
|
||||
DataStream.Position := 0;
|
||||
lNSData := NSData.dataWithBytes_length(DataStream.Memory, DataStream.Size);
|
||||
|
||||
pasteboard.declareTypes_owner(FormatToOwnArray, nil);
|
||||
pasteboard.setData_forType(lNSData, lCurFormat.CocoaFormat);
|
||||
//lNSData.release; // this causes a crash
|
||||
end;
|
||||
ccdtBitmap:
|
||||
begin
|
||||
FormatToOwn := lCurFormat.CocoaFormat;
|
||||
FormatToOwnArray := NSArray.arrayWithObjects_count(@FormatToOwn, 1);
|
||||
|
||||
Image := TFPMemoryImage.Create(10, 10);
|
||||
Reader := TFPReaderBMP.Create;
|
||||
Writer := TFPWriterPNG.Create;
|
||||
@ -343,9 +347,7 @@ begin
|
||||
Image.SaveToStream(lTmpStream, Writer);
|
||||
lTmpStream.Position := 0;
|
||||
lNSData := NSData.dataWithBytes_length(lTmpStream.Memory, lTmpStream.Size);
|
||||
pasteboard.declareTypes_owner(FormatToOwnArray, nil);
|
||||
pasteboard.setData_forType(lNSData, lCurFormat.CocoaFormat);
|
||||
//lNSData.release;
|
||||
finally
|
||||
Image.Free;
|
||||
Reader.Free;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user