private void HandleSelectionRequest(XSelectionRequestEvent evt) { XEvent retEvent = new XEvent(); retEvent.type = XEventName.SelectionNotify; retEvent.SelectionEvent.display = evt.display; retEvent.SelectionEvent.requestor = evt.requestor; retEvent.SelectionEvent.selection = evt.selection; retEvent.SelectionEvent.time = evt.time; retEvent.SelectionEvent.target = evt.target; retEvent.SelectionEvent.property = evt.property; if (evt.target == atomTargets) { HandleTargetRequest(evt); } if (IsFormatText(evt.target)) { HandleRequestString(evt); } if (IsFormatImage(evt.target)) { HandleRequestImage(evt); } XSendEvent(xConnection.XDisplay, retEvent.SelectionEvent.requestor, false, 0, ref retEvent); }
private void HandleRequestImage(XSelectionRequestEvent evt) { if (copiedData == null || copiedData.DataType != ClipboardDataType.Image) { ISLogger.Write("{0}: cannot handle text request: Copied data is not image", ModuleName); return; } ClipboardImageData data = (ClipboardImageData)copiedData; XChangeProperty(xConnection.XDisplay, evt.requestor, evt.property, atomImagePng, 8, 0, data.ImageData, data.ImageData.Length); }
private void HandleRequestString(XSelectionRequestEvent evt) { if (copiedData == null || copiedData.DataType != ClipboardDataType.Text) { ISLogger.Write("{0}: cannot handle text request: Copied data is not text", ModuleName); return; } ClipboardTextData data = (ClipboardTextData)copiedData; XChangeProperty(xConnection.XDisplay, evt.requestor, evt.property, atomUtf8String, 8, 0, Encoding.UTF8.GetBytes(data.Text), data.Text.Length); }
private void HandleTargetRequest(XSelectionRequestEvent evt) { if (copiedData == null) { ISLogger.Write("Ignoring target request... no data is copied"); return; } byte[] raw = new byte[0]; if (copiedData.DataType == ClipboardDataType.Text) { raw = GetAtomsBytesText(); } else if (copiedData.DataType == ClipboardDataType.Image) { raw = GetAtomsBytesImage(); } XChangeProperty(xConnection.XDisplay, evt.requestor, evt.property, new IntPtr(4), 32, 0, raw, 1); }