private async Task SetContentAsync(DataPackage content) { var data = content?.GetView(); var targetList = new TargetList(); var targetStrings = new List <string>(); bool CheckFormat(string format, out uint id) { if (data?.Contains(format) ?? false) { id = (uint)targetStrings.Count; targetStrings.Add(format); return(true); } id = 0; return(false); } async void SetDataNative(Clipboard clipboard, SelectionData nativeData, uint info) { var format = targetStrings[(int)info]; var uris = new List <string>(); // Cannot use switch here, these strings are not constants!!! if (format == StandardDataFormats.Text) { nativeData.Text = await data.GetTextAsync(); } else if (format == StandardDataFormats.Bitmap) { var streamRef = await data.GetBitmapAsync(); var uwpStream = await streamRef.OpenReadAsync(); var stream = uwpStream.AsStreamForRead(); nativeData.SetPixbuf(new Pixbuf(stream)); } else if (format == StandardDataFormats.Html) { var htmlString = await data.GetHtmlFormatAsync(); nativeData.Set(HtmlContent, 8, Encoding.UTF8.GetBytes(htmlString)); } else if (format == StandardDataFormats.Rtf) { var rtfString = await data.GetRtfAsync(); nativeData.Set(RtfContent, 8, Encoding.UTF8.GetBytes(rtfString)); } else if (format == StandardDataFormats.StorageItems) { var items = await data.GetStorageItemsAsync(); var builder = new StringBuilder(); builder.AppendLine("copy"); foreach (var item in items) { var path = item.Path; builder.AppendLine(FileUriHelper.UrlEncode(path)); } nativeData.Set(GnomeCopiedFilesContent, 8, Encoding.UTF8.GetBytes(builder.ToString().Trim())); } else if (format == StandardDataFormats.ApplicationLink) { uris.Add((await data.GetApplicationLinkAsync()).ToString()); } else if (format == StandardDataFormats.WebLink) { uris.Add((await data.GetWebLinkAsync()).ToString()); } else if (format == StandardDataFormats.Uri) { uris.Add((await data.GetUriAsync()).ToString()); } if (uris.Count != 0) { nativeData.SetUris(uris.ToArray()); } } uint id; if (CheckFormat(StandardDataFormats.Text, out id)) { targetList.AddTextTargets(id); } if (CheckFormat(StandardDataFormats.Bitmap, out id)) { targetList.AddImageTargets(id, true); } if (CheckFormat(StandardDataFormats.Html, out id)) { targetList.Add(HtmlContent, 0, id); } if (CheckFormat(StandardDataFormats.Rtf, out id)) { targetList.Add(RtfContent, 0, id); } if (CheckFormat(StandardDataFormats.StorageItems, out id)) { targetList.Add(GnomeCopiedFilesContent, 0, id); } if (CheckFormat(StandardDataFormats.ApplicationLink, out id)) { targetList.AddUriTargets(id); } if (CheckFormat(StandardDataFormats.WebLink, out id)) { targetList.AddUriTargets(id); } if (CheckFormat(StandardDataFormats.Uri, out id)) { targetList.AddUriTargets(id); } _clipboard.SetWithData((TargetEntry [])targetList, SetDataNative, (clipboard) => { }); }