Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }