diff options
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT AWT/motif/org/eclipse/swt/awt/SWT_AWT.java')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT AWT/motif/org/eclipse/swt/awt/SWT_AWT.java | 325 |
1 files changed, 0 insertions, 325 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT AWT/motif/org/eclipse/swt/awt/SWT_AWT.java b/bundles/org.eclipse.swt/Eclipse SWT AWT/motif/org/eclipse/swt/awt/SWT_AWT.java deleted file mode 100644 index f8e51f124c..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT AWT/motif/org/eclipse/swt/awt/SWT_AWT.java +++ /dev/null @@ -1,325 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2008 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.awt; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; - -/* SWT Imports */ -import org.eclipse.swt.*; -import org.eclipse.swt.internal.*; -import org.eclipse.swt.internal.motif.OS; -import org.eclipse.swt.graphics.Device; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Event; - -/* AWT Imports */ -import java.awt.AWTEvent; -import java.awt.Dimension; -import java.awt.EventQueue; -import java.awt.Canvas; -import java.awt.Frame; -import java.awt.Window; -import java.awt.event.AWTEventListener; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; -import java.awt.event.WindowEvent; - - -/** - * This class provides a bridge between SWT and AWT, so that it - * is possible to embed AWT components in SWT and vice versa. - * - * @see <a href="http://www.eclipse.org/swt/snippets/#awt">Swing/AWT snippets</a> - * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a> - * - * @since 3.0 - */ -public class SWT_AWT { - - /** - * The name of the embedded Frame class. The default class name - * for the platform will be used if <code>null</code>. - */ - public static String embeddedFrameClass; - - /** - * Key for looking up the embedded frame for a Composite using - * getData(). - */ - static String EMBEDDED_FRAME_KEY = "org.eclipse.swt.awt.SWT_AWT.embeddedFrame"; - -static boolean loaded, swingInitialized; - -static native final int /*long*/ getAWTHandle (Object canvas); -static native final void setDebug (Frame canvas, boolean debug); - -static synchronized void loadLibrary () { - if (loaded) return; - loaded = true; - /* - * Note that the jawt library is loaded explicitily - * because it cannot be found by the library loader. - * All exceptions are caught because the library may - * have been loaded already. - */ - try { - System.loadLibrary("jawt"); - } catch (Throwable e) {} - Library.loadLibrary("swt-awt"); -} - -static synchronized void initializeSwing() { - if (swingInitialized) return; - swingInitialized = true; - try { - /* Initialize the default focus traversal policy */ - Class[] emptyClass = new Class[0]; - Object[] emptyObject = new Object[0]; - Class clazz = Class.forName("javax.swing.UIManager"); - Method method = clazz.getMethod("getDefaults", emptyClass); - if (method != null) method.invoke(clazz, emptyObject); - } catch (Throwable e) {} -} - -/** - * Returns a <code>java.awt.Frame</code> which is the embedded frame - * associated with the specified composite. - * - * @param parent the parent <code>Composite</code> of the <code>java.awt.Frame</code> - * @return a <code>java.awt.Frame</code> the embedded frame or <code>null</code>. - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * - * @since 3.2 - */ -public static Frame getFrame (Composite parent) { - if (parent == null) SWT.error (SWT.ERROR_NULL_ARGUMENT); - if ((parent.getStyle () & SWT.EMBEDDED) == 0) return null; - return (Frame)parent.getData(EMBEDDED_FRAME_KEY); -} - -/** - * Creates a new <code>java.awt.Frame</code>. This frame is the root for - * the AWT components that will be embedded within the composite. In order - * for the embedding to succeed, the composite must have been created - * with the SWT.EMBEDDED style. - * <p> - * IMPORTANT: As of JDK1.5, the embedded frame does not receive mouse events. - * When a lightweight component is added as a child of the embedded frame, - * the cursor does not change. In order to work around both these problems, it is - * strongly recommended that a heavyweight component such as <code>java.awt.Panel</code> - * be added to the frame as the root of all components. - * </p> - * - * @param parent the parent <code>Composite</code> of the new <code>java.awt.Frame</code> - * @return a <code>java.awt.Frame</code> to be the parent of the embedded AWT components - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * <li>ERROR_INVALID_ARGUMENT - if the parent Composite does not have the SWT.EMBEDDED style</li> - * </ul> - * - * @since 3.0 - */ -public static Frame new_Frame (final Composite parent) { - if (parent == null) SWT.error (SWT.ERROR_NULL_ARGUMENT); - if ((parent.getStyle () & SWT.EMBEDDED) == 0) { - SWT.error (SWT.ERROR_INVALID_ARGUMENT); - } - int /*long*/ handle = parent.embeddedHandle; - /* - * Some JREs have implemented the embedded frame constructor to take an integer - * and other JREs take a long. To handle this binary incompatability, use - * reflection to create the embedded frame. - */ - Class clazz = null; - try { - String className = embeddedFrameClass != null ? embeddedFrameClass : "sun.awt.X11.XEmbeddedFrame"; - clazz = Class.forName(className); - } catch (Throwable e) { - SWT.error (SWT.ERROR_NOT_IMPLEMENTED, e, " [need JDK 1.5 or greater]"); - } - initializeSwing (); - Object value = null; - Constructor constructor = null; - try { - constructor = clazz.getConstructor (new Class [] {int.class, boolean.class}); - value = constructor.newInstance (new Object [] {new Integer ((int)/*64*/handle), Boolean.TRUE}); - } catch (Throwable e1) { - try { - constructor = clazz.getConstructor (new Class [] {long.class, boolean.class}); - value = constructor.newInstance (new Object [] {new Long (handle), Boolean.TRUE}); - } catch (Throwable e2) { - SWT.error (SWT.ERROR_NOT_IMPLEMENTED, e2); - } - } - final Frame frame = (Frame) value; - parent.setData(EMBEDDED_FRAME_KEY, frame); - if (Device.DEBUG) { - loadLibrary(); - setDebug(frame, true); - } - try { - /* Call registerListeners() to make XEmbed focus traversal work */ - Method method = clazz.getMethod("registerListeners", null); - if (method != null) method.invoke(value, null); - } catch (Throwable e) {} - final AWTEventListener awtListener = new AWTEventListener() { - public void eventDispatched(AWTEvent event) { - if (event.getID() == WindowEvent.WINDOW_OPENED) { - final Window window = (Window) event.getSource(); - if (window.getParent() == frame) { - parent.getDisplay().asyncExec(new Runnable() { - public void run() { - Shell shell = parent.getShell(); - loadLibrary(); - int awtHandle = getAWTHandle(window); - if (awtHandle == 0) return; - int xtParent = OS.XtParent (shell.handle); - while (xtParent != 0 && !OS.XtIsSubclass (xtParent, OS.shellWidgetClass ())) { - xtParent = OS.XtParent (xtParent); - } - OS.XSetTransientForHint(OS.XtDisplay(xtParent), awtHandle, OS.XtWindow(xtParent)); - } - }); - } - } - } - }; - frame.getToolkit().addAWTEventListener(awtListener, AWTEvent.WINDOW_EVENT_MASK); - final Listener shellListener = new Listener () { - public void handleEvent (Event e) { - switch (e.type) { - case SWT.Deiconify: - EventQueue.invokeLater(new Runnable () { - public void run () { - frame.dispatchEvent (new WindowEvent (frame, WindowEvent.WINDOW_DEICONIFIED)); - } - }); - break; - case SWT.Iconify: - EventQueue.invokeLater(new Runnable () { - public void run () { - frame.dispatchEvent (new WindowEvent (frame, WindowEvent.WINDOW_ICONIFIED)); - } - }); - break; - } - } - }; - Shell shell = parent.getShell (); - shell.addListener (SWT.Deiconify, shellListener); - shell.addListener (SWT.Iconify, shellListener); - - Listener listener = new Listener () { - public void handleEvent (Event e) { - switch (e.type) { - case SWT.Dispose: - Shell shell = parent.getShell (); - shell.removeListener (SWT.Deiconify, shellListener); - shell.removeListener (SWT.Iconify, shellListener); - parent.setVisible(false); - EventQueue.invokeLater(new Runnable () { - public void run () { - frame.getToolkit().removeAWTEventListener(awtListener); - frame.dispose (); - } - }); - break; - case SWT.Resize: - if (Library.JAVA_VERSION >= Library.JAVA_VERSION(1, 6, 0)) { - final Rectangle clientArea = parent.getClientArea(); - EventQueue.invokeLater(new Runnable () { - public void run () { - frame.setSize (clientArea.width, clientArea.height); - } - }); - } - break; - } - } - }; - parent.addListener (SWT.Dispose, listener); - parent.addListener (SWT.Resize, listener); - - parent.getDisplay().asyncExec(new Runnable() { - public void run () { - if (parent.isDisposed()) return; - final Rectangle clientArea = parent.getClientArea(); - EventQueue.invokeLater(new Runnable () { - public void run () { - frame.setSize (clientArea.width, clientArea.height); - frame.validate (); - } - }); - } - }); - return frame; -} - -/** - * Creates a new <code>Shell</code>. This Shell is the root for - * the SWT widgets that will be embedded within the AWT canvas. - * - * @param display the display for the new Shell - * @param parent the parent <code>java.awt.Canvas</code> of the new Shell - * @return a <code>Shell</code> to be the parent of the embedded SWT widgets - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the display is null</li> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * <li>ERROR_INVALID_ARGUMENT - if the parent's peer is not created</li> - * </ul> - * - * @since 3.0 - */ -public static Shell new_Shell (final Display display, final Canvas parent) { - if (display == null) SWT.error (SWT.ERROR_NULL_ARGUMENT); - if (parent == null) SWT.error (SWT.ERROR_NULL_ARGUMENT); - int /*long*/ handle = 0; - try { - loadLibrary (); - handle = getAWTHandle (parent); - } catch (Throwable e) { - SWT.error (SWT.ERROR_NOT_IMPLEMENTED, e); - } - if (handle == 0) SWT.error (SWT.ERROR_INVALID_ARGUMENT, null, " [peer not created]"); - - final Shell shell = Shell.motif_new (display, handle); - final ComponentListener listener = new ComponentAdapter () { - public void componentResized (ComponentEvent e) { - display.syncExec (new Runnable () { - public void run () { - if (shell.isDisposed()) return; - Dimension dim = parent.getSize (); - shell.setSize (dim.width, dim.height); - } - }); - } - }; - parent.addComponentListener(listener); - shell.addListener(SWT.Dispose, new Listener() { - public void handleEvent(Event event) { - parent.removeComponentListener(listener); - } - }); - shell.setVisible (true); - return shell; -} -} |