public void HandleCopy (object sender, EventArgs args)
{
Clipboard primary = Clipboard.Get (Atom.Intern ("PRIMARY", false));
Clipboard clipboard = Clipboard.Get (Atom.Intern ("CLIPBOARD", false));
if (Window.Focus is Editable) {
(Window.Focus as Editable).CopyClipboard ();
return;
}
TargetList targetList = new TargetList ();
targetList.AddTextTargets ((uint)DragDropTargets.TargetType.PlainText);
targetList.AddUriTargets ((uint)DragDropTargets.TargetType.UriList);
targetList.Add (
DragDropTargets.CopyFilesEntry.Target,
(uint)DragDropTargets.CopyFilesEntry.Flags,
(uint)DragDropTargets.CopyFilesEntry.Info);
// use eager evaluation, because we want to copy the photos which are currently selected ...
var uris = new UriList (from p in SelectedPhotos ()
select p.DefaultVersion.Uri);
var paths = String.Join (" ",
(from p in SelectedPhotos ()
select p.DefaultVersion.Uri.LocalPath).ToArray ()
);
clipboard.SetWithData ((TargetEntry[])targetList, delegate (Clipboard clip, SelectionData data, uint info) {
if (info == (uint)DragDropTargets.TargetType.PlainText) {
data.Text = paths;
return;
}
if (info == (uint)DragDropTargets.TargetType.UriList) {
data.SetUriListData (uris);
return;
}
if (info == DragDropTargets.CopyFilesEntry.Info) {
data.SetCopyFiles (uris);
return;
}
Log.DebugFormat ("Unknown Selection Data Target (info: {0})", info);
}, delegate {
});
primary.Text = paths;
}