summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ClipboardProxy.java
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ClipboardProxy.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ClipboardProxy.java393
1 files changed, 0 insertions, 393 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ClipboardProxy.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ClipboardProxy.java
deleted file mode 100644
index 3af544be46..0000000000
--- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ClipboardProxy.java
+++ /dev/null
@@ -1,393 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.swt.dnd;
-
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.internal.*;
-import org.eclipse.swt.internal.motif.*;
-import org.eclipse.swt.widgets.*;
-
-class ClipboardProxy {
-
- Display display;
- int shellHandle;
- int atomAtom, clipboardAtom, motifClipboardAtom, primaryAtom, targetsAtom;
- int[][] convertData = new int[10][3];
- Clipboard activeClipboard = null;
- Clipboard activePrimaryClipboard = null;
- Object[] clipboardData;
- Transfer[] clipboardDataTypes;
- Object[] primaryClipboardData;
- Transfer[] primaryClipboardDataTypes;
-
- boolean done = false;
- Object selectionValue;
- Transfer selectionTransfer;
-
- Callback XtConvertSelectionCallback;
- Callback XtLoseSelectionCallback;
- Callback XtSelectionDoneCallback;
- Callback XtSelectionCallbackCallback;
-
- static byte [] ATOM = Converter.wcsToMbcs (null, "ATOM", true); //$NON-NLS-1$
- static byte [] CLIPBOARD = Converter.wcsToMbcs (null, "CLIPBOARD", true); //$NON-NLS-1$
- static byte [] PRIMARY = Converter.wcsToMbcs (null, "PRIMARY", true); //$NON-NLS-1$
- static byte [] TARGETS = Converter.wcsToMbcs (null, "TARGETS", true); //$NON-NLS-1$
- static byte [] _MOTIF_CLIPBOARD_TARGETS = Converter.wcsToMbcs (null, "_MOTIF_CLIPBOARD_TARGETS", true); //$NON-NLS-1$
- static String ID = "CLIPBOARD PROXY OBJECT"; //$NON-NLS-1$
-
- static ClipboardProxy _getInstance(final Display display) {
- ClipboardProxy proxy = (ClipboardProxy) display.getData(ID);
- if (proxy != null) return proxy;
- proxy = new ClipboardProxy(display);
- display.setData(ID, proxy);
- display.addListener(SWT.Dispose, new Listener() {
- public void handleEvent(Event event) {
- ClipboardProxy clipbordProxy = (ClipboardProxy)display.getData(ID);
- if (clipbordProxy == null) return;
- display.setData(ID, null);
- clipbordProxy.dispose();
- }
- });
- return proxy;
- }
-
-ClipboardProxy(Display display) {
- this.display = display;
- XtConvertSelectionCallback = new Callback(this, "XtConvertSelection", 7); //$NON-NLS-1$
- if (XtConvertSelectionCallback.getAddress() == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
- XtLoseSelectionCallback = new Callback(this, "XtLoseSelection", 2); //$NON-NLS-1$
- if (XtLoseSelectionCallback.getAddress() == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
- XtSelectionDoneCallback = new Callback(this, "XtSelectionDone", 3); //$NON-NLS-1$
- if (XtSelectionDoneCallback.getAddress() == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
- XtSelectionCallbackCallback = new Callback(this, "XtSelectionCallback", 7); //$NON-NLS-1$
- if (XtSelectionCallbackCallback.getAddress() == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
-
- int widgetClass = OS.topLevelShellWidgetClass ();
- shellHandle = OS.XtAppCreateShell (null, null, widgetClass, display.xDisplay, null, 0);
- OS.XtSetMappedWhenManaged (shellHandle, false);
- OS.XtRealizeWidget (shellHandle);
- int xDisplay = OS.XtDisplay(shellHandle);
- atomAtom = OS.XmInternAtom(xDisplay, ATOM, true);
- clipboardAtom = OS.XmInternAtom(xDisplay, CLIPBOARD, true);
- motifClipboardAtom = OS.XmInternAtom(xDisplay, _MOTIF_CLIPBOARD_TARGETS, true);
- primaryAtom = OS.XmInternAtom(xDisplay, PRIMARY, true);
- targetsAtom = OS.XmInternAtom(xDisplay, TARGETS, true);
-}
-
-
- void clear(Clipboard owner, int clipboards) {
- int xDisplay = OS.XtDisplay(shellHandle);
- if (xDisplay == 0) return;
- if ((clipboards & DND.CLIPBOARD) != 0 && activeClipboard == owner) {
- OS.XtDisownSelection(shellHandle, clipboardAtom, OS.CurrentTime);
- }
- if ((clipboards & DND.SELECTION_CLIPBOARD) != 0 && activePrimaryClipboard == owner) {
- OS.XtDisownSelection(shellHandle, primaryAtom, OS.CurrentTime);
- }
-}
-
- void dispose () {
- if (display == null) return;
- if (shellHandle != 0) {
- OS.XtDestroyWidget (shellHandle);
- shellHandle = 0;
- }
- if (XtConvertSelectionCallback != null) XtConvertSelectionCallback.dispose();
- XtConvertSelectionCallback = null;
- if (XtLoseSelectionCallback != null) XtLoseSelectionCallback.dispose();
- XtLoseSelectionCallback = null;
- if (XtSelectionCallbackCallback != null) XtSelectionCallbackCallback.dispose();
- XtSelectionCallbackCallback = null;
- if (XtSelectionDoneCallback != null) XtSelectionDoneCallback.dispose();
- XtSelectionDoneCallback = null;
- activeClipboard = null;
- activePrimaryClipboard = null;
- clipboardData = null;
- clipboardDataTypes = null;
- primaryClipboardData = null;
- primaryClipboardDataTypes = null;
-}
-
-Object getContents(Transfer transfer, int clipboardType) {
- int[] types = getAvailableTypes(clipboardType);
- int index = -1;
- TransferData transferData = new TransferData();
- for (int i = 0; i < types.length; i++) {
- transferData.type = types[i];
- if (transfer.isSupportedType(transferData)) {
- index = i;
- break;
- }
- }
- if (index == -1) return null;
- done = false;
- selectionValue = null; selectionTransfer = transfer;
- int selection = clipboardType == DND.CLIPBOARD ? clipboardAtom : primaryAtom;
- OS.XtGetSelectionValue(shellHandle, selection, types[index], XtSelectionCallbackCallback.getAddress(), 0, OS.CurrentTime);
- if (!done) {
- int xDisplay = OS.XtDisplay (shellHandle);
- if (xDisplay == 0) return null;
- int xtContext = OS.XtDisplayToApplicationContext(xDisplay);
- int selectionTimeout = OS.XtAppGetSelectionTimeout(xtContext);
- wait(selectionTimeout);
- }
- return (!done) ? null : selectionValue;
-}
-
-int[] getAvailableTypes(int clipboardType) {
- int xDisplay = OS.XtDisplay (shellHandle);
- if (xDisplay == 0) return new int[0];
- done = false;
- selectionValue = null; selectionTransfer = null;
- int selection = clipboardType == DND.CLIPBOARD ? clipboardAtom : primaryAtom;
- int target = targetsAtom;
- OS.XtGetSelectionValue(shellHandle, selection, target, XtSelectionCallbackCallback.getAddress(), 0, OS.CurrentTime);
- if (!done) {
- int xtContext = OS.XtDisplayToApplicationContext(xDisplay);
- int selectionTimeout = OS.XtAppGetSelectionTimeout(xtContext);
- wait(selectionTimeout);
-
- }
- if (done && selectionValue == null) {
- done = false;
- target = motifClipboardAtom;
- OS.XtGetSelectionValue(shellHandle, selection, target, XtSelectionCallbackCallback.getAddress(), 0, OS.CurrentTime);
- if (!done) {
- int xtContext = OS.XtDisplayToApplicationContext(xDisplay);
- int selectionTimeout = OS.XtAppGetSelectionTimeout(xtContext);
- wait(selectionTimeout);
-
- }
- }
- if (done && selectionValue == null) {
- done = false;
- target = atomAtom;
- OS.XtGetSelectionValue(shellHandle, selection, target, XtSelectionCallbackCallback.getAddress(), 0, OS.CurrentTime);
- if (!done) {
- int xtContext = OS.XtDisplayToApplicationContext(xDisplay);
- int selectionTimeout = OS.XtAppGetSelectionTimeout(xtContext);
- wait(selectionTimeout);
-
- }
- }
- return (!done || selectionValue == null) ? new int[0] : (int[])selectionValue;
-}
-
-void setContents(Clipboard owner, Object[] data, Transfer[] dataTypes, int clipboards) {
- if ((clipboards & DND.CLIPBOARD) != 0) {
- clipboardData = data;
- clipboardDataTypes = dataTypes;
- int XtConvertSelectionProc = XtConvertSelectionCallback.getAddress();
- int XtLoseSelectionProc = XtLoseSelectionCallback.getAddress();
- int XtSelectionDoneProc = XtSelectionDoneCallback.getAddress();
- if (!OS.XtOwnSelection(shellHandle, clipboardAtom, OS.CurrentTime, XtConvertSelectionProc, XtLoseSelectionProc, XtSelectionDoneProc)) {
- DND.error(DND.ERROR_CANNOT_SET_CLIPBOARD);
- }
- activeClipboard = owner;
- }
- if ((clipboards & DND.SELECTION_CLIPBOARD) != 0) {
- primaryClipboardData = data;
- primaryClipboardDataTypes = dataTypes;
- int XtConvertSelectionProc = XtConvertSelectionCallback.getAddress();
- int XtLoseSelectionProc = XtLoseSelectionCallback.getAddress();
- int XtSelectionDoneProc = XtSelectionDoneCallback.getAddress();
- if (!OS.XtOwnSelection(shellHandle, primaryAtom, OS.CurrentTime, XtConvertSelectionProc, XtLoseSelectionProc, XtSelectionDoneProc)) {
- DND.error(DND.ERROR_CANNOT_SET_CLIPBOARD);
- }
- activePrimaryClipboard = owner;
- }
-}
-
-void storePtr(int ptr, int selection, int target) {
- int index = -1;
- for (int i = 0; i < convertData.length; i++) {
- if (convertData[i][0] == 0){
- index = i;
- break;
- }
- }
- if (index == -1) {
- int[][] newConvertData = new int[convertData.length + 4][3];
- System.arraycopy(convertData, 0, newConvertData, 0, convertData.length);
- index = convertData.length;
- convertData = newConvertData;
- }
- convertData[index][0] = selection;
- convertData[index][1] = target;
- convertData[index][2] = ptr;
-}
-
-void wait(int timeout) {
- int xDisplay = OS.XtDisplay(shellHandle);
- if (xDisplay == 0) return;
- long start = System.currentTimeMillis();
- Callback checkEventCallback = new Callback(this, "checkEvent", 3); //$NON-NLS-1$
- int checkEventProc = checkEventCallback.getAddress();
- if (checkEventProc == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
- int xEvent = OS.XtMalloc (XEvent.sizeof);
- display.timerExec(timeout, new Runnable() {
- public void run() {
- // timer required to force display.sleep() to wake up
- // in the case where no events are received
- }
- });
- while (!done && System.currentTimeMillis() - start < timeout && display != null) {
- if (OS.XCheckIfEvent (xDisplay, xEvent, checkEventProc, 0) != 0) {
- OS.XtDispatchEvent(xEvent);
- } else {
- display.sleep();
- }
- }
- OS.XtFree (xEvent);
- checkEventCallback.dispose();
-}
-int checkEvent(int display, int event, int arg) {
- XEvent xEvent = new XEvent();
- OS.memmove (xEvent, event, XEvent.sizeof);
- switch (xEvent.type) {
- case OS.SelectionClear:
- case OS.SelectionNotify:
- case OS.SelectionRequest:
- case OS.PropertyNotify:
- return 1;
- }
- return 0;
-}
-int XtConvertSelection(int widget, int selection, int target, int type, int value, int length, int format) {
- int selectionAtom = 0;
- if (selection != 0) {
- int[] dest = new int[1];
- OS.memmove(dest, selection, 4);
- selectionAtom = dest[0];
- }
- if (selectionAtom == 0) return 0;
- Transfer[] types = null;
- if (selectionAtom == clipboardAtom) types = clipboardDataTypes;
- if (selectionAtom == primaryAtom) types = primaryClipboardDataTypes;
- if (types == null) return 0;
-
- int targetAtom = 0;
- if (target != 0) {
- int[] dest = new int[1];
- OS.memmove(dest, target, 4);
- targetAtom = dest[0];
- }
- if (targetAtom == atomAtom ||
- targetAtom == targetsAtom ||
- targetAtom == motifClipboardAtom) {
- int[] transferTypes = new int[] {targetAtom};
- for (int i = 0; i < types.length; i++) {
- TransferData[] subTypes = types[i].getSupportedTypes();
- int[] newtransferTypes = new int[transferTypes.length + subTypes.length];
- System.arraycopy(transferTypes, 0, newtransferTypes, 0, transferTypes.length);
- int index = transferTypes.length;
- transferTypes = newtransferTypes;
- for (int j = 0; j < subTypes.length; j++) {
- transferTypes[index++] = subTypes[j].type;
- }
- }
- int ptr = OS.XtMalloc(transferTypes.length*4);
- storePtr(ptr, selectionAtom, targetAtom);
- OS.memmove(ptr, transferTypes, transferTypes.length*4);
- OS.memmove(type, new int[]{targetAtom}, 4);
- OS.memmove(value, new int[] {ptr}, 4);
- OS.memmove(length, new int[]{transferTypes.length}, 4);
- OS.memmove(format, new int[]{32}, 4);
- return 1;
- }
-
- TransferData tdata = new TransferData();
- tdata.type = targetAtom;
- int index = -1;
- for (int i = 0; i < types.length; i++) {
- if (types[i].isSupportedType(tdata)) {
- index = i;
- break;
- }
- }
- if (index == -1) return 0;
- Object[] data = selectionAtom == clipboardAtom ? clipboardData : primaryClipboardData;
- types[index].javaToNative(data[index], tdata);
- if (tdata.format < 8 || tdata.format % 8 != 0) {
- OS.XtFree(tdata.pValue);
- return 0;
- }
- // copy data back to value
- OS.memmove(type, new int[]{tdata.type}, 4);
- OS.memmove(value, new int[]{tdata.pValue}, 4);
- OS.memmove(length, new int[]{tdata.length}, 4);
- OS.memmove(format, new int[]{tdata.format}, 4);
- storePtr(tdata.pValue, selectionAtom, targetAtom);
- return 1;
-}
-
-int XtLoseSelection(int widget, int selection) {
- if (selection == clipboardAtom) {
- activeClipboard = null;
- clipboardData = null;
- clipboardDataTypes = null;
- }
- if (selection == primaryAtom) {
- activePrimaryClipboard = null;
- primaryClipboardData = null;
- primaryClipboardDataTypes = null;
- }
- return 0;
-}
-
-int XtSelectionCallback(int widget, int client_data, int selection, int type, int value, int length, int format) {
- done = true;
- int[] selectionType = new int[1];
- if (type != 0) OS.memmove(selectionType, type, 4);
- if (selectionType[0] == 0) return 0;
- int[] selectionLength = new int[1];
- if (length != 0) OS.memmove(selectionLength, length, 4);
- if (selectionLength[0] == 0) return 0;
- int[] selectionFormat = new int[1];
- if (format != 0) OS.memmove(selectionFormat, format, 4);
- if (selectionType[0] == atomAtom ||
- selectionType[0] == targetsAtom ||
- selectionType[0] == motifClipboardAtom) {
- int[] targets = new int[selectionLength[0]];
- OS.memmove(targets, value, selectionLength[0] * selectionFormat [0] / 8);
- selectionValue = targets;
- return 0;
- }
- if (selectionTransfer != null) {
- TransferData transferData = new TransferData();
- transferData.type = selectionType[0];
- transferData.length = selectionLength[0];
- transferData.format = selectionFormat[0];
- transferData.pValue = value;
- transferData.result = 1;
- selectionValue = selectionTransfer.nativeToJava(transferData);
- }
- return 0;
-}
-
-int XtSelectionDone(int widget, int selection, int target) {
- if (target == 0 || selection == 0) return 0;
- int[] selectionAtom = new int[1];
- OS.memmove(selectionAtom, selection, 4);
- int[] targetAtom = new int[1];
- OS.memmove(targetAtom, target, 4);
- for (int i = 0; i < convertData.length; i++) {
- if (convertData[i][0] == selectionAtom[0] && convertData[i][1] == targetAtom[0]) {
- OS.XtFree(convertData[i][2]);
- convertData[i][0] = convertData[i][1] = convertData[i][2] = 0;
- break;
- }
- }
- return 0;
-}
-}